Was ist der Unterschied zwischen NTFS-Verbindungspunkten und symbolischen Links?


138

Auf hoher Ebene besteht der einzige offensichtliche Unterschied zwischen NTFS-Junction-Punkten und symbolischen Links darin, dass Junctions nur Verzeichnisse sein können, während SymLinks auch auf Dateien abzielen dürfen.

Welche anderen Unterschiede bestehen zwischen den beiden?

(Beachten Sie, dass ich diese Frage bereits gesehen habe und was ich suche, ist etwas anders - diese Frage sucht nach einer Pro und Contra-Liste, ich suche nach einer Reihe technischer Unterschiede)

Antworten:


85

Symbolische Links bieten mehr Funktionen, während Junctions aufgrund ihrer Einschränkungen fast ein Legacy-Feature zu sein scheinen. Die Auswirkungen dieser Einschränkungen auf die Sicherheit sind jedoch speziell der Grund, warum eine Junction gegenüber einem symbolischen Link bevorzugt werden könnte. Remote Targeting macht symbolische Links funktionaler, erhöht aber auch das Sicherheitsprofil, während Junctions sicherer sind, da sie auf lokale Pfade beschränkt sind . Wenn Sie also eine lokale Verbindung wünschen und mit einem absoluten Pfad leben können, sind Sie mit einer Kreuzung wahrscheinlich besser dran. Andernfalls betrachten Sie einen symbolischen Link für seine zusätzlichen Fähigkeiten.

Geben Sie hier die Bildbeschreibung ein

** Die Aussage über den Unterschied in Geschwindigkeit / Komplexität stammt aus einer nicht überprüften Aussage im Wikipedia-Eintrag zu NTFS-Analysepunkten (eine gute Lektüre). *


Andere NTFS-Link-Vergleiche

Hier sind einige andere Vergleiche zu diesem Thema, die jedoch bei der Betrachtung von Kreuzungen irreführend sein können, da sie die oben aufgeführten Vorteile nicht auflisten.

Von hier genommen (eine gute Einführung)

Geben Sie hier die Bildbeschreibung ein

Von der SS64-Seite auf MKLink

Geben Sie hier die Bildbeschreibung ein


Kommentare zur Terminologie

Kreuzungen sind Wiederholungspunkte (können als symbolische Links bezeichnet werden)

NTFS-Junctions und symbolische NTFS-Links machen tatsächlich dasselbe auf dieselbe Weise (Analysepunkte), abgesehen von den oben genannten Unterschieden in der Art und Weise, wie sie verarbeitet werden. Tatsächlich ist eine Junction technisch gesehen eine "symbolische Verbindung" im allgemeineren Sinne des Wortes, und manchmal kann die Dokumentation eine Junction als symbolische Verbindung bezeichnen, wie dies hier der Fall ist . In solchen Fällen bedeutet "symbolische Verbindung" nicht die symbolische NTFS-Verbindung, die sich von einer Kreuzung unterscheidet (siehe unten).

NTFS

Obwohl das OP dies spezifiziert, sollte darauf hingewiesen werden, dass "symbolische Verknüpfung" ein sehr allgemeiner Begriff ist, der nicht spezifisch für NTFS ist. Um genau zu sein, handelt dieser Vergleich von NTFS Junctions vs. NTFS Symbolic Links.


Kreuzungspunkte und symbolische Links sind beide Wiederholungspunkte, aber Kreuzungspunkte sind definitiv keine symbolischen Links! Oh und die Tabelle ist auch in einer Hinsicht falsch. Das Ziel eines Knotenpunkts muss bei der Erstellung vorhanden sein, kann aber später tatsächlich entfernt werden.
0xC0000022L

3
@ 0xC0000022L Ja, Sie haben Recht, wenn Sie sagen, dass eine NTFS-Junction keine symbolische NTFS-Verbindung ist. Ich kann sehen, wie mein Wortlaut missverstanden werden könnte, um dies zu sagen. Ich werde zur Verdeutlichung bearbeiten, aber der Punkt ist, dass sich "symbolische Verknüpfung" in diesem Zusammenhang auf symbolische NTFS-Verknüpfungen bezieht, die spezifische Implementierungen der allgemeineren Idee der "symbolischen Verknüpfung" sind, zu der auch Junctions gehören. Bist du dem Link gefolgt, den ich gepostet habe? Es heißt nicht, dass eine NTFS-Junction eine symbolische NTFS-Verbindung ist, aber der Begriff "symbolische Verbindung" kann verwendet werden, um eine Junction zu beschreiben.
U8it

