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

140

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

Какие еще различия между ними существуют?

(Обратите внимание, я уже видел этот вопрос, и то, что я ищу, немного отличается - этот вопрос ищет список «за» и «против», я ищу ряд технических отличий)

Билли ОНил
источник

Ответы:

88

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

введите описание изображения здесь

** Заявление о разнице в скорости / сложности исходит из непроверенного утверждения в записи Википедии о точках повторной обработки NTFS (хорошее чтение). *


Другие сравнения ссылок NTFS

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

Взято отсюда (хорошее вступительное чтение)

введите описание изображения здесь

Со страницы SS64 на MKLink

введите описание изображения здесь


Отзывы о терминологии

Соединения - это точки повторной обработки (могут быть описаны как символические ссылки)

Соединения NTFS и символические ссылки NTFS на самом деле делают одно и то же (точки повторной обработки), за исключением вышеупомянутых различий в том, как они обрабатываются. Фактически, технически, Junction - это «символическая ссылка» в более общем смысле этого слова, и иногда документация может называть Junction символической ссылкой, как в данном случае . В таких случаях «символическая ссылка» не означает символическую ссылку NTFS, которая отличается от соединения (см. Ниже).

NTFS

Несмотря на то, что OP указывает это, стоит отметить, что «символическая ссылка» является очень общим термином, который не является специфичным для NTFS. Таким образом, чтобы быть точным, это сравнение касается соединений NTFS и символических ссылок NTFS.

u8it
источник
Точки соединения и символические ссылки являются точками повторной обработки, но точки соединения, безусловно, не являются символическими! Да, и таблица неверна на один счет тоже. Цель точки соединения должна существовать при создании, но она действительно может быть удалена позже.
0xC0000022L
3
@ 0xC0000022L Да, вы правы, если говорите, что переход NTFS не является символической ссылкой NTFS. Я вижу, как моя формулировка может быть неправильно понята, чтобы сказать это. Я отредактирую, чтобы уточнить, но суть в том, что в этом контексте «символическая ссылка» относится к символическим ссылкам NTFS, которые являются конкретными реализациями более общей идеи «символической ссылки», к которой также относятся соединения. Вы переходили по ссылке, которую я разместил? Это не означает, что соединение NTFS является символической связью NTFS, но термин «символическая связь» может использоваться для описания соединения.
u8it
достаточно справедливо, когда ссылаюсь на концепцию, это может быть один из способов думать об этом. Но я действительно думаю, что термин точка повторной обработки возвращает концепцию домой, потому что она объясняет гораздо больше того, что происходит в диспетчере объектов NT, и что эта концепция выходит далеко за рамки того, что символические ссылки использовались, например, в Unix (где они являются обычными файлами). со специальным флагом). И да, я слышал, что точки соединения объясняются как «символические ссылки для каталогов».
0xC0000022L
@ 0xC0000022L Кроме того, я не вижу проблемы, о которой вы упоминаете, что таблица неверна. Вы имеете в виду характеристику «Может ли указывать на несуществующую цель»? И вы говорите, что это неправильно, по крайней мере, при первом создании соединения? Если вы уверены, что это имеет место в конкретной среде (возможно, для Windows XP или из-за настроек безопасности), я отмечу это, но по моему опыту и из документации (и я только что подтвердил в Windows 10), соединение может всегда нацеливайтесь на несуществующий путь, даже после создания ... могут быть параметры безопасности, которые ограничивают это.
u8it
Соединения не являются наследием. Они реализуют точки монтирования (bind / volume), а не символические ссылки. Когда путь анализируется в открытом состоянии, система запоминает пройденные соединения, чтобы оценить относительные символические ссылки, проходящие через точки монтирования. Эти обходы должны обрабатывать соединение, как если бы это был обычный каталог, тогда как символическая ссылка анализируется как его целевой путь. Например, допустим, что «C: \ junction» и «C: \ symlink» нацелены на «E: \ spam», а относительная символическая ссылка «E: \ spam \ eggs.txt» нацелена на «.. \ eggs.txt». Затем «C: \ junction \ eggs.txt» преобразуется в «C: \ eggs.txt», а «C: \ symlink \ eggs.txt» преобразуется в «E: \ eggs.txt».
Eryk Sun
35

