Was ist der Unterschied zwischen festen NTFS-Links und Verzeichnisverbindungen?

41982
Vilx-

Der Titel sagt alles ... was ist der Unterschied? Wann verwende ich eine und wann verwende ich die andere?

Hinzugefügt: Beachten Sie, dass Knotenpunkte, feste Links und symbolische (weiche) Links drei verschiedene Dinge in NTFS sind.

70
Laut der Microsoft-Dokumentation gibt es drei verschiedene Kategorien: Hardlink: http://msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx; Junction (Softlink): http://msdn.microsoft.com/de-de/library/aa365006%28VS.85%29.aspx; Symbolischer Link: http://msdn.microsoft.com/de-de/library/aa363878%28VS.85%29.aspx. Josip Medved vor 15 Jahren 2

5 Antworten auf die Frage

39
moo

Schnelle Definitionen:

Symbolischer Link: Ein Link zu einer Datei oder einem Verzeichnis auf demselben oder einem anderen Volume (Laufwerksbuchstabe) oder sogar zu einer Remote-Datei oder einem Remote-Verzeichnis (unter Verwendung von UNC im Pfad).

Hard Link: Nur ein Link zu einer Datei auf demselben Volume (Laufwerksbuchstabe). Jede Datei (Dateidaten) hat mindestens 1 Hardlink (Dateiname). Durch das Löschen aller festen Links wird die Datei effektiv gelöscht.

Junction: Eine Verknüpfung zu einem Verzeichnis auf demselben oder einem anderen Volume (Laufwerksbuchstabe), jedoch nicht zu einem Remote-Verzeichnis.


Einzelheiten:

Angenommen, Sie arbeiten mit NTFS-Volumes in Windows Vista / 7, können Sie das Befehlszeilentool verwenden MKLINK , um alle drei Arten von Links zu erstellen:

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. 

Symbolische Links : Ein symbolischer Link ist ein Dateisystemobjekt, das auf ein anderes Dateisystemobjekt (z. B. Datei / Verzeichnis) verweist.

  • MKLINKkann verwendet werden, um symbolische Links zu erstellen. Mit dem /DParameter wird eine symbolische Verzeichnisverknüpfung erstellt. MKLINK prüft nicht, ob das Ziel eine Datei oder ein Verzeichnis ist oder ob das Ziel existiert! Dies bedeutet, dass Sie möglicherweise ungültige Verknüpfungen erstellen können, z. B. eine symbolische Verzeichnisverknüpfung mit einer Datei oder eine symbolische Verknüpfung mit einer nicht vorhandenen Datei / einem nicht vorhandenen Verzeichnis.

  • Symbolische Links können entweder absolute oder relative Links sein. Absolute Links sind Links, die jeden Teil des Pfadnamens angeben, während relative Links relativ zu dem Ort bestimmt werden, an dem sich relative Bezeichner in einem angegebenen Pfad befinden.

  • Absolute symbolische Links können auf Dateien / Verzeichnisse auf demselben oder einem anderen Volume sowie auf eine Remote-Datei oder ein Remote-Verzeichnis mit dem UNC-Pfad verweisen. Relative symbolische Links sind jedoch auf ein einzelnes Volume beschränkt.

  • Zum Erstellen eines symbolischen Links sind erhöhte Berechtigungen erforderlich. Einmal erstellte erhöhte Berechtigungen sind jedoch nicht erforderlich, um den Link zu löschen.

