Dateisysteme mit Journal erleichtern den Umgang mit Linux: Stürzt der Rechner ab, muss man beim Neustart nicht die langwierige Überprüfung der Dateisysteme mit “fsck” abwarten. Wir helfen bei der Umstellung auf Ext3fs und zeigen auch den Weg zurück.
Vor kurzem wurde der Code für das Journaling Filesystem Ext3fs fest in die offiziellen Kernel-Sourcen übernommen – ein Grund mehr, den Nachfolger vom Ext2fs etwas genauer unter die Lupe zu nehmen. Bevor wir uns mit Ext3fs genauer beschäftigen, soll zunächst geklärt werden, welche Bedeutung Dateisysteme haben und welche Probleme auftreten können.
Arbeitsweise
Als Dateisystem wird ein Standard bezeichnet, der angibt, wie Daten auf einem Datenträger abgelegt und später wieder gefunden werden können. Die Frage ist dabei, wie die Speicherung technisch realisiert wird, wie dem Computer also gesagt wird, dass an einer bestimmten Position auf dem Datenträger eine bestimmte Datei liegt.
Linux’ bisheriges Standard-Dateisystem Ext2fs besteht im Inneren aus einer Struktur aus “Metadaten”; diese beinhalten neben dem Superblock, welcher Informationen über freien Speicherplatz auf dem Datenträger bereithält, auch die sogenannten “Inodes”, die Eigenschaften (Zugriffsrechte, Datei-Attribute, Eigentümer usw.) der einzelnen Dateien im System speichern. In den “Inodes” wird auch der physikalische Ort jeder Datei auf einem Laufwerk gespeichert. So wird ein Überschreiben von Daten verhindert. Ein Dateisystem erlaubt es also, den verfügbaren Speicherplatz eines Datenträgers logisch zu verwalten.
Probleme
Wenn ein Dateisystem unsachgemäß behandelt wird, endet dies häufig in Beschädigungen der Daten (“Daten-Korruption”). Hier unterscheidet man zwischen zwei Typen:
- Beschädigung von einzelnen Dateien im System
- Beschädigung der Metadaten Beschädigungen an Dateien im System können z. B. entstehen, wenn ein Benutzer an einem Dokument arbeitet und unerwartet der Strom ausfällt. Wurde das Dokument vorher nicht gespeichert, gehen die letzten Änderungen verloren; ansonsten gibt es jedoch keine Auswirkungen. Ein Problem kann aber dann entstehen, wenn der Strom genau in dem Moment ausfällt, in dem die Datei geschrieben wird: Das Dateisystem befindet sich in einem “undefinierten” Zustand. Die Datei ist nur unvollständig gespeichert worden und ist damit möglicherweise gar nicht mehr lesbar.
Wirklich gefährlich wird es erst, wenn bei einem Absturz neben einzelnen Dateien auch die Metadaten des Dateisystems beschädigt werden. Der Benutzer kommt mit den Metadaten zwar normalerweise nicht direkt in Kontakt – sie werden nur von Programmen wie chown und chmod verändert. Dennoch kann eine Beschädigung der Metadaten fatale Folgen haben – im schlimmsten Falle können (System-) Programme mit den gefundenen Daten nichts mehr anfangen, so dass das gesamte System unbenutzbar wird.
Um Daten-Korruption vorzubeugen oder bereits beschädigte Daten zu reparieren, bringt jedes Dateisystem ein Check-Tool (fsck, “filesystem check”) mit sich (siehe Tabelle “Dateisysteme und ihre Check-Tools”). Dieses wird vor jedem Mountender Partition gestartet, um Fehler aufzuspüren und zu beheben.
Dateisysteme und ihre Check-Tools
| Ext2fs | e2fsck oder fsck.ext2 |
| Ext3fs | fsck.ext2 oder fsck.ext3 |
| ReiserFS | reiserfsck |
| XFS | xfs_repair |
| JFS | fsck.jfs |
Dateisystem-Check mit e2fsck
# e2fsck -f /dev/sda6 e2fsck 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09 Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/sda6: 14624/128768 files (5.1% non-contiguous), 67124/257032 blocks
Journaling Filesystems im Überblick
Als Alan Cox 1999 in einem Interview der Zeitschrift c’t [1] gefragt wurde, was seiner Meinung nach Linux bis dato am meisten fehle, gab er zur Antwort: “Im Moment ist das wohl ein Journaling Filesystem”. Und heute? Wir schreiben das Jahr 2002, ReiserFS [2] und Ext3fs sind als Vertreter der Journaling-Filesystem-Spezies fest in die Kernel-Sourcen integriert. Auch SGI und IBM haben mit XFS [3] und JFS [6] mittlerweile Journaling Filesystems für Linux zugänglich gemacht. Doch was genau unterscheidet ein Dateisystem wie Ext3fs von einem Dateisystem ohne Journal wie etwa Ext2fs?
Dateisysteme, die nicht korrekt vom System abgemeldet (sprich “unmounted”) werden, werden vor dem nächsten Mounten wie oben beschrieben auf Fehler überprüft, so dass korrupte Dateien repariert werden können. Da e2fsck jede Datei im System gründlichst unter die Lupe nimmt, kann ein solcher Check bei großen Partitionen sehr lange dauern. An diesem Punkt setzen die Journaling Filesystems an: Zu jedem führt das Betriebssystem ein Journal, in das alle Dateien eingetragen werden, die zum jeweils aktuellen Zeitpunkt geöffnet sind. Wenn nun ein Laufwerk nicht ordentlich vom System abgemeldet wird, liest das Dateisystem vor dem nächsten Mounten das Journal ein und überprüft nur die dort eingetragenen Dateien auf ihre Konsistenz und Integrität. Dies geht wesentlich schneller als ein Check des gesamten Dateisystems. So entfällt die lästige Wartezeit beim Neustart nach einem Absturz oder Stromausfall.
Es sei noch darauf hingewiesen, dass ein Dateisystem mit Journal keineswegs als Backup-Alternative verstanden werden sollte: Journaling Filesystems sorgen lediglich dafür, dass der Rechner nach einem Absturz schneller wieder auf die Beine kommt, sind aber nicht immun gegen Daten-Korruption. Ein ausgereiftes Dateisystem-Check-Tool ist also auch bei Journaling Filesystems unerlässlich.
Ext3fs
Ext3fs ist der direkte Nachfolger vom Ext2fs, dem “second extended file system”. Dieses ist seit langem das Standard-Dateisystem für Linux und wird von allen Distributionen standardmäßig unterstützt. Da Ext2fs kein Journaling bietet, hat sich Stephen Tweedie daran gemacht, eine Journal-Erweiterung für Ext2fs zu programmieren; das Ergebnis der Bemühungen ist Ext3fs. Ext3fs ist also kein völlig neues, unerprobtes Dateisystem, sondern die Ergänzung von Ext2fs um einen Journal-Treiber. Das bedeutet für Ext3fs einen großen Vorteil gegenüber anderen Journaling Filesystems: Ext3fs ist zu Ext2fs vollständig auf- und abwärtskompatibel. Das heißt, dass es möglich ist, eine Ext2fs-Partition “on the fly” auf Ext3 umzustellen und diesen Schritt auch unkompliziert wieder rückgängig zu machen. Es bedeutet außerdem, dass sich eine Ext3fs-Partition als Ext2fs-Dateisystem mounten lässt, was unter Umständen sehr nützlich sein kann, wenn man sein System (etwa zu Wartungszwecken oder bei Überschreiben des Boot-Sektors) von einer Boot-Diskette ohne Ext3fs-Support starten muss. Ein dritter Vorteil ist, dass Ext3fs aufgrund der Abwärtskompabilität das Dateisystem-Check-Tool e2fsck von Ext2fs benutzen kann. Damit verfügt Ext3fs von Anfang an über ein praxiserprobtes und äußerst zuverlässiges Dateisystem-Check-Programm, auf welches man bei anderen Journaling Filesystems lange Zeit warten musste. Aus diesen Gründen wird sich dieser Artikel nur mit Ext3fs und dessen Konfiguration beschäftigen.
Schritt 1: Vorbereitungen
Angenommen, Sie haben eine 40 GByte große Festplatte /dev/hda, die in zwei Partitionen unterteilt ist: /dev/hda1 und /dev/hda2. /dev/hda2 sei ein Ext2fs-Dateisystem, welches ihr Root-Dateisystem (“/”) enthält. Welches Dateisystem Ihr aktuelles Linux-System benutzt, können Sie über das Kommando mount überprüfen:
$ mount /dev/hda2 on / type ext2 (rw,errors=remount-ro) proc on /proc type proc (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620)
Die Einträge für proc und devpts sind uninteressant, wichtig ist lediglich der Eintrag, der verrät, dass / ein Ext2fs-Dateisystem enthält. /dev/hda2 soll nun auf Ext3fs umgestellt werden. Dazu müssen Sie zunächst überprüfen, ob der laufende Kernel Ext3fs unterstützt. Dies stellen Sie sicher, indem Sie auf der Konsole das Kommando
cat /proc/filesystems
ausführen. Wenn bei der Ausgabe dieses Kommandos eine Zeile “ext3” erscheint, ist Ihr Kernel für den Einsatz mit Ext3fs gerüstet, und Sie können mit Schritt 3 fortfahren; ansonsten geht es weiter zu Schritt 2.
Schritt 2: Ein neuer Kernel
Kennt der laufende Kernel Ext3fs noch nicht, muss ein neuer Kernel erzeugt werden. Verwenden Sie hierzu die Sourcen des aktuellen Linux-Kernels 2.4.17 (auf der Heft-CD im Verzeichnis LinuxUser/kernel/). Sollte es bei Erscheinen dieser Ausgabe bereits eine neuere Version geben, können Sie diese mit wget (einem Download-Manager, der bei den meisten Distributionen zum Standard-Repertoire gehört) von [5] herunterladen. Konfigurieren und kompilieren Sie den Kernel danach, wie beispielsweise in der Anleitung im LinuxUser 03/2001 auf Seite 86 beschrieben. Wichtig ist hierbei, dass Sie den Eintrag Prompt for development and/or incomplete code/drivers unter Code maturity level options und den Eintrag Ext3 journalling file system support (EXPERIMENTAL) unter File systems aktivieren. Konfigurieren Sie Ext3fs-Support nicht als Modul – schließlich kann der Kernel Module erst laden, wenn das Root-Dateisystem gemountet ist. Benutzer von Debian Potato sollten sich auch [4] genauer ansehen.
Schritt 3: Die Umstellung
Achtung! Sichern Sie Ihre Daten, bevor Sie Veränderungen am Dateisystem vornehmen! Nachdem Sie sichergestellt haben, dass Ihr Kernel mit dem Ext3fs-Dateisystem umgehen kann, können Sie mit der Umstellung von /dev/hda2 auf Ext3fs beginnen. Um das Journal auf der Partition mit dem Root-Dateisystem zu initialisieren, benötigen Sie eine aktuelle Version des Programms tune2fs. Es gehört zum Paket e2fsprogs und wird somit bei jeder aktuellen Distribution standardmäßig mitinstalliert. Benutzer von Debian Potato müssen sich eine aktuelle Version von tune2fs besorgen – die Version in Potato beherrscht die Option “-j” noch nicht. Sourcen der e2fsprogs-Version 1.26 finden sich auch auf der Heft-CD im Verzeichnis LinuxUser/kernel/. Um das Dateisystem auf der /-Partition von Ext2fs auf Ext3fs umzustellen, wechseln Sie zunächst in den sogenannten “Single User Mode”. Dieser dient dem Administrator root zum Durchführen von Wartungsarbeiten am System, die während des normalen Betriebs nicht machbar wären:
init 1
Legen Sie nun das Journal auf dem Root-Dateisystem an:
tune2fs -j /dev/hda2
Ob dies geklappt hat, sehen Sie an einer Meldung wie dieser:
<0>minerva[1002]:~# tune2fs -j /dev/hda2 tune2fs 1.25 (20-Sep-2001) Creating journal inode: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
Schritt 4: Abschließende Maßnahmen
Nachdem das Journal der /-Partition initialisiert wurde, müssen noch einige Dinge erledigt werden, damit Sie die Vorzüge vom Ext3fs genießen können. Zuerst müssen Sie die Datei /etc/fstab editieren. Dort sollte ein Eintrag zu finden sein, der so ähnlich wie dieser aussieht:
/dev/hda2 / ext2 defaults,errors=remount-ro 0 1
/dev/hda2 bezeichnet den Namen des Laufwerks, / den Mountpoint und ext2 den Dateisystemtyp; im vierten Feld werden die Optionen angegeben, mit denen das Laufwerk gemountet wird, die vorletzte Zahl ist für das Filesystem-Tool dump gedacht (hier uninteressant), und die letzte Zahl gibt an, in welcher Reihenfolge die Dateisysteme von fsck “abgearbeitet” werden. Für eine Benutzung mit Ext3fs müssen Sie diese Zeile wie folgt ändern:
/dev/hda2 / auto defaults,errors=remount-ro 0 1
Als Dateisystemtyp wird hier “auto” verwendet, damit es möglich bleibt, das Dateisystem mit Kerneln zu mounten, die nur mit dem Ext2-Dateisystem umgehen können. Unter normalen Bedingungen wird der Kernel, sofern er für die Benutzung mit Ext3fs konfiguriert ist, das Dateisystem immer als solches erkennen und entsprechend mounten.
Ein Feature vom Ext2fs ist es, dass es fsck nach 180 Tagen oder nach jedem 20. Mount-Vorgang automatisch veranlasst, das Dateisystem auf seine Konsistenz zu überprüfen. Dieser Mechanismus sollte bei einem Ext3-Dateisystem zwar nicht völlig deaktiviert werden, Sie können den zeitlichen Abstand zwischen den einzelnen Checks jedoch deutlich hochsetzen. Verwenden Sie dazu den folgenden Befehl:
tune2fs -i 180 -c 40 /dev/hda2
Nachdem Sie alle oben genannten Schritte erledigt haben, wird noch ein Neustart des Rechners mittels reboot fällig. Dabei sollte der Kernel das Dateisystem / dann als Ext3fs mounten – ob dies geklappt hat, sehen Sie an einer Boot-Meldung der folgenden Form:
EXT3 FS 2.4-0.9.17, 10 Jan 2002 on ide0(3,1), internal journal EXT3-fs: mounted filesystem with ordered data mode. kjournald starting. Commit interval 5 seconds
Das Journal wieder loswerden
Sollte Ihnen Ext3fs nicht zusagen, so ist es problemlos möglich, wieder auf Ext2fs umzusteigen: Um ein Downgrade zu bewerkstelligen, müssen Sie die Schritte analog zur Umstellung von Ext2fs auf Ext3fs ausführen, jedoch in umgekehrter Reihenfolge.
Setzen Sie zuerst die Werte für den automatischen Dateisystem-Check wieder auf die Standardwerte zurück:
tune2fs -c 20 -i 180
Ändern Sie dann die Einträge in der Datei /etc/fstab auf Ext2fs zurück: Aus
/dev/hda2 / auto defaults,errors=remount-ro 0 1
wird wieder
/dev/hda2 / ext2 defaults,errors=remount-ro 0 1
Wechseln Sie mit init 1 in den Single User Mode und beenden Sie mit killall5 alle laufenden Prozesse:
/sbin/killall5 -15 /sbin/killall5 -9
Mounten Sie als nächstes das Root-Dateisystem “read-only”, also so, dass das Dateisystem nur gelesen und nicht geschrieben werden darf; es können dann keine neuen Dateien mehr angelegt werden, und bestehende Dateien können nicht verändert werden. Der nötige Befehl ist:
mount -o remount,ro /
Nun können Sie das Journal-Flag vom Ext3fs-Dateisystem entfernen und es so wieder zu einem Ext2fs-System machen:
tune2fs -O^has_journal /dev/hda2
Als letztes wird noch ein Neustart des Rechners fällig. Danach sollte der Kernel / wieder als Ext2fs-Dateisystem mounten.
Glossar
-
Mounten
-
Als Mounten bezeichnet man das Einhängen eines Datenträgers in die Linux-Verzeichnis-Hierarchie. Die Umkehr des Mounten, also das Aushängen eines Datenträgers aus der Hierarchie, bezeichnet man als Unmounten.
-
Mountpoint
-
Als Mountpoint wird eine Stelle in einem Linux-Dateibaum bezeichnet, an der ein Dateisystem (z. B. Festplatten-Partition, Diskette, CD-ROM) in das Linux-System eingebunden wird.
Infos
[1] http://www.heise.de/ct/99/25/034/: Interview der c’t mit Alan Cox
[2] http://www.ReiserFS.org: Die Projektpage von ReiserFS
[3] http://oss.sgi.com/projects/xfs: SGIs XFS
[4] http://www.fs.tum.de/~bunk/kernel-24.html: Linux 2.4 unter Debian GNU/Linux 2.2 (Potato)
[5] http://ftp2.de.kernel.org/pub/linux/kernel/v2.4/linux-2.4.17.tar.gz: Linux-Kernel 2.4.17
[6] http://oss.software.ibm.com/developerworks/opensource/jfs/: IBMs JFS





