Das Dateisystem Ext3 tunen

Seite 4: "Superblock, e2fsck-Tricks"

Inhaltsverzeichnis

Die letzte Ext3-Datenstruktur ist der Superblock, der das Dateisystem selbst beschreibt. Er enthält alle Informationen, die zur korrekten Interpretation der Daten im Dateisystem nötig sind: Blockgröße, Anzahl der Blöcke und Inodes, Blockgruppen, Inode-Größe, erster gültiger Inode (einige Inodes sind für interne Zwecke reserviert, beispielsweise der Inode 2 für das Root-Verzeichnis und der Inode 8 bei Ext3 für das Journal). Alle diese Informationen (und noch einige mehr) geben das debugfs-Kommando stats und der Befehl dumpe2fs -h aus.

Die als reserviert bezeichneten Blöcke (standardmäßig fünf Prozent aller Blöcke, änderbar über den mke2fs-Parameter -m) darf nur root belegen; das soll sicherstellen, dass dem System noch ein wenig Luft zum Leben bleibt, falls ein User das Dateisystem komplett volllaufen lässt.

Außerdem speichert der Superblock Statusinformationen, etwa, wie viele Inodes und Blöcke noch frei sind, wann das Dateisystem zuletzt gemountet und wann es zuletzt von e2fsck überpüft wurde, sowie den aktuellen Zustand (clean, wenn alles in Ordnung ist). Hier finden sich auch die ungeliebten Einstellungen, die dafür sorgen, dass immer dann ein Dateisystemcheck läuft, wenn man „mal eben schnell“ booten muss. Ext3 speichert sowohl eine maximale Anzahl an Mount-Vorgängen als auch einen maximalen zeitlichen Abstand seit dem letzten e2fsck-Lauf. Wenn einer dieser Werte erreicht ist, wird zwangsüberprüft. Bei Rechnern, die häufig gebootet werden, kann man diese Werte getrost hochsetzen:

tune2fs -c 100 -i 180

erlaubt 100 Mount-Vorgänge oder ein halbes Jahr zwischen zwei e2fsck-Läufen. Werte von 0 schalten den automatischen Test komplett ab. Der überall zu lesende Rat, das Feature auf keinen Fall abzuschalten, ist zwar nicht grundsätzlich falsch, allerdings längst nicht mehr so wichtig: Plattendefekte findet man schneller mit den smartmontools, die das Befinden der Platte direkt abfragen; die Zeiten von Kernel-Bugs, die das Dateisystem korrumpieren, sind vorbei; und Probleme im Speicher oder Chipsatz dürfte man an anderer Stelle schneller merken als an beschädigten Ext3-Datenstrukturen.

Da der Superblock für den Zugriff auf das Dateisystem unverzichtbar ist, schreibt ihn mke2fs sicherheitshalber mehrfach auf die Platte. Sollte e2fsck bei einem beschädigten Dateisystem wegen eines kaputten Superblocks die Arbeit verweigern, kann man das Tool anweisen, einen der Reserve-Superblocks zu verwenden:

e2fsck -b Superblock

mke2fs gibt die Blocknummern der alternativen Superblocks nach dem Anlegen des Dateisystems aus, aber wer hat die im Fall der Fälle schon notiert? Hier hilft eine nützliche Option von mke2fs weiter:

mke2fs -n Device

tut lediglich so, als würde es das Dateisystem neu anlegen, gibt aber alle seine Parameter – darunter auch die Position der Superblocks – aus. Das funktioniert natürlich nur, wenn man mke2fs mit denselben Optionen aufruft wie damals, als das Dateisystem angelegt wurde. Aber im Normalfall muss man dem Formatierer ja überhaupt keine Optionen mitgeben – mke2fs wählt selbst Werte, die für die meisten Anwendungsfälle passen.

Für den Super-GAU hält mke2fs noch die Option -S bereit – damit werden lediglich die Superblöcke und die Blockgruppendeskriptoren neu geschrieben, während Directories, Inode- und Bitmap-Tabellen erhalten bleiben. Danach ist ein e2fsck-Lauf erforderlich. Im Idealfall findet man anschließend alle Dateien wieder, eine Garantie gibt es jedoch nicht – schlimmstenfalls sind trotzdem alle Daten verloren. Natürlich muss auch mke2fs -S mit exakt den gleichen Optionen aufgerufen werden wie beim Anlegen des Dateisystems.

Der Superblock kann noch mehr Informationen speichern: beispielsweise Mount-Optionen, die immer beim Einbinden des Dateisystems gelten sollen, auch wenn sie nicht explizit angegeben werden. Mit

tune2fs -o acl

beispielsweise sorgt man dafür, dass das Dateisystem immer mit Unterstützung für Access Control Lists (ACLs) gemountet wird (siehe c't 23/03, S. 218) Auch der Name des Dateisystems (volume name), den manche Distributionen in /etc/fstab verwenden, ist im Superblock gespeichert und lässt sich über den Parameter -L nachträglich mit tune2fs oder bereits beim Anlegen des Dateisystems mit mke2fs setzen.

Die „Filesystem features“ legen diverse Eigenschaften des Dateisystems fest – ob es auf Fehler überprüft werden muss (needs_recovery, das Flag wird beim Mounten gesetzt und beim Aushängen gelöscht, sodass es anzeigt, ob das Dateisystem sauber ausgehängt wurde); ob sich das Dateisystem noch mit resize2fs weiter vergrößern lässt (resize_inode); ob es Dateien über 2 GByte Größe unterstützt (large_file); ob nur eine begrenzte Anzahl an Reserve-Superlocks angelegt wurde (sparse_super); ob der Verzeichniseintrag Informationen über die Art der Datei enthalten soll (filetype); ob Verzeichniseinträge in Baumstrukturen gespeichert werden sollen (dir_index). Einige dieser Eigenschaften lassen sich über tune2fs -O verändern (ein vorangestelltes ^ schaltet ein gesetztes Feature ab); dem sollte sicherheitshalber ein mit der Option -f erzwungener e2fsck-Lauf folgen. Am besten legt man diese Features aber bereits über mke2fs -O beim Anlegen des Dateisystems fest.

Welche Fatures mke2fs standardmäßig setzt, liest das Programm aus der Datei /etc/mke2fs.conf. Bei den meisten Distributionen sind sparse_super, filetype, resize_inode und dir_index vorgegeben. Sofern das Betriebssystem große Dateien unterstützt, setzt mke2fs auch das Feature large_file.