VMware ESXi and vSphere Cluster Management

Harte Links unter Linux verstehen und verwenden

Lerne, was harte Links unter Linux sind, wie Inodes und Link-Anzahlen funktionieren und wie sich Hardlinks beim Ändern und Löschen verhalten.

Ein harter Link, auch Hardlink genannt, ist ein zusätzlicher Verzeichniseintrag für dieselbe Datei. Zwei Namen können dadurch auf denselben Dateiinhalt und dieselben Metadaten zugreifen.

Wichtig: Die Dateinamen zeigen nicht aufeinander. Beide Verzeichniseinträge verweisen direkt auf denselben Inode. Keiner der Namen ist technisch der bevorzugte oder der „eigentliche“ Name der Datei.

Voraussetzungen

Für die Beispiele genügen grundlegende Kenntnisse im Linux-Terminal sowie die Befehle ls, cat und rm. Die Befehle sollten in einem eigenen Testverzeichnis ausgeführt werden.

Inodes und Verzeichniseinträge

Ein Inode ist eine Datenstruktur des Dateisystems. Er enthält unter anderem Dateimetadaten wie Besitzer, Rechte, Zeitstempel und Dateigröße sowie die Zuordnung zu den eigentlichen Dateidaten.

Ein Verzeichnis speichert nicht den gesamten Dateiinhalt. Ein Verzeichniseintrag ordnet einen Dateinamen einer Inode-Nummer zu. Bei einem Hardlink gibt es mehrere solche Zuordnungen für denselben Inode.

  • Dateiname: der Name, unter dem eine Datei in einem Verzeichnis erreichbar ist.
  • Verzeichniseintrag: die Zuordnung zwischen einem Namen und einer Inode-Nummer.
  • Inode: der Datensatz mit Metadaten und der Referenz auf die Dateidaten.
  • Link-Anzahl: die Anzahl der Verzeichniseinträge, die auf diesen Inode verweisen.

Die Option -i von ls zeigt die Inode-Nummer. Die Option -l zeigt unter anderem die Link-Anzahl.

ls -li datei.txt

In der Ausgabe steht die Inode-Nummer typischerweise in der ersten Spalte. Die Link-Anzahl folgt in der Spalte für die Dateirechte beziehungsweise direkt danach, abhängig von der verwendeten Linux-Distribution und der Darstellung von ls.

Einen harten Link erstellen

Die grundlegende Syntax lautet:

ln AUSGANGSDATEI NEUER_NAME

Die erste Angabe ist die bereits vorhandene Datei. Die zweite Angabe ist der neue Verzeichniseintrag. Ohne die Option -s erstellt ln einen harten Link.

Praktisches Beispiel

Zuerst wird eine Testdatei mit Beispielinhalt angelegt:

printf 'Erster Inhalt
' > original_file.txt

Nun erhält dieselbe Datei einen zweiten Namen:

ln original_file.txt hlink.lnk

Beide Namen können anschließend gemeinsam untersucht werden:

ls -li original_file.txt hlink.lnk

Die beiden Zeilen müssen dieselbe Inode-Nummer zeigen. Außerdem ist die Link-Anzahl gegenüber einer Datei mit nur einem Verzeichniseintrag um eins gestiegen. Dadurch lässt sich ein Hardlink von einer Kopie unterscheiden: Eine Kopie besitzt normalerweise eine eigene Inode-Nummer.

Lesen und Ändern über beide Namen

Beide Namen liefern denselben Inhalt:

cat original_file.txt
cat hlink.lnk

Eine Änderung über einen Namen ist unmittelbar über den anderen Namen sichtbar:

printf 'Neuer Inhalt
' > hlink.lnk
cat hlink.lnk
cat original_file.txt

Beide cat-Befehle geben Neuer Inhalt aus. Der Vorgang ändert nicht eine Kopie, sondern die Daten, auf die der gemeinsame Inode verweist.

Löschen und Lebensdauer der Datei

Der Befehl rm entfernt zunächst einen Verzeichniseintrag. Er löscht nicht zwangsläufig sofort die Dateidaten.

Solange mindestens ein weiterer harter Link auf den Inode verweist, bleiben die Daten über diesen Namen erreichbar:

rm original_file.txt
cat hlink.lnk
ls -li hlink.lnk

Nach dem Entfernen von original_file.txt ist hlink.lnk weiterhin vorhanden und enthält den bisherigen Inhalt. Die Link-Anzahl beträgt nun wieder eins.

Erst wenn der letzte Verzeichniseintrag entfernt wird, ist die Datei über diese Namen nicht mehr erreichbar:

rm hlink.lnk
ls -li hlink.lnk

Der letzte Befehl meldet, dass die Datei nicht gefunden wurde. Das Dateisystem kann die zugehörigen Daten anschließend freigeben, sofern kein anderer Zugriff, etwa durch einen noch geöffneten Prozess, besteht.

Zustände bei mehreren harten Links

AktionVorhandene DateinamenErwartete Link-AnzahlZugriff auf Inhalt möglich
Datei anlegenoriginal_file.txt1Ja
Hardlink anlegenoriginal_file.txt, hlink.lnk2Ja, über beide Namen
Ersten Namen löschenhlink.lnk1Ja, über den verbleibenden Namen
Letzten Namen löschenKeiner0Nein über diese Verzeichniseinträge