Места, которые я считаю наиболее полезными для различий:

http://blogs.msdn.com/b/junfeng/archive/2006/04/15/576568.aspx

http://www.hanselman.com/blog/MoreOnVistaReparsePoints.aspx

Постулат: Symlink - это Junction в Windows, а Symlink - это Hardlink в Unix.

http://en.wikipedia.org/wiki/Symbolic_link#Windows_7_.26_Vista_symbolic_link

Windows 7 и Windows Vista поддерживают символические ссылки для файлов и каталогов с помощью утилиты командной строки mklink. В отличие от точек соединения, символическая ссылка также может указывать на файл или сетевой путь к блоку сообщений сервера (SMB). Кроме того, реализация символьных ссылок NTFS обеспечивает полную поддержку ссылок между файловыми системами. Тем не менее, функциональность, позволяющая использовать символьные ссылки между хостами, требует, чтобы удаленная система также поддерживала их, что фактически ограничивает их поддержку Windows Vista и более поздних операционных систем Windows.

http://www.tuxera.com/community/ntfs-3g-advanced/junction-points-and-symbolic-links/

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

Джеймс Мэннинг
источник
1
Для информации, специфичной для Windows 7: msdn.microsoft.com/en-us/library/windows/desktop/…
Джошуа Дрейк,
14
Принятый ответ уже три года, но я хотел бы отметить, что точки соединения NFTS не сравниваются с жесткими ссылками в Unix, как подразумевается в цитируемом постулате. Это должно быть очевидно, поскольку точка соединения не может ссылаться на файл, а жесткая ссылка может. NTFS также поддерживает жесткие ссылки (которые отличаются от переходов), и они более или менее сопоставимы с жесткими ссылками Unix.
@elgonzo Полностью согласен. AFAIK Жесткая ссылка Unix может относиться только к файлу, поэтому она совсем не выглядит как соединение каталогов NTFS.
Франклин Ю
20

