Was ist der Unterschied zwischen NTFS-Hardlinks und Directory Junctions?


79

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

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


Antworten:


33

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 verweisen, der einen Zähler für die Anzahl der darauf verweisenden Namen enthält. 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 diese verweist. Beachten Sie, dass alle Dateiattribute, einschließlich Datum und Uhrzeit, mit dem Inode und nicht mit dem Dateinamen gespeichert werden.

(Zusätzliche) Hardlinks sind nützlich, wenn Sie möchten, dass verschiedene Namen auf dieselben Daten verweisen, lesen oder schreiben. Sie sparen Platz und Overhead. Sie verprügeln jedoch Programme, die unterschiedliche Namen annehmen und auf unterschiedliche Daten verweisen. Wenn Sie beispielsweise Verweise auf doppelte Dateien durch Hardlinks auf eine einzelne Datei ersetzen, haben Sie alle vorhandenen Sicherungen entfernt! Das Windows-Betriebssystem ist ein Programm, das davon ausgeht, dass unterschiedliche Namen auf unterschiedliche Bitsätze verweisen.

Hardlinks müssen sich auf demselben physischen und logischen Volume befinden.

Sie sind nützlich für:

  • Reduzieren der Pfadlängen, da Windows nur etwa 256 Zeichen unterstützt.

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

Knotenpunkte sind unübersichtlicher und verwenden Analysepunkte (die ich nicht verstehe). Sie können auf verschiedene physische oder logische Volumes verweisen, müssen sich jedoch auf demselben Computer befinden. Sie können anscheinend wie Symlinks für Verzeichnisse verwendet werden und ermöglichen einen zweiten Namen für dasselbe Ziel, sind jedoch auf einen einzelnen Computer beschränkt 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 Vorsichtsmaßnahmen auch! Viele Programme nehmen unterschiedliche Namen = unterschiedliche Dateien an.

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 wird angegeben, dass feste Verknüpfungen nur für Dateien auf demselben Datenträger (Laufwerksbuchstabe) und Knotenpunkte nur für Verzeichnisse auf demselben Computer verwendet werden sollen (sie können sich über verschiedene lokale Datenträger erstrecken).


1
Funktioniert die symbolische Verknüpfung auf NTFS-Ebene (Hard Disk) oder auf Windows-Betriebssystemebene?
IsmailS

48

Schnelle Definitionen:

Symbolische Verknüpfung: Eine Verknüpfung 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: Ein Link zu einer Datei auf demselben Volume (Laufwerksbuchstabe). Jede Datei (Dateidaten) hat mindestens einen festen Link (Dateiname). Durch 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 Remoteverzeichnis.


Einzelheiten:

Angenommen, Sie arbeiten mit NTFS-Volumes in Windows Vista / 7, können Sie mit dem Befehlszeilentool MKLINK alle drei Arten von Links 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 verweist (z. B. Datei / Verzeichnis).

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

  • Symbolische Verknüpfungen können entweder absolute oder relative Verknüpfungen sein. Absolute Verknüpfungen sind Verknüpfungen, die jeden Teil des Pfadnamens angeben, während relative Verknüpfungen relativ dazu bestimmt werden, wo sich relative Verknüpfungsspezifizierer in einem angegebenen Pfad befinden.

  • Absolute symbolische Verknüpfungen können auf Dateien / Verzeichnisse auf demselben oder einem anderen Volume sowie auf eine Remote-Datei oder ein Remote-Verzeichnis unter Verwendung des UNC-Pfads verweisen. Relative symbolische Links sind jedoch auf ein einziges Volume beschränkt.

  • Erhöhte Berechtigungen sind erforderlich, um eine symbolische Verknüpfung zu erstellen. Einmal erstellte erhöhte Berechtigungen sind jedoch nicht erforderlich, um die Verknüpfung zu löschen.

Hardlinks : Ein Hardlink ist die Dateisystemdarstellung einer Datei, bei der mehr als ein Pfad auf eine einzelne Datei verweist.

  • MKLINKErmöglicht das Erstellen von Hardlinks (mithilfe des /HParameters) nur für Dateien (nicht für Verzeichnisse). Ein fester Link kann nur von einer Datei auf demselben Volume erstellt werden.

  • Eine Datei mit mehreren Hardlinks wird nur dann tatsächlich gelöscht, wenn alle Hardlinks gelöscht sind, dh die Linkanzahl Null erreicht. Also hat wirklich jede Datei, die Sie erstellen, mindestens einen festen Link dafür, egal ob Sie sie verwenden MKLINKoder nicht.

  • Alle Änderungen an dieser Datei sind für Anwendungen, die über die darauf verweisenden festen Links darauf zugreifen, sofort sichtbar. Die Verzeichniseintragsgröße und die Attributinformationen werden jedoch nur für die Verknüpfung aktualisiert, über die die Änderung vorgenommen wurde.

  • Beachten Sie, dass die Attribute in der Datei in jeder festen Verknüpfung mit dieser Datei wiedergegeben werden und Änderungen an den Attributen dieser Datei auf alle festen Verknüpfungen übertragen werden. Wenn Sie beispielsweise das schreibgeschützte Attribut für eine feste Verknüpfung aufheben, um diese bestimmte feste Verknüpfung zu löschen, und mehrere feste Verknüpfungen zur tatsächlichen Datei vorhanden sind, müssen Sie das schreibgeschützte Attribut für die Datei zurücksetzen von einem der verbleibenden Hardlinks, um die Datei und alle verbleibenden Hardlinks wieder in den schreibgeschützten Zustand zu versetzen.

