Das Dateisystem Ext3 tunen

Seite 6: "Ext2 und Ext3"

Inhaltsverzeichnis

Der wesentliche Unterschied zwischen Ext2 und Ext3 ist das bereits erwähnte Journal. Die Idee dahinter ist simpel: Eine Änderung im Dateisystem, etwa das Anlegen einer neuen Datei, wirkt sich an vielen Stellen aus – es werden ein neuer Verzeichniseintrag und ein neuer Inode angelegt, Datenblöcke und Inode in der Block- und Inode-Bitmap als reserviert markiert, im Inode des Verzeichnisses ändert sich die letzte Zugriffszeit, die Dateisystemstatistiken im Superblock werden aktualisiert und die Daten selbst geschrieben. Fällt zwischen diesen diversen Schreibzugriffen in unterschiedlichen Datenstrukturen der Strom aus oder stürzt das System ab, ist das Dateisystem inkonsistent – es existiert etwa ein Inode ohne den zugehörigen Verzeichniseintrag (Stichwort lost+found).

Um das verhindern, schreibt Ext3 die Änderungen zunächst in sein Journal. Bis zu dem Zeitpunkt, an dem alle zusammengehörenden Änderungen (eine Transaktion) im Journal stehen, sind die (alten) Metadaten im Dateisystem konsistent. Ist die Transaktion vollständig, sind die (neuen) Metadaten im Journal konsistent und können bei passender Gelegenheit ins Dateisystem überspielt werden. Im Falle eines Crashs muss e2fsck lediglich die vollständigen Transaktionen im Journal erneut ins Dateisystem spielen, um die Konsistenz herzustellen. Unvollständige Transaktionen im Journal bleiben unberücksichtigt, hier sind ja noch die (alten) Daten im Dateisystem gültig.

Ext3 kennt verschiedene Betriebsmodi des Journals, die sich beim Mounten über

mount -o data=MODUS

auswählen lassen. Der Default-Modus ist ordered: Hier schreibt Ext3 zunächst die Daten auf die Platte, bevor die geänderten Metadaten im Journal landen. Das garantiert lediglich die Konsistenz der Metadaten: Stürzt der Rechner ab oder fällt der Strom aus, bevor die Transaktion im Journal abgeschlossen ist, sind die bereits geschriebenen Daten verloren, da neu belegte Blöcke noch nicht ihrem Inode zugeordnet und in der Block-Bitmap als belegt markiert sind.

Mit data=journal wandern auch die Daten selbst durch das Journal, was die Performance des Dateisystems drastisch senkt – schließlich müssen alle Daten zweimal auf die Platte geschrieben werden. Im Modus writeback können die Metadaten im Journal vor den Daten geschrieben werden. Das kann die Performance etwas erhören, da Ext3 so die Schreibzugriffe besser optimieren kann; allerdings können im Falle eines Crashs in scheinbar neu angelegten Dateien alte Daten auftauchen und vermeintlich korrekt angelegte Dateien leer sein.

Um die Performance zu beschleunigen, ist es möglich, das Journal auf einer anderen Platte abzulegen als das Dateisystem – so sind gleichzeitige Zugriffe im Dateisystem und im Journal möglich. Dazu ist zunächst mit

mke2fs -O journal_dev DEVICE

das externe Journal anzulegen und anschließend

mke2fs -J device=DEVICE

aufzurufen.

Es gibt einen weiteren Unterschied zwischen Ext2 und Ext3: Die beiden Dateisysteme verhalten sich beim Löschen von Dateien unterschiedlich. Während Ext2 lediglich im Inode die Deletion Time setzt (und Datenblöcke und Inode in der Block- und Inode-Bitmap als frei markiert), löscht Ext3 zusätzlich die Blocknummern im Inode. Das macht es leichter, das Dateisystem nach einem Crash in einen konsistenten Zustand zu bringen, führt aber auch dazu, dass Programme zum Wiederherstellen gelöschter Dateien auf Ext2 (der Befehl lsdel in debugfs und spezielle Undelete-Tools) mit Ext3 nicht mehr funktionieren.