Harter Link

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Harter Link (auch harte Verknüpfung; engl. hard link, im deutschen Jargon auch Hardlink) ist ein Begriff aus dem Bereich der Dateisysteme in der Informatik. In modernen Dateisystemen gibt es keine feste Zuordnung zwischen Dateinamen und der eigentlichen Datei. Vielmehr wird beim Erstellen der Datei – beispielsweise auf einer Festplatte – zunächst bloß eine Nummer als Referenz auf die Datei benutzt (je nach Betriebssystem Inode- oder File-Record-Nummer genannt) und in einem zweiten Schritt ein Verzeichniseintrag mit dem Dateinamen erzeugt, der auf diese Nummer verweist. Im eigentlichen Sinne bezeichnet harter Link diese Verknüpfung von Dateiname und Datei (letztere repräsentiert durch Inode- oder File-Record-Nummer). Interessant dabei ist – und das ist meistens gemeint, wenn man den Begriff harter Link benutzt –, dass mehrere harte Links auf dieselbe Datei verweisen können, also mehrere Verzeichniseinträge/​Dateinamen für ein und dieselbe Datei existieren können. Des Weiteren sind harte Links nur innerhalb derselben Partition möglich.

Einführung[Bearbeiten]

Den ersten harten Link erzeugt das Betriebssystem (genauer: der Dateisystemhandler) automatisch beim Erstellen der Datei, da ohne ihn gar kein Dateiname existieren würde und somit die Anwendungsprogramme gar keinen Zugriff auf die Datei hätten. Mit der Erstellung eines harten Links auf eine bereits existierende Datei wird ein weiterer Name zu der Datei etabliert; anschließend bilden beide Namen einen gleichwertigen Zugang zu der Datei; dabei ist nicht ohne Weiteres zu sagen, welcher Name zuerst da war. Das ist ein Gegensatz zu Verfahren mit ähnlicher Zielsetzung wie beispielsweise symbolischen Verknüpfungen (auch Soft Links genannt), bei denen es eine eigentliche Datei und einen Link auf dieselbe gibt. Eine Datei oder ein Verzeichnis kann mit diesem Mechanismus an verschiedenen Orten in der Verzeichnisstruktur gleichzeitig erscheinen. Zu einem weiteren harten Link gehört nur ein weiterer Name; andere Metadaten, die zu der Datei gehören – wie etwa Änderungsdatum oder Zugriffsrechte –, existieren nur einmal und werden im Inode oder File Record gespeichert.[1][2][3] Harte Links können sowohl in Unix- und Linux-Systemen (also auch Mac OS X) als auch im Dateisystem NTFS unter Windows erstellt werden.

Im Allgemeinen spricht man von harten Links, wenn mehrere Einträge auf denselben Inode oder File Record verweisen, dessen Nummer eine Datei oder ein Verzeichnis dateisystemintern identifiziert. Mehrere harte Links auf denselben Inode oder File Record sind gleichwertig und können in beliebiger Reihenfolge umbenannt oder gelöscht werden. (Beim Löschen wird überprüft, ob gerade der letzte verbleibende harte Link gelöscht wird; die eigentliche Datei wird erst dann gelöscht.) Abgesehen von den Verzeichniseinträgen für das aktuelle und das übergeordnete Verzeichnis („.“ und „..“) verweisen harte Links fast immer auf Dateien. Da Inode- oder File-Record-Nummern innerhalb von Partitionen verwaltet werden, sind harte Links nur innerhalb derselben Partition möglich.

Aufbau (Unix)[Bearbeiten]

Jeder Verzeichniseintrag besteht aus dem Dateinamen und der zugeordneten Inode-Nummer. Zu jedem Inode kann es nahezu beliebig viele Dateipfade (Verzeichniseinträge) geben, also auch unterschiedliche Namen für dieselbe Datei.

Ein Vorteil dieses Konzepts zeigt sich beim Entfernen von Links:

Es gibt bei Unixsystemen streng genommen keine Operation zum Löschen einer Datei, sondern nur eine unlink-Operation zum Löschen von Links. Im Inode einer Datei wird die aktuelle Anzahl der Links gespeichert. Erst wenn der letzte Link zu einer Datei gelöscht ist, der Zähler im Inode also den Wert Null hat, wird die Datei selbst (Inode und Datencluster) zur Wiederbeschreibung freigegeben und damit logisch gelöscht.

Bemerkenswert ist das Verhalten harter Links, wenn ein Benutzer eine Datei zu löschen versucht, die ein Programm noch geöffnet hält: Da das Öffnen einer Datei den Zähler um eins erhöht, führt das versuchte Löschen zum „Verschwinden“ der Datei (genauer: des gelöschten Links), aber nicht zur Freigabe des Festplattenspeichers – dieser wird erst freigegeben, nachdem die Datei von allen Applikationen geschlossen wurde.

Um Konsistenzprobleme zu vermeiden, dürfen gewöhnliche Benutzer für Verzeichnisse keine zusätzlichen harten Links erstellen: Die Links werden von einem Verzeichnis-Inode automatisch verwaltet, und der eindeutige eigentliche Verzeichnisname taucht als Link genau einmal im übergeordneten Verzeichnis auf. Daneben gibt es in jedem Verzeichnis immer folgende zwei Links: Einen Link namens „.“, der das Verzeichnis selbst darstellt und folglich darauf verlinkt, sowie das übergeordnete Verzeichnis, repräsentiert durch einen Link namens „..“.

