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

41765
Vilx-

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

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

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

5 ответов на вопрос

39
moo

Quick Definitions:

Symbolic link: A link to a file or directory on the same or different volume (drive letter) or even to a remote file or directory (using UNC in its path).

Hard Link: A link to a file on the same volume (drive letter) only. Every file (file's data) has at least 1 hard link (file's name). Deleting all hard links effectively deletes the file.

Junction: A link to a directory on the same or different volume (drive letter) but not to a remote directory.


Details:

Assuming you are working with NTFS volumes in Windows Vista/7 you can make use of the command line tool MKLINK to create all three types of Links:

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. 

Symbolic links: A symbolic link is a file-system object that points to another file system object (eg: file/directory).

  • MKLINK can be used to create symbolic links. Using the /D parameter creates a directory symbolic link. MKLINK does not check if the target is a file or a directory or even if the target exists! This means you can potentially create invalid links like a directory symbolic link to a file or a symbolic link to a no-existing file/directory.

  • Symbolic links can either be absolute or relative links. Absolute links are links that specify each portion of the path name while relative links are determined relative to where relative-link specifiers are in a specified path.

  • Absolute symbolic links can point to files/directories on the same or different volume, as well as, to a remote file or directory using the UNC path. However, relative symbolic links are restricted to a single volume.

  • Elevated privileges are required to create a symbolic link though once created elevated privileges are not required to delete the link.

Hard links: A hard link is the file system representation of a file by which more than one path references a single file.

  • MKLINK permits creating hard links (using the /H parameter) only of files (not directories). A hard link can only be created of a file in the same volume.

  • A file with multiple hard links is only actually deleted when all hard links are deleted i.e. the link count reaches zero. So really every file you create has at least one hard link for it whether you use MKLINK or not.

  • Any changes to that file are instantly visible to applications that access it through the hard links that reference it. However, the directory entry size and attribute information is updated only for the link through which the change was made.

  • Note that the attributes on the file are reflected in every hard link to that file, and changes to that file's attributes propagate to all the hard links. For example if you un-set the read-only attribute on a hard link to delete that particular hard link, and there are multiple hard links to the actual file, then you will need to re-set the read-only attribute on the file from one of the remaining hard links to bring the file and all remaining hard links back to the read-only state.

Junctions: A junction (also called a soft link) differs from a hard link in that the storage objects it references are separate directories, and a junction can link directories located on different local volumes on the same computer. Otherwise, junctions operate identically to hard links. Junctions are implemented through reparse points.

  • MKLINK permits creating a junction (using the /J parameter) of a directory (and even of files though this should probably be deemed as an invalid link).

  • A junction could be thought of as the hard link equivalent for a symbolic link to a directory. A junction link cannot be created to a remote directory but can be created to a directory on same/different volume.


References:

[1] Hard Links and Junctions: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365006%28v=vs.85%29.aspx

[2] Creating Symbolic Links: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363878%28v=vs.85%29.aspx

[3] "directory junction" vs "directory symbolic link"?

31
Forethinker

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Жесткая ссылка: работает только для того же объема.
Соединение: любой локальный том
Символическое: локальный том или 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 | 
-1
Michael

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

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

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

Это легко. :) Вопрос был о жестких ссылках против переходов. ;) Vilx- 7 лет назад 0

Похожие вопросы