Unix-Dateisysteme sind nach einem anderen Prinzip aufgebaut, als etwa DOS-FAT-Systeme. Es gibt zwar viele verschiedene Dateisysteme unter Unix, gemeinsam haben sie jedoch eben das Prinzip der Funktionsweise. Und dieses Prinzip beruht auf den sogenannten I-Nodes.

Jede Partition enthält ein Dateisystem, dieses Dateisystem wiederum enthält eine Art Inhaltsverzeichnis, die I-Node-Liste. Die einzelnen Elemente der I-Node-Liste sind die Dateiköpfe, also die Orte wo Dateiattribute, Größe usw. gespeichert sind. Diese Dateiköpfe werden I-Nodes genannt.

Wie unter DOS auch, so verwalten Unix-Dateisysteme nicht zwangsläufig die Sektoren einer Festplattenpartition sondern Zuordnungseinheiten, die hier aber nicht Cluster sondern Block heißen. Beim Anlegen eines Dateisystems kann die Blockgröße angegeben werden, die auf dieser Partition verwendet werden soll. Typische Blockgrößen sind 512, 1024 oder 2048 Byte. Voreingestellt sind meist 1024 Byte pro Block.

Anders als unter DOS werden diese Blöcke aber nicht in einer Tabelle (FAT) zusammengefasst, sondern die I-Nodes enthalten selbst die Verweise auf diese Blöcke. Das Format eines typischen I-Nodes sieht etwa so aus:

Typ und Zugriffsrechte
Anzahl der Hardlinks
Benutzernummer (UID)
Gruppennummer (GID)
Größe der Datei in Bytes
Datum der letzten Veränderung (mtime)
Datum der letzten Statusänderung (ctime)
Datum des letzten Zugriffs (atime)
Adresse von Datenblock 0
Adresse von Datenblock 9
Adresse des ersten Indirektionsblocks
Adresse des Zweifach-Indirektionsblocks
Adresse des Dreifach Indirektionsblocks

Nach den Datumsfeldern stehen zehn Felder, die direkt die Adressen der Datenblöcke beinhalten können. Benutzt die Datei weniger Platz sind die Felder einfach leer.

Ist die Datei größer als 10 Blöcke (also größer als 10*1024 oder 10*2048 oder 10*512), so enthält das nächste Feld der I-Node eine Adresse eines Blockes, der wiederum bis zu 128 Adressen anderer Blöcke enthalten kann. Sollte das auch noch nicht ausreichen, so enthält der nächste I-Node-Eintrag eine Adresse eines Zweifach-Indirektionsblocks, eines Blocks, der bis zu 128 Adressen auf Blöcke mit wiederum 128 Adressen enthält. Und falls auch das noch zu wenig sein sollte, so enthält der nächste Eintrag die Adresse eines Blockes, der wiederum 128 Adressen von Zweifach-Indirektionsblöcken enthalten kann. Damit sind dann Dateigrößen von 1, 2 oder 4 Gigabyte (je nach Blockgröße von 512, 1024 oder 2048 Byte) möglich.

Zu beachten ist, daß der Dateiname nicht in der I-Node auftaucht. Die I-Node ist sozusagen nur die Referenz auf die Datenblöcke, die eine Datei benutzt und der Ort, an dem die Attribute wie Eigentümer, Gruppe, Größe und Zugriffsdaten gespeichert sind.

Je nach verwendetem Dateisystem liegt das Wurzelverzeichnis auf einer festgelegten I-Node, meist 1 oder 2. Grundsätzlich ist es aber dem Dateisystem bekannt, welche I-Node das Wurzelverzeichnis enthält.

Jedes Verzeichnis (Ordner, Directory) – auch das Wurzelverzeichnis ist unter Unix nichts anderes als eine Datei, deren Inhalt einfach die Dateinamen der enthaltenen Dateien samt ihren I-Node-Nummern enthält. Damit wird auch klar, warum Unix kein Problem mit Hard-Links hat, also mit Dateien mit mehreren Namen. Es handelt sich ja nur um verschiedene Namenseinträge, die eben die selbe I-Node-Nummer besitzen.

