fsutil hardlink не работает?
Я искал способ создания жестких ссылок под Windows и нашел эту страницу: http://technet.microsoft.com/en-us/library/cc788097.aspx
Чтобы попробовать это, я создал файл (1.txt) в корне диска C: 100 строк следующего содержания:
C: \ 1.txt (2,598 байт):
test test test test test
Затем я открываю командную строку и набираю:
fsutil hardlink create C:\2.txt C:\1.txt
Успех, 2.txt был создан, но когда я увижу его размер, он имеет ровно 2,598 байт, а также заметил некоторые странные поведения (насколько я понимаю, жесткие ссылки):
- Если я удаляю 2.txt (жестко связанный файл), то 1.txt не удаляется, и наоборот.
- Если я открою 2.txt после удаления 1.txt (исходного файла), содержимое останется прежним.
Чем команда fsutil hardlink create отличается от команды copy? И как я могу создать настоящую жесткую ссылку под Windows?
Я использую Windows XP SP 3, и моя файловая система NTFS.
3 ответа
Это именно то поведение, которое должно произойти. Вы уверены, что понимаете, как работают жесткие ссылки? Жесткие ссылки - это просто несколько записей в файловой системе, которые ссылаются на один и тот же файл. Если вы создадите жесткую ссылку на файл и измените один из экземпляров файла, другой файл будет отображаться с вашими изменениями, поскольку они оба ссылаются на одни и те же блоки данных на диске.
Когда вы удаляете одну из жестких ссылок, вы на самом деле просто удаляете одну из записей файловой системы, относящихся к этому файлу. Файл не будет удален, пока вы не удалите все его жесткие ссылки (включая оригинальную). После удаления 1.txt, 2.txt все еще существует и ссылается на тот же файл, который был там изначально, только теперь есть только одна запись файловой системы, ссылающаяся на этот файл (а именно, 2.txt). 2.txt это тот файл.
Чем команда fsutil hardlink create отличается от команды copy? И как я могу создать настоящую жесткую ссылку под Windows?
После создания файла с жесткими ссылками попробуйте изменить либо. Вы обнаружите, что изменения отражены в обоих файлах.
Попробуйте создать жесткую ссылку на очень большой файл (например, видео или образ диска). Обратите внимание, что доступное пространство на диске не изменилось (или не изменилось более чем на несколько байтов, если на диск нужно было записать дополнительные метаданные для отражения новой записи dir).
Это действительно жесткая ссылка. В UNIX (я не знаком с вариантом Windows) файл - это просто набор данных на диске (упрощенно). Именно запись в каталоге дает этому файлу имя.
Если у вас есть две записи каталога, указывающие на один и тот же базовый файл, удаление одной из них не приведет к удалению файла, если это не последняя присоединенная запись каталога (и файл еще не открыт процессом, но это другой вопрос).