Функционально, в окнах, когда-то созданных, нет никакой разницы. Однако между ними существуют значительные различия в том, что они могут сделать. Соединения могут использоваться только для создания ссылок на папки, либо на одном диске, либо на разных дисках, но только в том случае, если эти диски находятся в локальной системе (вы не можете создать переходную ссылку на папку по сети.) Символические ссылки однако не имеют таких же ограничений. Символьные ссылки могут использоваться для ссылки либо на файлы или папки, и эти файлы или папки могут быть расположены либо на одной и той же системе (один и тот же диск или разные диски), либо на общем сетевом ресурсе и могут использовать символику относительного местоположения ("\\ system2 \ foldera \ file.txt "," d: \ foldera \ file.txt "," \\ system2 \ foldera "," d: \ foldera "или" d: \ foldera \ folderb .. "

Подводя итог, можно сказать: точки соединения ограничены только папками в локальной системе, в то время как символические ссылки могут создавать ссылки на папки или файлы, доступные по пути UNC или в локальной системе, с большей гибкостью в назначении этих мест. Символические ссылки в основном являются более универсальной заменой как точек соединения, так и жестких ссылок. Кроме того, символические ссылки совместимы с Unix и Linux при создании кроссплатформенного UNC-патчированного канала.

Надеюсь, это удовлетворительно ответит на ваш вопрос. Отредактировано для исправления опечаток.

Техно Волшебник
источник
10

Расширение оболочки ссылок, http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html , является отличным инструментом для создания и просмотра многих видов ссылок. Он также имеет отличную документацию.

[При полной установке добавляется новая вкладка свойств, если вы смотрите расширенную ссылку. Кроме того, добавлены стрелки для наложения значков для различных типов ссылок - перейдите к разделу часто задаваемых вопросов, если они не отображаются; Windows поддерживает только тринадцать оверлеев; он показывает обход реестра. Пример его полезной информации: безуспешная попытка получить привилегии для того, что вы считаете папкой, но на самом деле это была предоставленная системой Junction Link, часто используемая в целях совместимости со старыми выпусками Windows.]

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

Тем не мение:

Они действуют по-разному в сети. Эта ссылка описывает это поведение: /superuser/343074/directory-junction-vs-directory-symbolic-link

Если вы рассматриваете Junction Links как «ярлыки, которые обманывают ОС в отношении местоположения», у вас будет хорошее практическое сравнение их использования и того, что их нарушает. Основное отличие состоит в том, что если вы копируете символические ссылки или соединения, он копирует цель, а не (как ярлыки), просто файл, содержащий указатель. Как и в случае с ярлыками, вы можете удалить символические или соединительные ссылки, не удаляя целевые файлы / папки. [Жесткие ссылки, файл удаляется только при удалении последней ссылки - в том числе и из корзины. Посмотрите на тег свойств в LSE для любой из этих ссылок, чтобы увидеть цель или количество ссылок для жестких ссылок.]

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

Создание символических ссылок требует привилегий администратора, в то время как переходы - нет. Это плюс обширное внутреннее использование ОС Junctions предполагает, что Windows обрабатывает их интуитивно, ожидаемым образом. [Будьте осторожны с неожиданными побочными эффектами от системных папок (из опыта работы с Win 10).]

[Некоторые функции резервного копирования Link Shell Extension чрезвычайно полезны - короче говоря, он может создавать несколько типов обновляемых символьных структур ссылок в стандартных папках для целей резервного копирования.]

глина
источник
А Link Shell Extension выглядит как отличный инструмент. Также есть утилита ln.exe, относящаяся к легкому весу ... даже если вы ее не используете, вы многому научитесь, просто прочитав простое руководство пользователя сайта.
u8it
Я думаю, твое редактирование от 2 апреля 2016 года сделало вещи менее ясными, Клэй. Я думаю, что вы имели в виду что-то вроде этого: «Основное различие между этими и« горячими »файлами заключается в том, что если вы ... он копирует цель, а не просто файл, содержащий указатель (что происходит, если вы копируете ярлык файл) "
Джон Кумбс
4

Символические ссылки были введены совсем недавно в Windows: начиная с Vista.

Символические ссылки не должны рассматриваться как альтернатива существующей технологии NTFS «Reparse Point».

Microsoft объясняет, что единственная цель символических ссылок - быть более совместимыми с Unix.

MSDN: « Символьные ссылки были разработаны, чтобы помочь в миграции и совместимости приложений с UNIX. Microsoft реализовала свои символические ссылки, чтобы функционировать так же, как ссылки UNIX ».

Vista также является первой ОС, использующей ссылки для собственного функционирования. Для совместимости с устаревшими именами папок C:\Documents and Settingsтеперь есть ссылка на C:\Users.

Интересно, что хотя Vista вводит символические ссылки, этот " Documents and Settings" трюк на самом деле является простым старым соединением.

Филипп
источник
2
Этот ответ ничего не говорит о различиях между символическими ссылками и соединениями. (Как таковой, я не думаю, что это действительно относится к этому вопросу вообще)
Билли ONeal
Начиная с Windows Vista символическая ссылка заменяет соединения (также, как мы знаем, оба являются точками повторной обработки)
Аравинд
2

В дополнение к отличному ответу от u8it:

Если кого-то интересует разница в поведении в Windows File Explorer в Windows 10:

перетащите в целевой каталог:

  • symbolic link: перемещает symbolic linkв целевой каталог
  • junction: перемещает original directoryв целевой каталог

щелчок правой кнопкой мыши + свойства:

  • symbolic link: показывает свойства ярлыка
  • junction: показывает original directoryсвойства папки

щелкните левой кнопкой мыши на левой панели (дерево каталогов):

  • symbolic link: выбирает original directory
  • junction: выбирает junction
Jinjinov
источник
Создание символических ссылок требует привилегий администратора, в то время как переходы - нет.
Джинджинов
Windows 10 версии 10.0.17134.1130: перемещение пересечения в проводнике перемещает только содержимое исходного каталога. Если щелкнуть левой кнопкой мыши по символической ссылке в дереве, исходный каталог не будет выбран.
SalgoMato