Dateisysteme verarzten mit E2fsprogs

Aus LinuxUser 04/2009

Dateisysteme verarzten mit E2fsprogs

© Gernot Krautberger, Fotolia

Inode in Not

Mit den richtigen Werkzeugen fühlen Sie Ihrem Dateisystem auf den Zahn, beseitigen Inkonsistenzen und restaurieren beschädigte Dateien.

Dateisysteme verhalten sich in freier Wildbahn eher unauffällig. Sie rücken schlagartig erst dann in den Fokus des Benutzers, wenn sie den Geist aufgeben, beim Booten plötzlich stundenlange Selbsttests durchführen oder den Bootvorgang abbrechen. Einsteiger glauben dann mitunter, ihr Rechner sei gerade dabei, sich selbst zu zerstören – dabei gelten diese Checks als Features und nicht als Bugs (und man kann sie abstellen bzw. ihren Turnus ändern).

Zunächst stellt sich die Frage, wie inkonsistente Dateisysteme überhaupt entstehen. Das von den großen Linux-Distributionen (OpenSuse, Ubuntu, Debian) verwendete Dateisystem Ext3 bringt eine Funktion namens Journaling mit. Die Systeme führen quasi Buch über ihre Transaktionen. Die bestehen aus mehreren Schritten, die zusammenhängen: Beim Anlegen einer Datei werden neue Inodes angelegt, Verzeichnisse zugeordnet, Blöcke auf der Festplatte reserviert, Metadaten geschrieben und einiges mehr. Erst nach dem Abschluss dieser Schritte schreibt Ext3 die Daten vom Journal in das Dateisystem.

Kann Ext3 einen solchen Zyklus nicht abschließen, weil jemand zum Beispiel spontan die Stromversorgung des Rechners kappt, schreibt es die Änderungen später noch einmal vom Journal auf die Platte. So gelangen keine inkonsistenten Daten auf die Festplatte. Zur Pflege des Dateisystems prüfen Distributionen wie Ubuntu und Debian regelmäßig die Konsistenz des Dateisystems. Opensuse verzichtet darauf, überprüft aber bei jedem Bootvorgang ein bestimmtes Flag. Signalisiert das ein nicht korrekt heruntergefahrenes System, startet automatisch eine Dateisystemprüfung via Fsck.

Im Zweifelsfall können Sie eine Wartung aber auch manuell erzwingen, wenn Sie nicht sicher sind, ob das Dateisystem konsistent ist. Standardmäßig hängt Ubuntu 8.10 Dateisysteme beim Auftreten eines Fehlers im Lesemodus ein. Das bewirkt die Option error=remount-ro in der Datei /etc/fstab. Unter Opensuse 11 fährt das Betriebssystem hingegen im Fehlerfall mit dem Mounten fort.

TIPP

Überprüft Ihr Linux bei jedem Booten ausführlich das Dateisystem, trägt daran nicht selten ein falscher Eintrag in der Datei /etc/fstab Schuld. Wenn sich das dort angegebene Dateisystem nicht mounten lässt, startet die Überprüfung automatisch.

Wartungszyklus

Ubuntu 8.10 überprüft das Dateisystem standardmäßig nach 32 Neustarts oder spätestens nach einem halben Jahr, falls der Rechner ständig oder sehr selten läuft. Um vorab nachzusehen, wann es wieder einmal soweit ist, öffnen Sie eine Konsole und geben mount ein. So stellen Sie erstmal fest, welche Partition Sie gerade nutzen. Auf ihr befindet sich auch das Root-Dateisystem (Listing 1). Befindet sich Ihr Home-Verzeichnis auf einer eingehängten externen Partition, verrät Ihnen der Befehl auch, wie diese heißt.

