Inhaltsverzeichnis
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