Das Standard Linux-Dateisystem ext2 hat zusätzlich zu den gezeigten I-Node Einträgen noch verschiedene andere, die das System in mancherlei Hinsicht noch leistungsfähiger macht. Für den Anwender ergenen sich dadrch keinerlei Veränderungen, in der Praxis sind aber einige positive Effekte feststellbar.

So benutzt das ext2 System beispielsweise bis zu 12 direkte Datenblockadressen, es hat noch ein zusätzliches Datumsfeld für das Datum des Löschens der Datei (für später zu entwickelnde Undelete-Funktion) und es bietet weitere Attribute, die hier nicht genauer dargestellt werden sollen weil das den allgemeinen Unix-Rahmen dieses Kurses sprengen würde.

Der Superblock

Ein Unix-Dateisystem besitzt einen sogenannten Superblock, einen Block, der die grundlegenden Informationen zum Dateisystem selbst enthält. Einige wichtige Daten des Superblocks sind:

  • Die Größe des Dateisystems in Blöcken
  • Die Größe der Blöcke in Bytes
  • Zeiger auf den ersten freien Datenblock
  • Zeiger auf erste freie I-Node
  • Verschiedene Statusbits (Flags)

Auch hier unterscheiden sich die verschiedenen Unix-Dateisysteme voneinander, was an zusätzlichen Informationen im Superblock gespeichert ist. Das wesentliche an dieser Struktur ist, daß der Superblock beim Mounten eines Dateisystems in den Speicher gelesen wird und alle Veränderungen dort vorgenommen werden. Erst beim Wiederabhängen des Dateisystems werden diese Veränderungen physikalisch auf der Platte gespeichert. Das erklärt auch, daß es nach einem Systemabsturz zu Inkonsistenzen in einem Dateisystem kommen kann.

Noch vor dem Superblock steht der sogenannte Bootblock auf der Platte, der in etwa dem Bootsektor der DOS-Partitionen entspricht. Zusammengefasst kann man also ein Unix-Dateisystem etwa wie folgt darstellen:

Anzeigen von INODE unter Linux

Wenn der Speicherplatz ausgeht, liegt es nicht immer an den großen Files, sondern einfach nur das es keine freie INODE mehr gibt. Mit den folgenden Befehlen hat man eine Übersicht von den verbrauchten INODE:

df – i – Zeigt den aktuell belegten Inodes im System an. Inkl. dem Dateisystem.
Beispiel Ausgabe:

  df -i
Dateisystem       Inodes IBenutzt     IFrei IUse% Eingehängt auf
tmpfs            4067557     1930   4065627    1% /run
/dev/nvme0n1p2  31227904   676444  30551460    3% /
tmpfs            4067557       59   4067498    1% /dev/shm
tmpfs            4067557        5   4067552    1% /run/lock
/dev/nvme0n1p1         0        0         0     - /boot/efi
/dev/sdb1       62513152   566708  61946444    1% /home/name/daten
/dev/sda1      244195328  7113688 237081640    3% /backup
tmpfs             813511      227    813284    1% /run/user/1000

ls -i – Zeigt die spezifische Inodes Nummer einer Datei an

Beispiel Ausgabe:

  ls -i index.html
21262589 index.html

Auswirkungen wenn nur noch wenige INODE zu Verfügung stehen

Jedes System hat nur eine begrenzte Anzahl von Inodes. Wenn das System an die Grenzen kommt und somit nicht mehr ausreichen Inodes zuverfügung steht, merkt man es sich das System seltsam verhält.

  • Programme starten nicht mehr oder beendet sich einfach
  • neue Daten können nicht mehr gespeichert werden
  • Dienste werden beendet oder werden neugestartet

Schreibe einen Kommentar