Zum Inhalt springen

Hardlink

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 23. November 2010 um 23:51 Uhr durch 62.224.189.7 (Diskussion) (Überarbeitung Einleitung, Überarbeitung Windows Teil, DOS Pseudo Hardlinks hinzugefügt). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Ein harter Link (engl. hard link, im deutschen Jargon auch Hardlink) ist ein Verzeichniseintrag in einem Dateisystem, der auf Dateien und Verzeichnisse verweist. Damit kann einem Anwender oder einem Anwendungsprogramm die Datei oder das Verzeichnis an einer Stelle des Dateisystems/Datenträgers eingeblendet werden, obwohl diese eigentlich ganz woanders gespeichert ist. Der Name der Datei oder des Verzeichnises ist dabei nicht vom Original unterscheidbar.

Mittels Hardlinks können Anwendungen, die auf fest in der Anwendung hinterlegte Pfade zugreifen, die es auf dem zu verwendenden System jedoch nicht (mehr) gibt, so auf ein anderes Verzeichnis oder eine andere Datei verwiesen werden, dass es für die Anwendung transparent ist und diese damit weiterhin funktioniert.

Hardlinks als Konzept existieren in Unix-, Linux- und Windows Betriebssystemen. In Mac OS X existieren diese auch, da es mit Linux gewisse Gemeinsamkeiten besitzt. Unter Windows können Hardlinks nur bei Verwendung des NTFS-Dateisystems benutzt werden.

Von „harten Links“ spricht man, wenn mehrere Einträge auf denselben Dateideskriptor verweisen, dessen Nummer eine Datei oder ein Verzeichnis systemintern identifiziert. Dieser Deskriptor heißt in Unix-Systemen Inode, unter NTFS File Record. Mehrere harte Links auf denselben Inode oder File Record sind gleichwertig und können in beliebiger Reihenfolge umbenannt oder gelöscht werden. Abgesehen von den Verzeichniseinträgen für das aktuelle und das übergeordnete Verzeichnis, . und .., verweisen harte Links fast immer auf Dateien. Da Deskriptornummern innerhalb von Partitionen verwaltet werden, sind harte Links nur innerhalb derselben Partition möglich.

Im Unterschied zu harten Links verweisen symbolische Links nicht auf einen Deskriptor, sondern auf einen weiteren Verzeichniseintrag.

Aufbau (Unix)

Jeder Verzeichniseintrag besteht aus dem Dateinamen und der zugeordneten Inode-Nummer. Zu jedem Inode kann es nahezu beliebig viele Dateipfade (Verzeichniseinträge) geben (meist sind 32766 Links möglich), 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 dem Verzeichnis selbst einen Link namens „.“ und in allen untergeordneten Verzeichnissen je einen Link namens „..“.

Umsetzung in verschiedenen Betriebssystemen

Unix

Für sonstige Dateien lassen sich mit dem Befehl ln jederzeit zusätzliche Links erstellen, z. B. ein Link /home/wiki/nulllink zum vorhandenen Gerät /dev/null: ln /dev/null /home/wiki/nulllink

(Das Beispiel funktioniert nur, wenn sich /home/wiki zufällig im gleichen Dateisystem wie /dev/null befindet. In modernen Linux-Distributionen und grundsätzlich bei FreeBSD (ab Version 5) ist das jedoch niemals der Fall, da /dev dort ein Mountpoint eines speziellen Gerätedateisystems ist.)

Andere Möglichkeiten zum Erstellen von Hard Links sind gcp --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

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 (unter Vista) oder Programme anderer Hersteller.

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

Zulässig wäre beispielsweise:

D:\dira\Anton.txt → D:\dirb\dirx\Berta.txt oder
D:\dirc\Carla.bak → D:\dirb\dirx\Berta.txt usw.

Dadurch würden alle Zugriffe auf die Datei D:\dira\Anton.txt für den Anwender bzw. das Programm transparent nach D:\dirb\dirx\Berta.txt umgeleitet. Es wird dann auch tatsächlich diese Datei bearbeitet.

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.

DOS

Der noch von DOS stammende Subst Befehl kann lediglich Verzeichnisse als ein virtuelles Laufwerk einbinden und ist damit nicht als Hardlink im eigentlichen Sinne anzusehen. Diese auch noch unter Windows vorhandene Funktionalität kann jedoch auch mit FAT Dateisystemen genutzt werden.

Anmerkungen

  • Harte Links werden beim Systembackup 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 Hard Links ist die Erstellung von Snapshots, bei denen statt eines kompletten neuen Backups lediglich Hard Links auf ein bestehendes Backup erzeugt werden und so mit geringem zusätzlichen Speicherplatz die Veränderungen an einem Verzeichnisbaum rekonstruiert werden können.[1][2]
  • Unter NTFS erfüllen Abzweigungspunkte („Junctions“) eine ähnliche Funktion wie harte Links, wenn Verzeichnisse auf verschiedenen Partitionen oder Festplatten desselben Computers verlinkt werden sollen, in der Art
C:\dira → D:\dirb\dirx
Nicht möglich sind jedoch
1. die Verlinkung von Dateinamen über einen Abzweigungspunkt, wie etwa
D:\dira\Anton.txt → D:\dirb\dirx\Berta.txt oder
2. die Verlinkung von Verzeichnissen auf einem Netzlaufwerk.
  • Link Shell Extension für Windows – Bequem im Explorer Links erstellen
  • mklink für Windows 1.0 - Kommandozeilen-Befehl für Link-Erstellung unter Windows 2000/XP
  • FreeDup - automatisiertes Erstellen von Links unter Linux/Unix
  • Dupmerge - automatisiertes Erstellen von Links u. a. unter Linux/Unix
  • AllDup – Duplikatfinder (Byte-für-Byte-Vergleich) mit Option zum Erstellen von Hard- und Softlinks unter Windows. Läuft auch auf FAT Dateisystemen, logischerweise ohne die Option "Hardlinks erstellen".

Einzelnachweise

  1. Easy Automated Snapshot-Style Backups with Linux and Rsync
  2. Rob Flickenger: Linux Server Hacks Hack 42, Automated Snapshot-Style Incremental Backups with rsync