Fair genug, wenn man sich auf das Konzept bezieht, kann es eine Möglichkeit sein, darüber nachzudenken. Aber ich denke wirklich, dass der Begriff Analysepunkt das Konzept nach Hause bringt, weil er viel mehr erklärt, was im NT-Objektmanager vor sich geht, und dass dieses Konzept weit über die symbolischen Links hinausgeht, die beispielsweise unter Unix verwendet wurden (wo es sich um normale Dateien handelt) mit einer speziellen Flagge). Und ja, ich habe Verbindungspunkte gehört, die als "Symlinks für Verzeichnisse" erklärt wurden.
0xC0000022L

@ 0xC0000022L Außerdem sehe ich das von Ihnen erwähnte Problem mit der falschen Tabelle nicht. Beziehen Sie sich auf das Merkmal "Kann auf ein nicht vorhandenes Ziel verweisen"? Und sagen Sie, dass dies zumindest beim ersten Erstellen einer Kreuzung falsch ist? Wenn Sie sicher sind, dass dies in einer bestimmten Umgebung der Fall ist (möglicherweise für Windows XP oder aufgrund von Sicherheitseinstellungen), werde ich dies zur Kenntnis nehmen, aber meiner Erfahrung nach und aus der Dokumentation (und ich habe gerade unter Windows 10 bestätigt) kann eine Junction Zielen Sie immer auf einen nicht vorhandenen Pfad ab, auch bei der Erstellung. Möglicherweise gibt es Sicherheitseinstellungen, die dies einschränken.
U8it

Kreuzungen sind kein Vermächtnis. Sie implementieren Mountpunkte (Bind / Volume), keine Symlinks. Wenn ein Pfad in einer offenen Position analysiert wird, merkt sich das System durchquerte Übergänge, um relative Symlinks zu bewerten, die Einhängepunkte durchlaufen. Diese Durchquerungen müssen eine Junction so behandeln, als wäre sie ein reguläres Verzeichnis, während ein Symlink als Zielpfad analysiert wird. Sagen Sie beispielsweise "C: \ junction" und "C: \ symlink", beide zielen auf "E: \ spam" ab, und der relative Symlink "E: \ spam \ eggs.txt" zielt auf ".. \ eggs.txt". Dann wird "C: \ junction \ eier.txt" in "C: \ eier.txt" und "C: \ symlink \ eier.txt" in "E: \ eier.txt" aufgelöst.
Eryk Sun

35

Die Orte, die ich für die Unterschiede am nützlichsten finde:

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

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

Postulat: Symlink steht unter Windows auf Junction, Symlink unter Unix auf Hardlink.

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

Windows 7 und Windows Vista unterstützen symbolische Links für Dateien und Verzeichnisse mit dem Befehlszeilenprogramm mklink. Im Gegensatz zu Verbindungspunkten kann eine symbolische Verknüpfung auch auf eine Datei oder einen SMB-Netzwerkpfad (Remote Server Message Block) verweisen. Darüber hinaus bietet die Implementierung symbolischer NTFS-Links vollständige Unterstützung für dateisystemübergreifende Links. Die Funktionalität, die hostübergreifende symbolische Links ermöglicht, erfordert jedoch, dass das Remote-System sie auch unterstützt, was ihre Unterstützung effektiv auf Windows Vista und spätere Windows-Betriebssysteme beschränkt.

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

Eine symbolische Verknüpfung, wie sie von Windows erstellt wurde, ähnelt einer Verzeichnisverbindung, kann jedoch im Gegensatz zu einer Verzeichnisverbindung auf eine Datei oder eine Remote-Netzwerkdatei oder ein Verzeichnis verweisen. Das Ziel kann als ein Pfad relativ zur symbolischen Verbindungsposition oder als ein absoluter Pfad in dem aktuellen oder einem anderen Volumen definiert werden. Beachten Sie auch, dass sich symbolische Links zu Dateien von symbolischen Links zu Verzeichnissen unterscheiden und das Ziel mit der Definition übereinstimmen muss.


1
Für Windows 7 spezifische Informationen: msdn.microsoft.com/en-us/library/windows/desktop/…
Joshua Drake

14
Die akzeptierte Antwort ist bereits drei Jahre alt, aber ich möchte darauf hinweisen, dass NFTS-Verbindungspunkte nicht mit Hardlinks in Unix vergleichbar sind, wie im zitierten Postulat impliziert. Dies sollte offensichtlich sein, da ein Knotenpunkt nicht auf eine Datei verweisen kann, sondern auf einen Hardlink. NTFS unterstützt auch Hardlinks (die sich von Junctions unterscheiden), und diese sind mehr oder weniger mit Unix-Hardlinks vergleichbar.