Hardlinks : Ein Hardlink ist die Dateisystemdarstellung einer Datei, durch die mehrere Pfade auf eine einzelne Datei verweisen.

  • MKLINKerlaubt das Erstellen von harten Links (mit dem /HParameter) nur von Dateien (nicht von Verzeichnissen). Ein Hardlink kann nur von einer Datei auf demselben Volume erstellt werden.

  • Eine Datei mit mehreren Hardlinks wird nur dann wirklich gelöscht, wenn alle Hardlinks gelöscht werden, dh die Anzahl der Links erreicht null. Daher hat wirklich jede Datei, die Sie erstellen, mindestens einen festen Link, egal ob Sie sie verwenden MKLINKoder nicht.

  • Alle Änderungen an dieser Datei sind sofort für Anwendungen sichtbar, die über die festen Links, auf die sie verweist, darauf zugreifen. Die Informationen zu Größe und Attribut des Verzeichniseintrags werden jedoch nur für die Verknüpfung aktualisiert, über die die Änderung vorgenommen wurde.

  • Beachten Sie, dass sich die Attribute der Datei in jeder festen Verknüpfung zu dieser Datei widerspiegeln und Änderungen an den Attributen dieser Datei auf alle festen Verknüpfungen übertragen werden. Wenn Sie beispielsweise das Schreibschutzattribut für einen Hardlink aufheben, um diesen bestimmten Hardlink zu löschen, und es mehrere Hardlinks zu der eigentlichen Datei gibt, müssen Sie das Schreibschutzattribut für die Datei neu setzen von einer der verbleibenden Hardlinks, um die Datei und alle übrigen Hardlinks wieder in den schreibgeschützten Zustand zu bringen.

Junctions : Eine Junction (auch Softlink genannt) unterscheidet sich von einer Hardlink-Verknüpfung darin, dass die von ihr referenzierten Speicherobjekte separate Verzeichnisse sind und eine Junction Verzeichnisse verknüpfen kann, die sich auf verschiedenen lokalen Volumes auf demselben Computer befinden. Ansonsten funktionieren Junctions identisch zu harten Links. Verknüpfungen werden durch Reparaturpunkte implementiert.

  • MKLINKerlaubt das Erstellen einer Junction (unter Verwendung des /JParameters) eines Verzeichnisses (und sogar von Dateien, obwohl dies wahrscheinlich als ungültiger Link betrachtet werden sollte).

  • Eine Junction kann als festes Link-Äquivalent für eine symbolische Verknüpfung zu einem Verzeichnis betrachtet werden. Ein Junction-Link kann nicht für ein Remote-Verzeichnis erstellt werden, er kann jedoch für ein Verzeichnis auf demselben / einem anderen Volume erstellt werden.


Verweise:

[1] Hardlinks und Verknüpfungen: https://msdn.microsoft.com/de-de/library/windows/desktop/aa365006%28v=vs.85%29.aspx

[2] Erstellen symbolischer Links: https://msdn.microsoft.com/de-de/library/windows/desktop/aa363878%28v=vs.85%29.aspx

[3] "Verzeichnisknoten" vs. "Verzeichnissymbolischer Link"?

31
Forethinker

NTFS-Datendateien werden mit all ihren Attributen als "Inode" mit einer ID gespeichert, und Dateinamen verweisen auf den Inode. Alle Dateien haben einen Hardlink. Einige Tools können zusätzliche Namen (Hardlinks) erstellen, die auf denselben Inode zeigen, der einen Zähler für die Anzahl der Namen hat, auf die er verweist. Wenn die Zahl auf Null geht, löscht das Betriebssystem die Datei, den Inode.

Spezielle Tools wie LN können zusätzliche Dateinamen erstellen, die auf vorhandene Inodes verweisen, wobei ein Dateiname verwendet wird, der auf sie verweist. Beachten Sie, dass alle Dateiattribute, einschließlich Datum und Uhrzeit, mit dem Inode und nicht mit dem Dateinamen gespeichert werden.

(Extra-) Hardlinks sind nützlich, wenn Sie möchten, dass verschiedene Namen auf dieselben Daten verweisen, lesen oder schreiben. Sie sparen Platz und Aufwand. Sie blockieren jedoch Programme, die unterschiedliche Namen annehmen, auf unterschiedliche Daten. Wenn Sie beispielsweise Referenzen auf doppelte Dateien durch Hardlinks zu einer einzelnen Datei ersetzen, haben Sie alle vorhandenen Sicherungen entfernt! Das Windows-Betriebssystem ist ein Programm, bei dem unterschiedliche Namen auf unterschiedliche Sätze von Bits verweisen.

Hardlinks müssen sich auf demselben physischen und logischen Datenträger befinden.

Sie sind nützlich für:

  • Verringerung der Pfadlänge, da Windows nur 256 Zeichen unterstützt.

  • Reduzieren des Speicherplatzes von doppelten Datendateien - Sie können beispielsweise mehrere Sicherungen einer Partition mit mehreren vollständigen Verzeichnisbäumen erstellen, jedoch mit Hardlinks für Dateien, die sich seit der letzten Sicherung nicht geändert haben.