Listing 1
$ mount
/dev/sda6 on / type ext3 (rw,relatime,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
/sys on /sys type sysfs (rw,noexec,nosuid,nodev)
varrun on /var/run type tmpfs (rw,noexec,nosuid,nodev,mode=0755)
varlock on /var/lock type tmpfs (rw,noexec,nosuid,nodev,mode=1777)
udev on /dev type tmpfs (rw,mode=0755)
devshm on /dev/shm type tmpfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
lrm on /lib/modules/2.6.24-23-generic/volatile type tmpfs (rw)
/dev/sda7 on /home/public type ext3 (rw,relatime)
securityfs on /sys/kernel/security type securityfs (rw)

Ihre Root-Partition (/) befindet sich vermutlich unter /dev/sdXN, wobei das X für einen zusätzlichen Buchstaben, das N für eine Ziffer steht. Die Partition heißt also beispielsweise sda6 oder sdb4. Wir gehen in den folgenden Beispielen davon aus, dass Ihre Root-Partition auf /dev/sda6 liegt. Geben Sie nun tune2fs -l /dev/sda6 ein, so erhalten Sie als Ausgabe die Informationen im Superblock Ihrer Festplatte (Listing 2).

Tune2fs führen Sie sowohl unter Opensuse als auch unter Ubuntu stets mit Root-Rechten aus. Das Programm gehört zu den E2fsprogs (http://e2fsprogs.sf.net), einer Sammlung von Werkzeugen, die bei der Pflege und Verwaltung des Dateisystems helfen. Das gesuchte Intervall für die Dateisystemprüfung (Check interval) zeigt Listing 2, das aber nur für Ubuntu 8.10 gilt.

Listing 2
# tune2fs -l /dev/sda6
tune2fs 1.40.8 (13-Mar-2008)
Filesystem volume name:   <none>
Last mounted on:          <not available>
[…]
Mount count:              30
Maximum mount count:      32
Last checked:             Sat Jan 31 22:36:57 2009
Check interval:           15552000 (6 months)
Next check after:         Thu Jul 30 23:36:57 2009
[…]

Das Check interval verrät, dass Ubuntu die Festplatte alle 6 Monate (der Wert davor gibt die entsprechende Sekundenzahl an) überprüft. Alternativ wartet die Distribution bis zum 32. Mountvorgang, bevor sie einen Check beginnt (Maximum mount count). Die Angabe hinter Mount count verrät, dass das Dateisystem bis jetzt 30 mal gemountet wurde (die Zahl kann bei Ihnen abweichen). Bei Opensuse lesen Sie an dieser Stelle andere Werte (Listing 3): Es gibt weder ein Prüfintervall, noch eine maximale Anzahl an Mounts, nach der Opensuse das Dateisystem überprüft.

Listing 3
[…]
Mount count:              16
Maximum mount count:      -1
Last checked:             Sat Jan 31 22:36:57 2009
Check interval:           0 (none)
[…]

Wollen Sie nun das Dateisystem beim nächsten Booten prüfen, geben Sie unter Ubuntu tune2fs -C 32 /dev/sda6 ein. Damit setzen Sie den Wert für Mount count auf 32 und erreichen so die maximale Anzahl an Mount-Vorgängen. Nach dem Neustart unterbricht Ubuntu den Bootvorgang: Unter dem Bootsplash erscheinen die folgenden zwei Zeilen, wobei YY% den Fortschritt des Konsistenzchecks zeigt.

Routine check of drives: /dev/sda6 YY%
Press ESC to skip

Mit [Esc] überspringen Sie die Prüfung bei Bedarf: Gemäß Murphy’s Law treten die Routinechecks besonders gern genau dann auf, wenn Sie gerade vor vollem Saal eine Präsentation zeigen wollen.

Bei Opensuse setzen Sie zunächst über tune2fs -c 32 /dev/sda6 die maximale Mount-Anzahl auf 32 und forcieren über tune2fs -C 32 /dev/sda6 einen Check beim nächsten Booten. Opensuse 11 verzichtet dann auf den Bootsplash und zeigt den Fortschritt auf der Kommandozeile an. Mit [Strg]+[C] unterbrechen Sie den Prozess.

Reparatur

Weist das Dateisystem tatsächlich Fehler auf, kommt e2fsck zum Einsatz. Diesen Reparaturbefehl dürfen Sie nicht auf ein eingehängtes Root-Dateisystem anwenden, das Sie sonst stark beschädigen könnten. Daher booten Sie den Rechner von einer Live-CD (etwa Ihrer Opensuse- oder Ubuntu-Installations-CD/DVD). Nach dem Hochfahren öffnen Sie eine Konsole und geben folgenden Befehl ein:

$ sudo e2fsck -C0 -p -f -v /dev/sda6

Die Zeile handelt einen Großteil aller Problemfälle bei Konsistenzprüfungen ab. Dank der Option -f überprüfen Sie auch saubere und ausgehängte Dateisysteme, der Schalter -v macht das Kommando redseliger. Über den Parameter -C0 erhalten Sie einen hübschen Fortschrittsbalken für die Aktion, und -p repariert das Dateisystem automatisch und ohne Ihr weiteres Zutun (Abbildung 1).

Abbildung 1: Ein Befehl, sie alle zu prüfen: Mit einer handvoll angehängter Parameter löst E2fsck die meisten auftretenden Inkonsistenzen vollautomatisch auf.

Abbildung 1: Ein Befehl, sie alle zu prüfen: Mit einer handvoll angehängter Parameter löst E2fsck die meisten auftretenden Inkonsistenzen vollautomatisch auf.

Geben Sie zusätzlich die Option -c an, nutzt die Software das Programm badblocks, um per Read-only-Test defekte Blöcke zu identifizieren und zu markieren. Diese kommen quasi in Quarantäne: Das Dateisystem übergibt sie an einen speziellen “Bad Block Inode” und verwendet sie zukünftig nicht mehr. Der Vorgang kann sich etwas hinziehen. Geben Sie die Option -c doppelt an, erfolgt der Badblocks-Test im nicht-destruktiven Lese-/Schreibmodus (Abbildung 2).

Abbildung 2: Per Badblocks-Option identifiziert E2fsck die schlechten Blöcke auf einer Festplatte und stellt sie unter Quarantäne.

Abbildung 2: Per Badblocks-Option identifiziert E2fsck die schlechten Blöcke auf einer Festplatte und stellt sie unter Quarantäne.

Erscheint nach dem oben genannten Befehl die Fehlermeldung Run fsck MANUALLY, müssen Sie stärkere Geschütze auffahren. Der Befehl sudo e2fsck -f -v -y /dev/sda6 legt nicht zuzuordnende Dateien und Verzeichnisse im Ordner /lost+found ab. Das bedeutet unter Umständen, dass es bereits Dateien und Ordner gibt, die sich nicht mehr im Dateisystem befinden: Sie sollten also spätestens jetzt die wichtigsten Daten sichern. Der Schalter -y sorgt dafür, dass Sie nicht jede einzelne Inode-Verschiebung per Tastendruck absegnen müssen. Da das Tool die Namen der verlorenen Dateien nicht rekonstruieren kann, durchforsten Sie lost+found anschließend am besten mit Konqueror oder Nautilus, die Sie mit Root-Rechten aufrufen. Bei der Identifikation von Dateien hilft ansonsten auch der Befehl file.

Superblöcke

Auch zerstörte Superblöcke können Sie retten. Diese verwalten die Metainformationen zu Ihrem Dateisystem, kennen die Größe des Dateisystems in Blöcken, die Größe der Blöcke, den Zeiger auf ersten freien Datenblock und so weiter. Beim Mounten der Festplatte lädt Linux den Superblock in den Arbeitsspeicher, verändert ihn und speichert ihn beim Aushängen wieder auf der Festplatte. Dabei kann es zu Fehlern kommen. Die Fehlermeldung von E2fsck lautet in diesem Fall Bad magic number in super-block ....

Häufig handelt es sich hier jedoch um einen Fehlalarm: Prüfen Sie, ob Sie tatsächlich Ext3 als Dateisystem nutzen (der Befehl mount zeigt type ext3 an) oder ob es Fehler in der Datei /etc/fstab gibt. Letzteres passiert etwa, wenn Sie ein zusätzliches System installiert oder Ihr Betriebssystem erneuert haben. Scheiden solche Probleme und Tippfehler aus, kümmern Sie sich um den Superblock.

Geben Sie – mit Root-Rechten – dumpe2fs -b /dev/sda6 ein. Das Kommando zeigt die Blöcke an, die nicht in Ordnung sind. Gibt es keine davon, ist der Superblock vermutlich nicht beschädigt. Um sämtliche Infos über den Superblock zu erhalten, lassen Sie einfach das -b weg.

Um einen zerstörten Superblock zu reparieren, greifen Sie auf eine Sicherheitskopie desselben zurück. Diese positioniert das Dateisystem an festen Startpositionen, die von der Blockgröße abhängen, die das Dateisystem verwendet (siehe Tabelle “Alternative Superblöcke”). Die Ihres Dateisystems verrät der Befehl tune2fs -l /dev/sda6 | grep "Block size". Über den Befehl

# e2fsck -b Startposition /dev/sda6

weisen Sie E2fsck an, den alternativen Superblock zu verwenden, um das Dateisystem zu reparieren.

Alternative Superblöcke

Blockgröße Startposition des alternativen Superblocks
1 KByte Block 8193
2 KByte Block 16384
4 KByte Block 32768

TIPP

Auch das neue Dateisystem Ext4 lässt sich mit Tune2fs und E2fsck warten. Der Unterschied besteht im wesentlichen darin, dass die Tests noch einmal deutlich schneller ablaufen.

Defragmentieren

Bei der so genannten externen Fragmentierung verteilt das Dateisystem die Blöcke, die zu einer gespeicherten Datei gehören, an verschiedenen physikalischen Orten auf der Festplatte. Um die Datei zu lesen, muss sich der Lesekopf also deutlich mehr bewegen, was den Leseprozess verlangsamen kann. Allerdings steuert Ext3 von sich aus einer Fragmentierung entgegen, indem es vor dem Schreiben möglichst nebeneinander liegende Blöcke alloziert, damit die Datei nicht zerfasert.

Auf dem häuslichen Rechner bereitet Fragmentierung üblicherweise ohnehin keine Probleme; auf Servern oder Rechnern mit großer Speicherkapazität, die permanent große Mengen an Daten schreiben und löschen, sieht das schon anders aus. Dort beeinflusst die Zerfaserung irgendwann die Performance.

Das unter Windows so beliebte Defragmentieren einer Festplatte funktioniert grundsätzlich auch unter Linux. Allerdings gibt es – abgesehen von ein paar veralteten Skripten – kaum Software, um diese Funktion zu verwenden.

Um ein Dateisystem auf Fragmentierung zu überprüfen, geben Sie wieder für ausgehängte Dateisysteme e2fsck -f /dev/sda6 ein. Am Ende der Überprüfung erscheint ein Satz wie 0.6% non-contiguous (Abbildung 3). Der Wert zeigt den Grad der Fragmentierung an – allerdings sehr ungenau. Das Tool bezieht nämlich auch leere Dateien, Symlinks und Gerätedateien in die Überprüfung mit ein, was das Ergebnis verzerrt.

Abbildung 3: Den Grad der Defragmentierung erfahren Sie unter anderem über     <code srcset=

e2fsck und die Option -f. Allerdings sagt die Angabe nur wenig über die tatsächliche Defragmentierung aus.” width=”300″ height=”190″ /> Abbildung 3: Den Grad der Defragmentierung erfahren Sie unter anderem über e2fsck und die Option -f. Allerdings sagt die Angabe nur wenig über die tatsächliche Defragmentierung aus.

Bisher gibt es kein Low-Level-Tool, um Ext3-Dateisysteme zu defragmentieren. Als Workaround verpacken Sie Ihre Dateien in ein Tar-Archiv und verschieben dieses auf eine andere Partition. Dann löschen Sie die Dateien auf der alten Partition und entpacken danach das Archiv wieder dorthin. Ext2 hat mit e2defrag ein recht altes Tool an Bord, das Teil des Pakets E2fsprogs ist. Um es mit Ext3 zu verwenden, muss man das Dateisystem nach Ext2 konvertieren.

Für Ext4 haben sich die Kernel-Entwickler allerdings wieder Gedanken zur Defragmentierung gemacht. Das neue Dateisystem besitzt die Fähigkeit, sich selbst online zu defragmentieren, also in eingehängtem Zustand. Die Funktion kommt voraussichtlich in die Kernel-Version 2.6.29, das Tool e4defrag kümmert sich um fragmentierte Dateien und komplette Dateisysteme. Der Befehl e4defrag -r Verzeichnis defragmentiert ein Verzeichnis und rückt die darin enthaltenen Dateien zusammen. Über e4defrag /dev/sda6 und e4defrag Dateiname defragmentieren Sie ein komplettes Ext4-Dateisystem respektive eine einzelne Datei.

Fazit

Obwohl Dateisysteme immer cleverer werden, kommt es gelegentlich zu Problemen mit Inkonsistenzen. Wer die passenden Bordmittel von Linux kennt, kann dem Dateisystem auf den Zahn fühlen und es notfalls reparieren.

LinuxUser 04/2009 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben