В чем разница между жесткими ссылками NTFS и соединениями каталогов?

79

Название говорит само за себя ... какая разница? Когда я использую один и когда я использую другой?

Добавлено: Обратите внимание, что точки соединения , жесткие ссылки и символические (программные) ссылки - это три разные вещи в NTFS.

Vilx-
источник
2
Согласно документации Microsoft, существует три различных категории: Жесткая ссылка: msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx ; Junction (soft-link): msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx ; Символическая ссылка: msdn.microsoft.com/en-us/library/aa363878%28VS.85%29.aspx .
Иосип Медведь

Ответы:

33

Файлы данных NTFS хранятся со всеми своими атрибутами как «inode» с идентификатором, а имена файлов указывают на inode. Все файлы имеют одну + жесткую ссылку. некоторые инструменты могут создавать дополнительные имена (жесткие ссылки), которые указывают на один и тот же индекс, который имеет счетчик количества имен, указывающих на него. Если число обращается в ноль, ОС удаляет файл, индекс.

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

(Дополнительные) жесткие ссылки полезны, когда вы хотите, чтобы разные имена указывали на одни и те же данные, читали или записывали. Они экономят пространство и накладные расходы. Тем не менее, они закрывают программы, которые принимают разные имена, указывающие на разные данные. Например, если вы заменяете ссылки на дубликаты файлов жесткими ссылками на один файл, то вы удалили любую резервную копию, которая у вас есть! ОС Windows - это одна программа, которая предполагает, что разные имена указывают на разные наборы битов.

Жесткие ссылки должны быть на одном физическом и логическом томе.

Они полезны для:

  • сокращение длины пути, поскольку Windows поддерживает 256 символов или около того.

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

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

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

Те же предостережения тоже! Многие программы предполагают разные имена = разные файлы.

А затем есть символические ссылки (которые могут идти через сети), ярлыки и PIFs и .....

Также некоторая информация от самой Microsoft :

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

Forethinker
источник
1
Работает ли символическая ссылка на уровне жесткого диска (NTFS) или на уровне операционной системы Windows?
IsmailS
48

Быстрые определения:

Символическая ссылка: ссылка на файл или каталог на том же или другом томе (буква диска) или даже на удаленный файл или каталог (с использованием UNC в своем пути).

Жесткая ссылка: ссылка на файл только на том же томе (буква диска). Каждый файл (данные файла) имеет как минимум 1 жесткую ссылку (имя файла). Удаление всех жестких ссылок эффективно удаляет файл.

Junction: ссылка на каталог на том же или другом томе (буква диска), но не на удаленный каталог.


Подробности:

Предполагая, что вы работаете с томами NTFS в Windows Vista / 7, вы можете использовать инструмент командной строки MKLINK для создания всех трех типов ссылок:

MKLINK [[/D] | [/H] | [/J]] Link Target

        /D      Creates a directory symbolic link.  Default is 
                a file symbolic link.

        /H      Creates a hard link instead of a symbolic link.

        /J      Creates a Directory Junction.

        Link    specifies the new symbolic link name.

        Target  specifies the path (relative or absolute) that 
                the new link refers to.

Символические ссылки . Символическая ссылка - это объект файловой системы, который указывает на другой объект файловой системы (например, файл / каталог).

  • MKLINKможет быть использован для создания символических ссылок. Использование /Dпараметра создает каталог символической ссылки. MKLINK не проверяет, является ли цель файлом или каталогом, или даже если цель существует! Это означает, что вы можете потенциально создавать недопустимые ссылки, такие как символическая ссылка каталога на файл или символическая ссылка на несуществующий файл / каталог.

  • Символические ссылки могут быть как абсолютными, так и относительными. Абсолютные ссылки - это ссылки, которые определяют каждую часть имени пути, в то время как относительные ссылки определяются относительно того, где спецификаторы относительных ссылок находятся в указанном пути.

  • Абсолютные символические ссылки могут указывать на файлы / каталоги на том же или другом томе, а также на удаленный файл или каталог с использованием пути UNC. Однако относительные символические ссылки ограничены одним томом.

  • Для создания символической ссылки требуются повышенные привилегии, хотя после создания повышенных привилегий не требуется удалять ссылку.

Жесткие ссылки : Жесткая ссылка - это представление файловой системы файла, по которому более одного пути ссылается на один файл.

  • MKLINKпозволяет создавать жесткие ссылки (используя /Hпараметр) только для файлов (не каталогов). Жесткая ссылка может быть создана только из файла в том же объеме.

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

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

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

