Linux: Hardlinks und deren Prinzip (inodes)

1

Jede Datei auf der Fesplatte wird durch ein Inode repräsentiert. Ein Inode selbst enthält den Standort der Datei auf der Festplatte, den Inhalt der Datei selbst sowie Berechtigung, Dateitype etc. Der Dateinamen den der User angezeigt bekommt enthält lediglich die Information über die Inode Nummer die auf das dazugehörige Inode verweißt.

Die Inode Nummer kann man sich auch direkt anzeigen lassen

bash# ls -i debian-500-i386-netinst.iso
63721 debian-500-i386-netinst.iso

In diesem Fall ist 63721 die Inode Nummer die die eigentliche Datei identifiziert. Die Zuordnung der Datei zur Inode Nummer erfolgt über den sogenannten Hardlink. Der Clou von Hardlinks ist, dass es auf eine Inode Nummer mehrere Hardlinks geben kann.

Angenommen, Sie legen einen Hardlink namens debian_netinst.iso an, der auf die „Datei“ debian-500-i386-netinst.iso verweist…

ln debian-500-i386-netinst.iso debian_netinst.iso

werden Sie spätestens beim auslesen der Inode Nummer sehen, dass diese identisch ist.

bash# ls -i debian-500-i386-netinst.iso debian_netinst.iso
63721 debian-500-i386-netinst.iso  63721 debian_netinst.iso

Weiter angenommen Sie haben nun einen Hardlink auf dem Dateisystem erstellt der sich in einer ganz anderen Ordnersturkur befindet wie ein bereits vorhandener, so kann es passieren, dass sie Tage später die ältere „Datei“ – eigentlich ja Hardlink löschen. Was passiert nun..?

bash# rm debian-500-i386-netinst.iso
bash# ls -i debian_netinst.iso
63721 debian_netinst.iso

Ganz einfach, das System erkennt, dass die Inode Nummer noch an andere Stelle referenziert wird und entfernt lediglich den Hardlink. Das Inode selbst bleibt erhalten und somit auch alle andern Hardlinks auf diese Datei.

Lediglich beim entfernen des letzten Hardlinks wird die Datei entgültig gelöscht. Übrigens, Hardlinks funktionieren nur innerhalb der gleiche Partition, das liegt daran, dass jede Partition nur ihre eigenen Inodes kennt. Für Partitionsübergreifende Verlinkungen müssen Symbolische Links (ln -s) verwendet werden.

alle Dateien mit der Inode Nummer xyz finden

Der ein oder andere wird sich jetzt gefragt habe, woher er denn weiß, dass die Datei die er gerade gelöscht hat keinen weiteren Hardlink hatte. Dies kann man wiefolgt erkennen

  • war noch ein Hardlink vorhanden, hat sich der freie/benutzte Festplattenspeicher nicht verändert
  • Über den Befehl find -type f -inum 63721. Er listet alle Dateien mit der Inode nummer 63721 auf
  • Der Befehl find -type f -links +1 liestet alle Dateien mit mehr als einem Hardlink auf
  • Der Befehl ls -l liestet die Dateien mit der Anzahl der Hardlinks auf
bash# ls -l
-rwxr-xr-x 1 root root 169388032 23. Sep 16:12  debian-40r...
-rwxr-xr-x 2 root root 157204480 14. Feb 17:04  debian-500...
-rwxr-xr-x 2 root root 157204480 14. Feb 17:04  debian_netin...
Teilen.

Über den Autor

Seit der Ausbildung zum Fachinformatiker Systemintegration (2002-2005) bei der DaimlerChrysler AG, beruflich im Bereich der E-Mail Kommunikation (Exchange, Linux) sowie des ActiveDirectory, mit entsprechenden Zertifizierungen (MCSE 2003, MCITP Ent.-Admin 2008, MCSE 2012, LPIC 1-3) tätig. Abgeschlossenes Studium zum Master of Science der IT-Management an der FOM sowie zertifizierter Datenschutzbeauftragter. Aktuell im Projektmanagement tätig.

1 Kommentar

  1. Pingback: .: blog.cscholz.io :. » Debian: Quota Verwaltung «

Antworten