Knotenpunkte sind unordentlich und verwenden Reparse-Punkte (die ich nicht verstehe). Sie können auf unterschiedliche physische oder logische Volumes verweisen, müssen sich jedoch auf demselben Computer befinden. Sie können anscheinend als Symlinks für Verzeichnisse verwendet werden, wobei ein zweiter Name für dasselbe Ziel zulässig ist, jedoch auf einen einzelnen Computer beschränkt ist und nicht nur auf ein einzelnes Volume.

Nützlich, um Pfadlängen zu reduzieren oder die Arbeit mit mehreren Programmen mit fest codierten Verzeichnisnamen zu vereinfachen.

Gleiche Vorbehalte auch! Viele Programme haben unterschiedliche Namen = unterschiedliche Dateien.

Und dann gibt es symbolische Links (die über Netzwerke gehen können), Verknüpfungen und PIFs und .....

Auch einige Informationen von Microsoft selbst :

Grundsätzlich heißt es, Hardlinks nur für Dateien auf demselben Volume (Laufwerksbuchstabe) und Verbindungspunkte nur für Verzeichnisse auf demselben Computer zu verwenden (sie können sich auf verschiedene lokale Volumes erstrecken).

Funktioniert der symbolische Link auf der Festplatte (NTFS) oder auf Windows-Betriebssystemebene? IsmailS vor 14 Jahren 1
9
Josip Medved

Hard Link ist nur ein anderer Name für eine Datei. Wenn Sie eine Datei namens A.txt und Link L.txt haben, haben Sie nach dem Löschen von A.txt immer noch Zugriff auf die Daten über L.txt. Nur wenn beide Dateien gelöscht werden, ist keine Datei mehr vorhanden.

Auf der anderen Seite haben Sie einen sogenannten Softlink (Junction, wenn es sich um einen Ordner handelt, oder symbolische Verknüpfung, wenn es sich um eine Datei handelt). In diesem Fall ist die Datei wirklich gelöscht, wenn Sie A.txt löschen. Das Löschen von L.txt hat keine Auswirkung auf die Datei.

Hardlinks können nur auf derselben Partition wie die Ursprungsdatei verwendet werden, Softlinks können über Partitionen hinweg verwendet werden.

PS-Dateien und Ordner sind in Bezug auf NTFS meist austauschbar.

Sorry, Junctions und Softlinks sind für NTFS nicht dasselbe. :( Vilx- vor 15 Jahren 3
http://msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx Zitat: "Eine Kreuzung (auch als Softlink bezeichnet)" Josip Medved vor 15 Jahren 2
Es gibt jedoch eine weitere Unterscheidung zwischen Kreuzung (auch Softlink genannt) und symbolischer Verbindung, aber ich habe hier nicht auf Details eingegangen. Für Interessenten finden Sie Details in der Windows-Dokumentation unter http://msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx und http://msdn.microsoft.com/en- us / library / aa363878% 28VS.85% 29.aspx. Josip Medved vor 15 Jahren 3
Seit Windows Vista gibt es sowohl NTFS-Junctions (kann nur auf Verzeichnisse gezeigt werden) als auch Unix-ähnliche Symlinks (die auf alles verweisen können). grawity vor 15 Jahren 1
0
Ian Boyd

Hard Link: Nur für das gleiche Volume arbeiten.
Junction: beliebiges lokales Volume
Symbolisch: lokales Volume oder UNC-Pfad

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

Bonus Chatter

Windows erstellt Verknüpfungen und symbolische Links für AppCompat-Zwecke. für die schlecht geschriebenen Bewerbungen, die denken:

  • C: \ Benutzer \ Alle Benutzer
  • C: \ Benutzer \ Standardbenutzer

sind gültig.

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] 

Gleiches gilt für den Profilordner des Benutzers für Anwendungen, die erwarten, dass Windows XP-Ordner noch heute existieren:

| 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

Um programmgesteuert zu antworten:

Hard link: shared_ptr <>. Immer existiert einer.

Softlink: schwach_ptr <>. Nur gültig, wenn ein anderer Hardlink existiert.

Das ist das einfache. :) Die Frage war über Hard Links vs Junctions. ;) Vilx- vor 7 Jahren 0