@elgonzo Stimme voll und ganz zu. AFAIK Ein Unix-Hardlink kann nur auf eine Datei verweisen, sodass er überhaupt nicht wie eine NTFS-Verzeichnisverbindung aussieht.
Franklin Yu

20

Funktionell gibt es in einmal erstellten Fenstern keinen wirklichen Unterschied. Es gibt jedoch erhebliche Unterschiede zwischen ihnen, was sie tun können. Junctions können nur zum Erstellen von Links zu Ordnern verwendet werden, entweder auf demselben Laufwerk oder auf verschiedenen Laufwerken, aber nur, wenn sich diese Laufwerke auf dem lokalen System befinden (Sie können keinen Junction-Link zu einem Ordner über ein Netzwerk erstellen.) Symbolische Links haben jedoch nicht die gleichen Einschränkungen. Symbolische Links können verwendet werden, um Links zu Dateien oder Ordnern zu erstellen. Diese Dateien oder Ordner können sich entweder auf demselben System (dasselbe Laufwerk oder auf verschiedenen Laufwerken) oder auf einer Netzwerkfreigabe befinden und relative Standortsymbole verwenden ("\\ system2") \ foldera \ file.txt "," d: \ foldera \ file.txt "," \\ system2 \ foldera "," d: \ foldera "oder" d: \ foldera \ folderb .. "

Um es zusammenzufassen: Junctions-Punkte sind nur auf Ordner auf dem lokalen System beschränkt, während symbolische Links Links zu Ordnern oder Dateien erstellen können, auf die über einen UNC-Pfad oder auf dem lokalen System zugegriffen werden kann, wobei die Bezeichnung dieser Speicherorte vielseitiger ist. Symbolische Links sind im Grunde genommen ein vielseitigerer Ersatz für Verbindungspunkte und harte Links. Außerdem sind symbolische Links mit Unix und Linux kompatibel, wenn ein plattformübergreifender UNC-Pfadlink erstellt wird.

Hoffentlich beantwortet dies Ihre Frage zufriedenstellend. Bearbeitet, um Tippfehler zu korrigieren.


10

Die Link Shell-Erweiterung http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html ist ein großartiges Tool zum Erstellen und Anzeigen vieler Arten von Links. Es hat auch eine ausgezeichnete Dokumentation.

[Bei einer vollständigen Installation wird eine neue Registerkarte "Eigenschaften" hinzugefügt, wenn Sie einen erweiterten Link anzeigen. Außerdem werden Symbol-Overlay-Pfeile für die verschiedenen Link-Typen hinzugefügt. Scrollen Sie zum FAQ-Bereich, wenn diese nicht angezeigt werden. Windows unterstützt nur dreizehn Overlays. Er zeigt eine Registrierungsumgehung. Ein Beispiel für seine Informationsnutzen: Es wurde erfolglos versucht, Berechtigungen für einen Ordner zu erhalten, von dem Sie dachten, er sei ein vom System bereitgestellter Junction Link, der häufig aus Kompatibilitätsgründen mit älteren Windows-Editionen verwendet wird.]

Junctions und symbolische Links verhalten sich im Wesentlichen identisch, wenn sie für ein Verzeichnis auf einem lokalen System erstellt werden.

Jedoch:

Sie verhalten sich in einem Netzwerk unterschiedlich. Dieser Link beschreibt dieses Verhalten: /superuser/343074/directory-junction-vs-directory-symbolic-link

Wenn Sie sich Junction Links als "Verknüpfungen vorstellen, die das Betriebssystem hinsichtlich des Standorts täuschen", haben Sie ein gutes praktisches Gleichnis über ihre Verwendung und darüber, was sie zerstört. Der Hauptunterschied besteht darin, dass beim Kopieren von symbolischen Links oder Junctions das Ziel kopiert wird und nicht (wie Verknüpfungen) lediglich die Datei, die den Zeiger enthält. Wie bei Verknüpfungen können Sie symbolische Links oder Junction-Links löschen, ohne die Zieldateien / -ordner zu entfernen. [Hard Links, die Datei wird nur gelöscht, wenn der letzte Link entfernt wird - auch aus dem Papierkorb. Sehen Sie sich das Eigenschaften-Tag in LSE für einen dieser Links an, um das Ziel oder die Referenzanzahl für Hard Links zu sehen.]