Anwendungsbeispiele[Bearbeiten]

Unix[Bearbeiten]

Für sonstige Dateien lassen sich mit dem Befehl ln jederzeit zusätzliche Links erstellen, z. B. ein Link /home/wiki2/same-picture zur vorhandenen Datei /home/wiki1/picture:

ln /home/wiki1/picture /home/wiki2/same-picture

Andere Möglichkeiten zum Erstellen von Hard Links sind cp --link und rsync --link-dest.

Mit dem Befehl stat lässt sich ermitteln, wie viele harte Links auf eine Datei zeigen. Der Befehl ls -l zeigt auf vielen Unix-Systemen in der zweiten Spalte die Anzahl harter Links der zugehörigen Datei.

Windows[Bearbeiten]

NTFS-Partitionen (nicht FAT und FAT32) unterstützen bis zu 1023 harte Links pro Datei. Zum Erstellen harter Links eignen sich beispielsweise das Programm fsutil hardlink utility (unter Windows XP), der mklink-Befehl (ab Vista) oder Programme anderer Hersteller.

Um mit dem Microsoft-Werkzeug fsutil den harten Link „Neue Linkdatei.txt“ zu erzeugen, der auf die Datei „Zieldatei.txt“ verweist, ist das folgende Kommando einzugeben:

fsutil hardlink create "Neue Linkdatei.txt" "Zieldatei.txt"

bzw. ab Vista:

mklink /H "Neue Linkdatei.txt" "Zieldatei.txt"

Anders als unter Unix kann kein harter Link gelöscht werden, solange die referenzierte Datei von einer Anwendung geöffnet, d. h. ein Filehandle darauf gesetzt ist.

Anmerkungen[Bearbeiten]

  • Ein typischer Arbeitsgang an einem Computer ist es, eine Datei zu öffnen, zu ändern und zu speichern – beispielsweise einen Brief in einer Textverarbeitung zu ändern und dann zu sichern. Je nachdem, wie die Anwendungssoftware – hier die Textverarbeitung – intern ausgelegt ist, wird entweder der alte Inhalt in der geöffneten Datei mit dem geänderten Inhalt überschrieben – oder es wird eine neue Datei mit temporären Namen angelegt, die alte gelöscht und anschließend die neue Datei mit dem alten Namen versehen. Entsprechend der dargelegten Eigenschaften von harten Links wird beim erstgenannten Verfahren der neue Inhalt bei allen Links der Datei erscheinen; beim zweiten Verfahren hingegen wird durch den Löschvorgang lediglich einer der Links aufgehoben, und der neue Inhalt erscheint in einer neuen Datei ohne zusätzliche harte Links. Die anderen Links der ursprünglichen Datei verweisen nach wie vor auf ebenjene ursprüngliche Datei mit dem alten Inhalt; es sind nun also beide Versionsstände auf dem Datenträger vorhanden – ein Effekt, der gewollt sein kann oder auch nicht.
  • Harte Links werden bei der Datensicherung (backup) meist durch Kopien der verlinkten Dateien ersetzt.
  • Harte Zusatzlinks werden für „normale“ Dateien nicht sehr oft genutzt, da für mehrfache Verweise auf eine Datei auch symbolische Links zur Verfügung stehen.
  • Eine verbreitete Anwendung von harten Links ist die Erstellung von Schnappschüssen. Dabei werden statt einer vollständigen Kopie aller Dateien (complete backup) nur neue oder geänderte Dateien gesichert (incremental backup) und ältere Dateien als harte Links auf bereits vormals gesicherte Dateien (backup set) repräsentiert. Da harte Links kaum Speicherplatz benötigen, wird gegenüber einer vollständigen Sicherung entsprechend signifikant wenig Speicher benötigt, trotzdem lassen sich alle Veränderungen an einem Verzeichnisbaum rekonstruieren.[4][5]
  • Das Versionsverwaltungssystem Git benutzt harte Links beim Klonen von lokalen Repositories. Da Git in der Regel die gesamte Historie eines Projekts lokal verfügbar hält, lässt sich auf diese Weise Speicherplatz sparen.[6]
  • Unter NTFS erfüllen Abzweigungspunkte (junctions) eine ähnliche Funktion wie harte Links, wenn Verzeichnisse auf verschiedenen Partitionen oder Festplatten desselben Computers verlinkt werden sollen. Abzweigungspunkte erlauben jedoch keine Verlinkung von Dateinamen oder Verlinkungen über Netzlaufwerke.

Siehe auch[Bearbeiten]

Symlink

Einzelnachweise[Bearbeiten]

  1. Nixcraft: Understanding UNIX / Linux filesystem Inodes
  2. Why is the file size reported incorrectly for files that are still being written to?
  3. The Windows Servicing Guy: How hard links work
  4. Easy Automated Snapshot-Style Backups with Linux and Rsync
  5. Rob Flickenger: Linux Server Hacks Hack 42, Automated Snapshot-Style Incremental Backups with rsync
  6. http://www.kernel.org/pub/software/scm/git/docs/git-clone.html