Einschränkungen harter Links

Ein Hardlink kann nur innerhalb desselben Dateisystems angelegt werden. Ein Dateisystem ist der Speicherbereich, den Linux als zusammenhängenden Dateisystembereich eingebunden hat. Umgangssprachlich wird hierfür oft auch „dieselbe Partition“ gesagt; technisch ist entscheidend, ob Quelle und Ziel im selben eingehängten Dateisystem liegen.

Liegt die Quelldatei beispielsweise auf einem Dateisystem und der Zielpfad auf einem anderen Mountpoint, kann ln keinen gemeinsamen Inode einrichten. In diesem Fall erscheint eine Fehlermeldung wie „Invalid cross-device link“ oder eine sinngemäße Meldung in deutscher Sprache.

Im üblichen Linux-Einsatz werden harte Links für reguläre Dateien verwendet. Harte Links auf Verzeichnisse sind für normale Benutzer nicht erlaubt, weil sie die Struktur des Dateisystems und die Navigation durch Verzeichnisse problematisch machen würden.

Harte und symbolische Links im Vergleich

Ein symbolischer Link, kurz Symlink, ist eine andere Link-Art. Er ist ein eigener Dateityp, der einen Pfad als Ziel speichert. Ein Hardlink dagegen verweist direkt auf denselben Inode wie der andere Verzeichniseintrag.

MerkmalHarter LinkSymbolischer Link
VerweisartZusätzlicher Verzeichniseintrag für dieselbe DateiEigene Datei mit gespeichertem Zielpfad
Bezug zu Inode oder PfadVerweist auf denselben InodeSpeichert einen Pfad als Verweisziel und besitzt selbst einen Inode
DateisystemgrenzenNur innerhalb desselben Dateisystems möglichKann auf ein anderes Dateisystem oder einen anderen Mountpoint zeigen
Nach dem Löschen eines Namens oder ZielsEin anderer Hardlink funktioniert weiter, solange mindestens einer vorhanden istWird ungültig, wenn sein Ziel gelöscht oder verschoben wird
Erkennbarkeit mit lsGleiche Inode-Nummer wie das Ziel und erhöhte Link-AnzahlEigener Inode; ls -l zeigt typischerweise -> und den Zielpfad
Typische Erstellung mit lnln quelle zielln -s quelle ziel

Ein symbolischer Link lässt sich zum Vergleich so erstellen:

ln -s original_file.txt symlink.lnk

Wird danach original_file.txt gelöscht, kann symlink.lnk nicht mehr auf die Zieldatei zugreifen. Ein vorhandener Hardlink würde dagegen weiter funktionieren, weil er nicht vom Namen original_file.txt abhängt.

Typische Fehler und Lösungen

ln meldet einen Fehler zwischen verschiedenen Speicherbereichen

Ursache: Quelle und Ziel liegen in unterschiedlichen Dateisystemen.

Lösung: Den Hardlink innerhalb desselben Dateisystems anlegen. Wenn ein dateisystemübergreifender Verweis benötigt wird, stattdessen einen symbolischen Link verwenden.

Die Datei ist nach dem Löschen des ersten Namens noch erreichbar

Das ist das erwartete Verhalten. Der verbleibende Name ist ein weiterer Verzeichniseintrag für denselben Inode. Mit ls -li hlink.lnk lässt sich die verbliebene Link-Anzahl prüfen.

Die Datei scheint nach dem Löschen verschwunden zu sein

Möglicherweise wurde der letzte Hardlink entfernt oder es gab von Anfang an nur einen Dateinamen. Vor dem Löschen hilft:

ls -li original_file.txt hlink.lnk

Prüfe dabei die vorhandenen Namen und die Link-Anzahl.

Die Inode-Nummern unterscheiden sich

Dann wurde wahrscheinlich eine Kopie erstellt oder ein symbolischer Link angelegt. Für einen Hardlink muss ln ohne -s verwendet werden:

ln original_file.txt hlink.lnk
ls -li original_file.txt hlink.lnk

Identische Inode-Nummern und eine gemeinsame Link-Anzahl bestätigen den Hardlink.

Prüfungsrelevante Zusammenfassung

  • Ein Hardlink ist ein zusätzlicher Verzeichniseintrag für dieselbe Datei.
  • Mehrere Namen verweisen auf denselben Inode; kein Name ist technisch das Original.
  • ls -li zeigt Inode-Nummer und Link-Anzahl.
  • ln quelle ziel erstellt einen harten Link, sofern beide Pfade im selben Dateisystem liegen.
  • Änderungen über einen Namen sind über alle anderen Hardlink-Namen sichtbar.
  • rm entfernt einen Namen. Die Daten bleiben erreichbar, solange mindestens ein Hardlink besteht.
  • Ein Symlink speichert einen Pfad, hat einen eigenen Inode und kann nach dem Löschen seines Ziels ungültig werden.

Weitere Grundlagen findest du unter Harte Links unter Linux.