Harte Links oder Verknüpfungen sind die einzigen Link-Typen, die ohne Nebenwirkungen wie das Brechen oder Kopieren des gesamten Ziels verschoben werden können. Durch das Verschieben des Ziels werden die Verknüpfungen immer unterbrochen, obwohl sie auf der Registerkarte "Eigenschaften" (angezeigt mit LSE) problemlos aktualisiert oder, wenn kompliziert, mit LSE neu erstellt werden können.

Für die Erstellung symbolischer Links sind Administratorrechte erforderlich, für Junctions jedoch nicht. Dies und die umfassende Verwendung von Junctions im internen Betriebssystem lassen darauf schließen, dass Windows diese auf intuitive, erwartete Weise handhabt. [Seien Sie etwas vorsichtig bei unerwarteten Nebenwirkungen von Systemordnern (aus Erfahrung mit Win 10).]

[Einige der Backup-spezifischen Funktionen der Link Shell-Erweiterung sind äußerst nützlich. Kurz gesagt, es können verschiedene Arten von aktualisierbaren symbolischen Linkstrukturen in Standardordnern für ausstehende Backup-Zwecke erstellt werden.]


Und Link Shell Extension sieht aus wie ein großartiges Tool. Es gibt auch ein verwandtes leichtes Dienstprogramm namens ln.exe ... selbst wenn Sie es nicht verwenden, werden Sie viel lernen, wenn Sie nur die einfache Bedienungsanleitung der Website lesen.
U8it

Ich denke, Ihre Ausgabe vom 2. April 2016 hat die Dinge weniger klar gemacht, Clay. Ich denke, Sie haben so etwas gemeint: "Der Hauptunterschied zwischen diesen und 'Verknüpfungs'-Dateien besteht darin, dass wenn Sie ... das Ziel kopieren und nicht nur die Datei, die den Zeiger enthält (was passiert, wenn Sie eine Verknüpfung kopieren) Datei) "
Jon Coombs

4

In Windows wurden kürzlich symbolische Links eingeführt: ab Vista.

Symbolische Links sollten nicht als Alternative zur vorhandenen NTFS-Technologie "Reparse Point" angesehen werden.

Microsoft erklärt, dass der einzige Zweck symbolischer Links darin besteht, besser mit Unix kompatibel zu sein.

MSDN: " Symbolische Links wurden entwickelt, um die Migration und Anwendungskompatibilität mit UNIX zu unterstützen. Microsoft hat seine symbolischen Links so implementiert, dass sie genau wie UNIX-Links funktionieren. "

Vista ist auch das erste Betriebssystem, das Links für seine eigenen Funktionen verwendet. Um mit älteren Ordnernamen kompatibel zu sein, C:\Documents and Settingsist jetzt ein Link zu C:\Users.

Interessanterweise ist dieser Documents and SettingsTrick , obwohl Vista symbolische Links einführt, eigentlich eine einfache alte Kreuzung.


2
Diese Antwort sagt nichts über die Unterschiede zwischen symbolischen Links und Kreuzungen aus. (Als solches denke ich nicht, dass es wirklich auf diese Frage zutrifft)
Billy ONeal

Ab Windows Vista ersetzt der symbolische Link Junctions (auch, wie wir wissen, sind beide Analysepunkte)
Aravind

2

Neben der hervorragenden Antwort von u8it:

Wenn jemand an den unterschiedlichen Verhaltensweisen im Windows-Datei-Explorer in Windows 10 interessiert ist :

Drag & Drop in das Zielverzeichnis:

  • symbolic link: verschiebt das symbolic linkin das Zielverzeichnis
  • junction: verschiebt das original directoryin das Zielverzeichnis

rechter Mausklick + Eigenschaften:

  • symbolic link: zeigt Ihnen Verknüpfungseigenschaften
  • junction: zeigt Ihnen original directoryOrdnereigenschaften

Klicken Sie mit der linken Maustaste in den linken Bereich (Verzeichnisbaum):

  • symbolic link: wählt die aus original directory
  • junction: wählt die aus junction

Für die Erstellung symbolischer Links sind Administratorrechte erforderlich, für Junctions jedoch nicht.
Jinjinov

Windows 10 Version 10.0.17134.1130: Durch das Verschieben der Junction im Explorer wird nur der Inhalt des ursprünglichen Verzeichnisses verschoben. Wenn Sie mit der linken Maustaste auf den symbolischen Link im Baum klicken, wird das ursprüngliche Verzeichnis nicht ausgewählt.
SalgoMato
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.