Ein Inode (Index Node) ist der Metadaten-Eintrag, den Linux- und Unix-Dateisysteme wie ext4 für jede Datei und jedes Verzeichnis führen. Im Inode stehen alle Informationen über eine Datei außer ihrem Namen und ihrem Inhalt: Besitzer, Zugriffsrechte, Größe, Zeitstempel, Dateityp und die Adressen der Datenblöcke auf dem Datenträger.
Was speichert ein Inode?
- Metadaten: Eigentümer (UID), Gruppe (GID), Zugriffsrechte (rwx), Größe in Bytes, Anzahl harter Links.
- Zeitstempel: letzter Zugriff (atime), letzte Änderung (mtime), Statusänderung (ctime).
- Blockadressen: Zeiger auf die Datenblöcke — bei ext4 als Extent-Baum organisiert.
- Kein Dateiname: Der Name steht im Verzeichnis, das als Tabelle aus Name und Inode-Nummer fungiert.
Ein Verzeichnis ist damit nur eine Zuordnungsliste: Dateiname → Inode-Nummer. Ein Hardlink legt einen zweiten Namen an, der auf denselben Inode zeigt — so können mehrere Pfade dieselben Daten meinen.
Inodes im Alltag
# Inode-Nummer einer Datei anzeigen
ls -i datei.txt
# Inode-Belegung des Dateisystems
df -i
Die Inode-Nummer ist die eindeutige Identität einer Datei innerhalb eines Dateisystems. Beim Anlegen legt mkfs eine feste Zahl von Inodes an (bei ext4 standardmäßig einer pro 16 KiB Plattenplatz, Inode-Größe 256 Bytes). Sind alle Inodes verbraucht, meldet das System „No space left on device", obwohl noch freie Blöcke existieren — typisch für Mail-Server oder Cache-Verzeichnisse mit sehr vielen kleinen Dateien.
Inode und Superblock
Der Superblock beschreibt das Dateisystem als Ganzes, die Inode-Tabelle verwaltet die einzelnen Dateien. Journaling schützt genau diese Strukturen: Änderungen an Inodes und Block-Zeigern werden protokolliert, bevor sie angewendet werden, damit nach einem Absturz keine halbfertigen Metadaten zurückbleiben.