Sonntag, Mai 11, 2008

Sprachliche Tücken: Analysepunkte

Mit der Windows Shell cmd kann man den Befehl dir /aL ausführen, um Analysepunkte anzuzeigen. Man erhält daraufhin eine Liste von Objekten des Typs <verbindung>oder <symlinkd> oder <symlink>, was auf die Herkunft des L =Link schliessen lässt.

In englischsprachigen Versionen findet man für den Objekttyp Verbindung die Bezeichnung <junction>.

Leider findet sich kein Hinweis, wie ein Datei-Hardlink identifiziert werden kann. Auch ist ein unterbrochener Link nicht direkt erkennbar.

Schon seit Beginn der Einführung von NTFS gibt es den Objekttyp junction, einen auf Verzeichnisse beschränkten Hard Link.

Mit dem Befehl mklink setzt man

Symbolische- und Hard- Links:
mklink Dateilink.txt c:\ZuVerlinkende Datei.txt &&rem symbolischer Link auf Datei - Symlink
mklink /D Verzeichnislink c:\ZuVerlinkendesVerzeichnis &&rem für Verzeichnisse -SymlinkD
mklink /H HardlinkDatei.txt c:\ZuVerlinkendeDatei.txt &&rem Hardlink Datei- neue Instanz einer Datei, geht nicht für Verzeichnisse und auch nicht über die Grenzen des Datenträgers hinaus
mklink /J HardlinkVerzeichnis c:\ZuVerlinkendes Verzeichnis &&rem Hardlink auf Verzeichnis-Junction oder Verbindung

Im Explorer erfolgt die Anzeige so:
symlink: Datei Verknüpfung
symlinkD: Verzeichnisverknüpfung
junction: Dateiordner, Verknüpfungssymbol, keine Angabe des Verknüpfungsziels
Hardlink Datei: Datei ohne Hinweis auf den Link

Leider ist mklink per default dem Administrator vorbehalten.

Kommentare:

Joey hat gesagt…

Hardlinks lassen sich einfach identifizieren, allerdings kann "dir" so etwas nicht

Joey hat gesagt…

Hardlinks lassen sich einfach identifizieren, allerdings kann "dir" so etwas nicht anzeigen. Bei Hardlinks ist allerdings die Anzahl der Hardlinks auf die Datei größer als 1. Dies ist eine Art reference counting des Dateisystems.

Aufgrund der Natur von Hardlinks gibt es keine Hardlinks, die auf Dateien zeigen. Es sind die selben Dateien. Es ist lediglich ein weiterer MFT-Eintrag, der auf die gleichen Blöcke zeigt. Weshalb es auch nicht über Volumegrenzen hinaus funktioniert, weil ein anderes Volume wieder ein anderes Dateisystem ist.

Es gibt auch keinen vernünftigen Grund, warum Hardlinks anders behandelt werden müßten, außer vielleicht für Backup-Programme.

Weiterhin ist ein Junction Point kein Hardlink. Hardlinks sind – definierterweise – weitere MFT-Einträge für exakt die gleiche Datei. Es gibt keine Hardlinks für Verzeichnisse. Wenn man sich das Dateisystem anschaut, wird auch deutlich warum: Ein Verzeichnis ist nur ein Verzeichniseintrag in der MFT, hat aber selbst keine Daten. Jeder Hardlink auf ein Verzeichnis wäre also einfach ein weiteres Verzeichnis.

Junction points sind allerdings symbolische Links – Metadaten, die auf ein anderes Verzeichnis zeigen. Symbolische Links für Dateien ebenfalls. Aber das ist etwas völlig anderes als ein Hardlink.

JoSch hat gesagt…

Leider habe ich keinen einfachen Weg zur Ermittlung aller bestehenden Hardlinks eines Dateisystems finden können. Hier gibt es aber eine Beschreibung mit Listing, wie es prinzipiell funktioniert:
http://blogs.technet.com/b/joscon/archive/2011/01/06/how-hard-links-work.aspx

Ist der Name eines Hardlinks bekannt so kann man mit fsutil eventuell bestehende andere Hardlinks auf diese Dateien finden.
die Hilfe zu fsutil hardlink hat einen Schreibfehler: Es heisst nicht: fsutil hardlink Links test.txt, sondern: fsutil hardlink list test.txt