Соединения . Соединение (также называемое мягкой ссылкой) отличается от жесткого соединения тем, что объекты хранения, на которые оно ссылается, являются отдельными каталогами, а соединение может связывать каталоги, расположенные на разных локальных томах на одном компьютере. В противном случае соединения работают идентично жестким ссылкам. Соединения реализуются через точки повторной обработки.

  • MKLINKпозволяет создать соединение (используя /Jпараметр) каталога (и даже файлов, хотя это, вероятно, следует рассматривать как недействительную ссылку).

  • Соединение можно рассматривать как эквивалент жесткой ссылки для символической ссылки на каталог. Соединительная ссылка не может быть создана для удаленного каталога, но может быть создана для каталога на том же / другом томе.


Рекомендации:

[1] Жесткие ссылки и переходы: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365006%28v=vs.85%29.aspx

[2] Создание символических ссылок: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363878%28v=vs.85%29.aspx

[3] "соединение каталогов" против "символьная ссылка каталога"?

мычание
источник
9

Жесткая ссылка - это просто другое имя файла. Если у вас есть файл с именем A.txt и у вас есть ссылка L.txt, после удаления A.txt вы все равно будете иметь доступ к его данным через L.txt. Только когда оба удалены, файл исчез.

С другой стороны, у вас есть так называемая мягкая ссылка (соединение, если это папка или символическая ссылка, если это файл). В том случае, когда вы удаляете A.txt, файл действительно исчез. Удаление L.txt никак не влияет на файл.

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

PS Файл и папка в основном взаимозаменяемы, насколько NTFS идет.

Иосип Медведь
источник
3
Извините, переходы и программные ссылки не одно и то же для NTFS. :(
Vilx-
2
msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx Цитата: "Соединение (также называемое мягкой ссылкой)"
Иосип Медведь
3
Тем не менее, есть еще различие между переходом (он же soft-link) и символической ссылкой, но я не стал вдаваться в подробности. Для тех, кто заинтересован, подробности можно найти в документации Windows по адресу msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx и msdn.microsoft.com/en-us/library/aa363878%28VS. 85% 29.aspx .
Иосип Медведь
1
Начиная с Windows Vista, существуют как NTFS-соединения (можно указывать только на каталоги), так и символические ссылки в стиле Unix (могут указывать буквально на что угодно).
Гравитация
0

Жесткая ссылка: работает только для того же объема.
Соединение: любой локальный том
Символическое: локальный том или UNC-путь

| Link Type     | Same Volume | Different Volume | UNC Path |
|---------------|-------------|------------------|----------|
| Hard link     | Yes         | No               | No       |
| Junction      | Yes         | Yes              | No       |
| Symbolic link | Yes         | Yes              | Yes      |

Бонус Болтовня

Windows создает соединения и символические ссылки для целей AppCompat; для тех плохо написанных приложений, которые думают:

  • C: \ Users \ All Users
  • C: \ Users \ Пользователь по умолчанию

действительны.

C:\Users>dir /as

 Directory of C:\Users

04/11/2018  07:45 PM    <SYMLINKD>     All Users [C:\ProgramData]
04/11/2018  07:45 PM    <JUNCTION>     Default User [C:\Users\Default]

То же самое верно для папки профиля пользователя, для приложений, которые ожидают, что папки эры Windows XP все еще существуют сегодня:

| Folder           | Type       | Target                                                           |
|------------------|------------|------------------------------------------------------------------|    | Application Data | <JUNCTION> | C:\Users\Ian\AppData\Roaming                                     |
| Cookies          | <JUNCTION> | C:\Users\Ian\AppData\Local\Microsoft\Windows\INetCookies         |
| Local Settings   | <JUNCTION> | C:\Users\Ian\AppData\Local                                       |
| My Documents     | <JUNCTION> | C:\Users\Ian\Documents                                           |
| NetHood          | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
| PrintHood        | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
| Recent           | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Recent            |
| SendTo           | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\SendTo            |
| Start Menu       | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Start Menu        |
| Templates        | <JUNCTION> | C:\Users\Ian\AppData\Roaming\Microsoft\Windows\Templates         |
Ян Бойд
источник
2
и он становится еще более безумным при установке неанглоязычных окон, поскольку вы получаете ДАЖЕ БОЛЬШЕ символических ссылок / переходов, поскольку некоторые могут знать, а могут и не знать, что Windows до XP на самом деле имела локальные имена, что легко может испортить сценарии или учебные пособия, созданные для других языков. Vista убила это и вместо этого использует локализованные имена DISPLAY, поэтому фактические пути одинаковы для всех языков, но из-за этого в локализованных окнах ссылок больше, чем в английских
My1
-1

Чтобы ответить программно:

Жесткая ссылка: shared_ptr <>. Всегда существует.

Мягкая ссылка: weak_ptr <>. Действует только при наличии другой жесткой ссылки.

Майкл Чурдакис
источник
Это легко. :) Вопрос был о жестких ссылках против переходов. ;)
Vilx-