PDA

Показать полную графическую версию : [решено] Немного о ссылках NTFS


Antrodamikus
23-05-2015, 17:40
Привет, мир!

Давече озабитился вопросом использования команды mklink для создания NTFS-ссылок. Изначально, я хотел почистить папку %windir%\winsxs, вбил запрос в яндекс, на первой же странице наткнулся на статью по использованию скрипта WinsxsLite v1.88. Благо, с первой страницы перешел в этот бложик: http://www.outsidethebox.ms/15444/, после прочтения которого передумал юзать скрипт и оставил папку в покое. Насколько я понял, папка winsxs является хранилищем жестких ссылок, и удаление файлов из нее (этих самых ссылок) приведет к краху отдельных функций ОС или системы в целом. Но сейчас не об этом. Я очень консервативен, после того как пол года назад мой hdd с XP приказал долго жить, ремап викторией не помог и на новый хард я решил все же поставить Win7 - наконец, пора! Скачал, установил, 2 месяца поминал дядю Билла в процессе привыкания (и сейчас этим грешу). Многое в GUI не устраивает (а Win8 в ночных кошмарах частый гость), и одна из таких вещей - переименованные папки в корне системного раздела (Documents and Settings - Users, к примеру), перенос %Temp% из %systemdrive%\Temp\ в %localappdata%\Temp\.

Длинное вышло вступление, однако. Теперь к делу. В предустановленной ОС на диске С присутствуют NTFS ссылки на переименованые папки - All Users, Application Data, Главное меню и др. Сделано это, по моим умозаключениям, для обеспечения совместимости старого Xp-шного софта, где прописаны абсолютные пути, с Win7. Правда, зачем было вообще переносить и переименовывать папки и получить себе геморрой конфликт с путями, непонятно. В итоге Microsoft родила данный костыль. После прочтения вышеозначенной статьи и близкого ознакомления с ссылками, решил обратить процесс тем же методом. Править %temp% и воротить систему чревато, и я решил поставить символические ссылки на папки, приведя их названия к xp-шным, а самим папкам назначить атрибут "скрытый". В итоге система осталась бы не ковыряной и целой, в то время как я бы получил что хотел. И овцы целы, и волки сыты. Но не тут-то было.

http://upyourpic.org/images/201405/am7krgq4bo.jpg (http://upyourpic.org/images/201405/am7krgq4bo.jpg.html)

http://upyourpic.org/images/201405/3qwwrlz1qf.jpg (http://upyourpic.org/images/201405/3qwwrlz1qf.jpg.html)
http://upyourpic.org/images/201405/rkkji9zmf5.jpg (http://upyourpic.org/images/201405/rkkji9zmf5.jpg.html)

Как видите, созданная мной ссылка - это папка Temp, но путь к ней прописан так, будто бы она физически расположена в корне диска С (левая панель), в то время как должна быть такой, как на правой. А еще появились непонятные замки на иконках.

При этом предустановленные микрософтские ссылки работают как надо:
http://upyourpic.org/images/201405/gkjpvkc1qz.jpg (http://upyourpic.org/images/201405/gkjpvkc1qz.jpg.html)

Собственно, мне нужно что бы и созданные мною ссылки работали так же. С этой проблемой обращаюсь к вам.

Кроме того, заметил что если папка, на которую создается ссылка, имеет в названии пробелы (название из двух слов), получаем error. Кто знает как обойти без переименования с _?
http://upyourpic.org/images/201405/suyr21d25p.jpg (http://upyourpic.org/images/201405/suyr21d25p.jpg.html)

Моя ОС: Windows 7 Ultimate x86 SP1. Запускал cmd от имени админа (при этом это единственная учетка), пробовал создавать символические ссылки и соединения, результат выше. Надеюсь на помощь!

P.S. Если Вам кажется, что я одержим бредовой идеей, трачу свое (и Ваше) время впустую, "Просто используй все как есть", вспомните, как Вы работали за чужой машиной с чужим ПО и настройками, и как приятно было вернуться к себе домой. У меня такое чувство постоянно, пусть и не столь сильное. Работать за своим же ПК не комфортно где-то на границе сознания, и виной тому совокупность мелочей, одна из которых описана в этой теме. Кроме того, у меня всегда запущен TC, и левая панель - диск С (система), правая - D (все файлы и большинство программ). Поскольку чаще я юзаю D, левая панель большую часть времени отображает корень С, и Win7-модель постоянно, каждый день и каждый час мозолит глаза. Бесит! Спасибо, что осилили гору текста.

