6

Я создал жесткую ссылку, указывающую на файл в моей директории dropbox - ссылка была создана внутри папки, где этот файл должен находиться для доступа к программам, которые я использую для его редактирования -

mklink /h path_to_hard_link C:\dropbox\git\repo\existing_file

Я начал работать с жесткой ссылкой в порядке. В какой-то момент я понял, что изменения не распространяются на файл в repo\ - размер файла, дату модификации, ничего - НЕ ДАЖЕ содержимое.

Что я делаю неправильно ?

РЕДАКТИРОВАТЬ: возможно ли быть зависимым от программы? Я имею в виду, что редактор, который я использую для этих файлов, действительно их редактирует, но редактирует только жесткую ссылку. Ссылка на файл не была изменена. Более того, этот редактор не может переходить по символическим ссылкам

EDIT2: в соответствии со статьей Surfasb:

Поскольку жесткая ссылка является записью каталога для файла, приложение может изменить файл, используя любую из своих жестких ссылок. Приложения, использующие любую другую жесткую ссылку, могут обнаружить изменения.

Это означает, что исходный файл должен содержать изменения при открытии в соответствующем редакторе напрямую - не только через жесткую ссылку - верно?

Однако записи каталога для жестких ссылок обновляются только тогда, когда пользователь обращается к файлу с помощью жесткой ссылки. Например, если пользователь открывает и изменяет файл, используя его жесткую ссылку, а размер исходного файла изменяется, жесткая ссылка, используемая для доступа к файлу, также показывает новый размер.

Если я правильно понимаю этот прискорбный образец английского языка, это означает, что у меня может быть 69 жестких ссылок (на самом деле до 1023) на один и тот же файл, показывающий разные размеры для этого же файла ?!

РЕДАКТИРОВАТЬ 3: ну, в соответствии с surfasb, я понимаю это правильно - ограничение файловой системы. Во всяком случае - странная вещь - это не всегда так - иногда изменение атрибутов сразу видно обратно в исходный файл - когда есть изменения - моя настоящая проблема сейчас в том, что по крайней мере одна программа, которую я использую, кажется, не редактирует файл связан, но только жесткая ссылка. Возможный ? dir /a мало раскрывает жесткие ссылки - есть ли способ их увидеть?

2 ответа2

4

Я думаю, что ответ (цитируется некоторым полезным парнем):

Что вы должны рассмотреть, так это то, как приложение / программа работает с файлом.

Некоторые редактируют файл напрямую, и они должны отлично работать с жесткими ссылками. Хотя до сих пор я не знал о проблеме "разницы в fileinfo" ...

Другие приложения копируют файл, а затем удаляют старый при сохранении отредактированной версии. Эти программы явно ломают жесткую связь с этой скрытой операцией копирования. То, что они сохраняют, больше не файл, который они открыли. Когда они затем удаляют старую версию, они удаляют эту единственную жесткую ссылку из каталога. Остальные жесткие ссылки остаются, и в итоге вы получаете два файла.

Так что да - жесткие ссылки могут и будут ломаться - что ограничивает их полезность - плохо продуман.

поправь меня если не прав

3

Включили ли вы время последнего доступа? По умолчанию он отключен, начиная с Vista++, по соображениям производительности.

Я вижу этот вопрос много. Я всегда говорю людям, чтобы они работали над Technet и читали документацию по NTFS.

http://technet.microsoft.com/en-us/library/cc781134(WS.10).aspx

Обратите внимание, что NTFS не сразу записывает LAT на диск. Как правило, он будет ждать, пока разница составит час, или просто сам внесет изменения в этот файл. Однако запросы на основе файлов будут правильными.

Это не инструмент аудита. Будут случаи, когда NTFS не будет обновлять LAT за счет производительности. Если вы ищете инструмент аудита, я бы посоветовал вам включить локальный аудит безопасности. Он будет регистрировать весь доступ к файлу, в отличие от LAT. Например, вы можете использовать множество API-вызовов, которые не влияют на LAT.