Junctions : Eine Junction (auch als Softlink bezeichnet) unterscheidet sich von einer Hardlink dadurch, dass die von ihr referenzierten Speicherobjekte separate Verzeichnisse sind und eine Junction Verzeichnisse auf verschiedenen lokalen Volumes auf demselben Computer verknüpfen kann. Ansonsten verhalten sich Junctions zu Hardlinks identisch. Junctions werden durch Analysepunkte implementiert.

  • MKLINKErmöglicht das Erstellen einer Junction (mithilfe des /JParameters) eines Verzeichnisses (und sogar von Dateien, obwohl dies wahrscheinlich als ungültiger Link angesehen werden sollte).

  • Eine Junction kann als Hardlink-Äquivalent für einen symbolischen Link zu einem Verzeichnis angesehen werden. Ein Junction-Link kann nicht zu einem Remote-Verzeichnis erstellt werden, sondern kann zu einem Verzeichnis auf demselben / einem anderen Volume erstellt werden.


Verweise:

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

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

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


9

Ein fester Link ist nur ein anderer Name für eine Datei. Wenn Sie eine Datei mit dem Namen A.txt haben und über den Link L.txt verfügen, können Sie nach dem Löschen von A.txt weiterhin über L.txt auf die Daten zugreifen. Erst wenn beide Dateien gelöscht sind, ist die Datei verschwunden.

Auf der anderen Seite haben Sie einen sogenannten Softlink (Junction, wenn es sich um einen Ordner handelt, oder einen symbolischen Link, wenn es sich um eine Datei handelt). Wenn Sie in diesem Fall A.txt löschen, ist die Datei wirklich verschwunden. Das Löschen von L.txt hat keinerlei Auswirkungen auf die Datei.

Feste Verknüpfungen können nur auf derselben Partition wie die ursprüngliche Datei verwendet werden, und weiche Verknüpfungen können partitionsübergreifend verwendet werden.

PS Datei und Ordner sind in Bezug auf NTFS größtenteils austauschbar.


3
Leider sind Junctions und Softlinks für NTFS nicht dasselbe. :(
Vilx-

2
msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx Zitat: "Eine Junction (auch als Softlink bezeichnet)"
Josip Medved

3
Es gibt jedoch eine weitere Unterscheidung zwischen Junction (auch als Softlink bezeichnet) und symbolischem Link, auf die ich hier jedoch nicht näher eingegangen bin. Weitere Informationen finden Sie in der Windows-Dokumentation unter msdn.microsoft.com/en-us/library/aa365006%28VS.85%29.aspx und msdn.microsoft.com/en-us/library/aa363878%28VS. 85% 29.aspx .
Josip Medved

1
Seit Windows Vista gibt es sowohl NTFS-Junctions (die nur auf Verzeichnisse verweisen können) als auch Symlinks im Unix-Stil (die buchstäblich auf alles verweisen können).
Grawity

0

Hardlink: Funktioniert nur bei gleichem Volumen.
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 Junctions und symbolische Links für AppCompat-Zwecke. für solche 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 vorhanden sind:

| 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
Bei nicht-englischen Windows-Installationen wird es sogar noch verrückter, wenn Sie dann NOCH MEHR Symlinks / Junctions erhalten, da einige möglicherweise wissen oder nicht, dass Windows bis XP tatsächlich lokale Verzeichnisnamen hatte, die leicht Skripte oder Tutorials für andere Sprachen durcheinander bringen können. Vista hat das getötet und verwendet stattdessen lokalisierte DISPLAY-Namen, sodass die tatsächlichen Pfade in allen Sprachen gleich sind, aber aufgrund der Tatsache, dass lokalisierte Fenster noch mehr Links enthalten als englische
My1

-1

Programmgesteuert antworten:

Fester Link: shared_ptr <>. Es gibt immer einen.

Softlink: weak_ptr <>. Nur gültig, wenn ein anderer fester Link existiert.


Das ist das Einfache. :) Die Frage war zu Hard Links vs Junctions. ;)
Vilx
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.