Vadikan
23-05-2015, 17:57
Многое в GUI не устраивает (а Win8 в ночных кошмарах частый гость), и одна из таких вещей - переименованные папки в корне системного раздела (Documents and Settings - Users, к примеру), перенос %Temp% из %systemdrive%\Temp\ в %localappdata%\Temp\. »
Этого в XP не было, временные файлы пользователя хранились в %USERPROFILE%\Local Settings\Temp
правда, зачем было вообще переносить и переименовывать папки и получить себе геморрой конфликт с путями, непонятно. В итоге Microsoft родила данный костыль. »
Ликбез тут Как получить доступ к папке* “Documents and Settings” в корне диска и похожим папкам в профиле (http://www.outsidethebox.ms/12452/#_Toc302426011).

Что же касается сути задачи, то расположение %temp% меняется в переменных среды (вводить в поиск меню пуск), а переименовывать Users в Documents and Settings - одержим бредовой идеей »

См. также [решено] Соединения, символические и жесткие ссылки (http://forum.oszone.net/thread-209013.html)

Antrodamikus
23-05-2015, 18:09
Спасибо, посмотрю

Iska
23-05-2015, 19:43
Насколько я понял, папка winsxs является хранилищем жестких ссылок, и удаление файлов из нее (этих самых ссылок) приведет к краху отдельных функций ОС или системы в целом. »
Поняли, но не так. Удаление файлов из этой папки (в реальности — жёстких ссылок) не приведёт к увеличению количества свободного места.

переименованные папки в корне системного раздела (Documents and Settings - Users, к примеру) »
Решение спорное, но остались ссылки, аналогичные старым папкам («Documents and Settings» ссылается на «Users», «к примеру» ;)).

перенос %Temp% из %systemdrive%\Temp\ в %localappdata%\Temp\. »
Это неверное утверждение. В NT 5.x переменная окружения TEMP, ни пользовательская, ни системная, на %systemdrive%\Temp никогда не ссылалась.

Кроме того, заметил что если папка, на которую создается ссылка, имеет в названии пробелы (название из двух слов), получаем error. Кто знает как обойти без переименования с _? »
Обрамляйте путь\имя папки кавычками.

После прочтения вышеозначенной статьи и близкого ознакомления с ссылками, решил обратить процесс тем же методом. »
Не делайте этого.

P.S. Если Вам кажется, что я одержим бредовой идеей, »
Угу. Кажется.

Antrodamikus
23-05-2015, 20:15
Видимо, у меня в XP была переопределена переменная %TEMP%, а я и не знал. Насчет кавычек запомню. Но как же сделать так, что бы в строке адреса был прописан, собственно, адрес на который ссылается соединение или ссылка, а не название?

Iska
23-05-2015, 20:20
Но как же сделать так, что бы в строке адреса был прописан, собственно, адрес на который ссылается соединение или ссылка, а не название? »
Поясните примером.

Antrodamikus
23-05-2015, 20:26
Допустим, создал я ссылку на папку %НазваниеПапки%. Захожу через Enter в эту папку по созданной ссылке, но в строке адреса вижу не %НазваниеПапки% а %НазваниеСсылки%. При этом ссылка сработала и отображено содержимое требуемой папки. В первом посте есть скрин. Соединения видут себя так же. У предустановлленных системных ссылок на C:\ такого бага нет. Это весьма странно...

Iska
23-05-2015, 20:39
Допустим, создал я ссылку на папку %НазваниеПапки%. Захожу через Enter в эту папку по созданной ссылке, но в строке адреса вижу не %НазваниеПапки% а %НазваниеСсылки%. »
Именно так. И более того — именно так и должно быть.

У предустановлленных системных ссылок на C:\ такого бага нет. »
Опять ничего непонятно. У каких «предустановленных системных ссылок на C:\»? Скриншотами поясните, что ли.

Antrodamikus
23-05-2015, 21:02
В корне диска С лежит ссылка Documents and Settings, установленная Microsoft (ее и подобные ссылки на С я имел ввиду, говоря "предустановленная"). Так вот, тыкнув не нее, попадем в C:\Users\, а не в C:\ Documents and Settings. А вот создаем пользовательскую ссылку на C:\Users\ с названием Documents, тыкнув на нее попадем в C:\Documents\ , а не в C:\Users\.

http://upyourpic.org/images/201405/uaqxv4cw6l.jpg (http://upyourpic.org/images/201405/uaqxv4cw6l.jpg.html)
http://upyourpic.org/images/201405/pliuy4vjhu.jpg (http://upyourpic.org/images/201405/pliuy4vjhu.jpg.html)
http://upyourpic.org/images/201405/uaekxdeerq.jpg (http://upyourpic.org/images/201405/uaekxdeerq.jpg.html)
http://upyourpic.org/images/201405/fm825mdoja.jpg (http://upyourpic.org/images/201405/fm825mdoja.jpg.html)
Во втором случае разве не должо быть C:\Users\, а не C:\Documents\?
Я неправильно понимаю механизм работы ссылок, или так и должно быть?

Antrodamikus
23-05-2015, 21:22
И если уж на то пошло, известно что ссылки не занимают место на винчестере вообще, в отличие от того же ярлыка. Но вся соль в том, что OS об этом не знает и считает, что ссылки весят столько же, сколько и оригиналы, хотя в действительности это не так. Та же папка winsxs на самом деле не весит и одного гб. И вот однажды, предположим, место на харде кончися, хотя физически оно еще будет но OS будет считатьпосчитает что место занято под файлы (ссылки). Внимание, вопрос! Имеет ли конечное практическое значение факт, что ссылки не имеют веса, если OS его считает? Какая разница, полупуст ли хард если на него не позволит писать система? Парадокс?

Iska
23-05-2015, 21:56
Так вот, тыкнув не нее, попадем в C:\Users\, а не в C:\ Documents and Settings. »
Обратите внимание, что «тыкнув» в стороннем файловом менеджере. «Тыкнув» на «Documents and Settings» в Проводнике — получите отлуп в виде сообщения.

А вот создаем пользовательскую ссылку на C:\Users\ с названием Documents, »
Опишите/покажите процесс создания Вами ссылки «C:\Documents».

ссылки не занимают место на винчестере вообще »
Это не совсем так. Они занимают запись в MSFT.

И вот однажды, предположим, место на харде кончися, хотя физически оно еще будет но OS будет считатьпосчитает что место занято под файлы (ссылки). »
Поверьте, ОС «не посчитает». Подсчёт свободного места идёт иначе, нежели Вы предполагаете.

Antrodamikus
23-05-2015, 22:09
Так... Кажется, я допер. Стандартные junctions блокируются виндоуским эксплорером, но почему-то открываются сторонними файловыми менеджерами типо TC (что и ввело меня в заблуждение). Можно добиться сходного эффекта у пользовательских соединений, установив запрет на чтение группе "Пользователи". Из этого можно сделать вывод, что стандартные ссылки и соединения не предназначены для того что бы туда ходили юзеры, но как юзеры, так и программы могут обращаться к этим объектам косвенно (собственно, для чего они и были созданы). Так же из этого следует что поведение ссылок и соединений, когда в строке адреса указывается путь именно ссылки\соединения является абсолюно нормальным, как и указал Iska.

Опишите/покажите процесс создания Вами ссылки «C:\Documents». »

Да никаких премудростей: mklink /j c:\Documents c:\Users (или /d для ссылки)

Iska
23-05-2015, 22:20
Да, разрешения на объекты «Users» и «Documents and Settings» несколько различаются. Но отказ во входе — полагаю, вызван именно файловым менеджером, т.е. — в Проводником.

Кстати, у меня, под Far Manager'ом, нет никакой разницы, «ходить» по точкам соединения, созданным системой (aka «Documents and Settings») или пользователем — и там, и там отображается именно точка соединения (причём, неважно какая именно — Junction или Symlink).

Antrodamikus
23-05-2015, 22:21
Но я по-прежнему не понимаю, как рассчитывается место, "занятое" под ссылки. Предположим, я создал ссылок на файлы размером ~5 ГБ, + winsxs весит столько же. Так же я имею диск С, забирый на 50 ГБ из 60, итого OS подскажет, что он забит полностью. Что будет, если я скопирую пару-тройку фильмов на "заполненный" раздел?

Iska, у меня Тотал древний, 7.02, может в более свежих версиях это пофикшено уже.

В итоге я принял волевое решение следовать стандартам проводника, дабы не разочароваться, обновив TC (в обозримом будущем).

Iska
23-05-2015, 23:05
Но я по-прежнему не понимаю, как рассчитывается место, "занятое" под ссылки. »
Оно должно рассчитываться как будто это не ссылки, а обычные папки и файлы. Это необходимо, например, для оценки объема при копировании содержимого Проводником.

Так же я имею диск С, забирый на 50 ГБ из 60, итого OS подскажет, что он забит полностью. »
ОС может показать, что размер всех выделенных папок и файлов на диске больше, чем объём диска ;). А вот если Вы посмотрите на свойства диска — увидите реальную оценку. Я уже писал, что ОС иначе определяет размер доступного пространства на томе:
GetDiskFreeSpace function (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364935(v=vs.85).aspx)
GetDiskFreeSpaceEx function (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364937(v=vs.85).aspx)

Antrodamikus
23-05-2015, 23:42
Узнал много нового, спасибо!

Iska
24-05-2015, 00:01
Можете ещё здесь почитать, например (не помню, были ли эти ссылки в оригинальной теме):

Reparse Points (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365503(v=vs.85).aspx)
Symbolic Links (Windows) (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365680(v=vs.85).aspx)

и по связанным с ними ссылками в этих статьях.

mwz
24-05-2015, 12:56
Antrodamikus, и ещё в копилку: утилита Link Shell Extension (http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html) (раздельная для 32- и 64-битных версий).

Кроме того, что позволяет создавать специальные NTFS-ссылки одним движением мышки, ещё и "проявляет" все точки связи зрительно, добавляя оверлеи (цепочка – junction, красная стрелка – hardlink, зелёная – symlink) на значки файлов и папок, имеющих такие связи.

Также позволяет копировать папки, содержащие связи, с сохранением соответствующих связей в копии структуры – но оторванных от связей исходной папки (т.е. связи в такой копии указывают не на старое, а на скопированное положение связанных папок и файлов).




© OSzone.net 2001-2012