Изменить ответ на комментарий ниже.

Буду читать это - но а) я на самом деле больше всего беспокоился о LMT и б) даже размер и содержимое файла не изменились - может ли это зависеть от программы? Это определенно не должно. Я начинаю ценить Unix и узлы i здесь - РЕДАКТИРОВАТЬ: размер и время не должны распространяться (требуется подтверждение), но содержимое должно

В статье конкретно рассматриваются ваши точные проблемы. Я процитирую статью. Акцент был добавлен мной.

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

Поскольку жесткая ссылка является записью каталога для файла, приложение может изменить файл, используя любую из своих жестких ссылок. Приложения, использующие любую другую жесткую ссылку, могут обнаружить изменения. Однако записи каталога для жестких ссылок обновляются только тогда, когда пользователь обращается к файлу с помощью жесткой ссылки. Например, если пользователь открывает и изменяет файл, используя его жесткую ссылку, а размер исходного файла изменяется, жесткая ссылка, используемая для доступа к файлу, также показывает новый размер.

Таким образом, хотя сам файл был изменен, соответствующие записи каталога не будут обновлены, если к ним нет доступа. Так что если у вас есть текстовый файл, открытый через две соответствующие жесткие ссылки, то обе записи каталога будут изменены. Теперь, если файл открыт только через жесткую ссылку A, жесткая ссылка B не будет обновлена. Файл будет иметь все изменения, которые вы сделали. Но опять же, жесткие ссылки являются записями каталога, и NTFS не обновляет запись каталога, если вы ее не используете. Это было бы пустой тратой ввода / вывода.

Теперь я предполагаю, что вы смотрите на все это через Проводник. Explorer отображает информацию, очень похожую на ввод dir в строке cmd. Список каталогов - это просто список. Однако чтение списка каталогов не дает доступа к файлу, что важно. В противном случае получение списка каталогов приведет к изменению времени последнего доступа к файлу !! Таким образом, вы получите устаревшую информацию, если есть жесткая ссылка. Вы можете заставить Проводник получить доступ к файлу, щелкнув правой кнопкой мыши и сказав, проверьте вкладку сведений. Или просто открыть файл.

Edit3

не совсем получая разницу - при нажатии ^ c, затем ^ v в файле foo.txt (таким образом, windows создает файл типа foo - Copy.txt и помещает его в текущий каталог) - это копирование в каком смысле?

Это было сложно, потому что я понятия не имею, как Explorer обрабатывает копирование существующего файла в его текущий каталог. Так что я должен был проверить это. Похоже, что Explorer копирует целевой файл источника, независимо от того, является ли исходный файл жесткой или символической ссылкой.

Explorer не имеет очень детального контроля и поддержки символических и жестких ссылок. Теперь можно скопировать саму ссылку, если вы выполните "mklink /h Foo1.txt Foo.txt" . Это создает новую жесткую ссылку с именем Foo1.txt . Вы не можете сделать это в Explorer, хотя. Я предлагаю вам получить расширение Link Shell. Он накладывает ссылки на пользовательские значки стрелок, перечисляет цели и позволяет явно создавать символические и жесткие ссылки.

Edit4

в соответствии с surfasb я правильно понимаю это - ограничение файловой системы - теперь я ценю концепцию inode. Во всяком случае - странная вещь - это не всегда так - иногда изменение атрибутов сразу видно обратно в исходный файл - когда есть изменения - моя настоящая проблема сейчас в том, что по крайней мере одна программа, которую я использую, кажется, не редактирует файл связан, но только жесткая ссылка. Возможный ? dir /a не показывает много о жестких ссылках - любой способ видеть их

Я не помню, чтобы видеть эту часть вашего вопроса. Меня интересует программа, которая не редактирует связанный файл. Какая это программа?

dir /a не будет обновлять записи каталога. Это сделано специально, потому что это будет довольно интенсивно работать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .