# 1.104.2

# Erhaltung der Dateisystemintegrität

Beschreibung: Prüfungskandidaten sollten in der Lage sein, die Integrität von Dateisystemen zu prüfen, freien Speicherplatz und Inodes zu überwachen und einfache Dateisystemprobleme zu beheben. Dieses Lernziel beinhaltet die Kommandos, die für die Verwaltung eines Standard-Dateisystems notwendig sind sowie die zusätzlichen Notwendigkeiten eines Journaling Dateisystems.

Die wichtigsten Dateien, Bezeichnungen und Anwendungen:

- du
- df
- fsck
- e2fsck
- mke2fs
- debugfs
- dumpe2fs
- tune2fs

Dieser Bereich hat eine verhältnismäßig hohe Bewertung und es kommen in der LPI 101 Prüfung wirklich einige Fragen zu diesem Thema an die Reihe. Zunächst einmal ist es notwendig, die Architektur der Unix-Dateisysteme zu verstehen, das wurde bereits auf den letzten Seiten erklärt. Ein großer Schwerpunkt liegt im Verständnis des I-Node-Systems. So ist z.B. eine häufige Fehlerursache das Fehlen von freien I-Nodes. Obwohl auf einer Platte noch haufenweise Megabytes frei wären kann keine Datei mehr angelegt werden. Daher sind Techniken notwendig, die das Erkennen solcher Probleme ermöglichen.

### Das Programm fsck und seine Verwandten

Wie schon beim Anlegen von Dateisystemen, so ist auch beim Reparieren bzw. Prüfen der Systeme für jedes Dateisystem ein spezielles Programm vorhanden, das genau das jeweilige System kennt. Wie beim Anlegen gibt es aber eben auch wieder ein sogenanntes Frontend, das dann die jeweiligen Programme aufruft. Dieses Frontend heißt fsck (FileSystemChecK). Dieses Frontend ruft dann die einzelnen Filesystem-Checker für die jeweiligen Dateisysteme auf, als da wären:

- e2fsck bzw. fsck.ext2 für das Second Extended Filesystem
- reiserfsck für das ReiserFS
- fsck.minix für Minix Dateisysteme
- fsck.msdos für DOS-FAT-Systeme
- fsck.vfat für Windows-VFAT-Systeme
- fsck.xfs für XFS-Dateisysteme

Grundsätzlich ist jedes dieser Programme dafür gedacht, die Konsistenz eines Dateisystems zu überprüfen und gegebenenfalls zu reparieren.

Die Anwendung des fsck-Programms sollte immer nur auf nicht gemounteten Dateisystemen stattfinden, da sonst die Gefahr droht, daß ein Schreibzugriff eines anderen Prozesses (wie etwa die ständige Synchronisation) Veränderungen vornimmt, die den Check bzw. die Reparatur durcheinanderbringen und so den Schaden nur vergrößern. Das ist allerdings ein Problem beim Überprüfen des Wurzel-Dateisystems, da es nicht so einfach möglich ist, es zu checken, ohne es zu mounten. In diesem Fall sollte grundsätzlich in den Single-User-Mode gewechselt werden und das Wurzeldateisystem sollte Read-Only gemountet sein!

Beim Systemstart wird das Programm fsck mit der Option -A aufgerufen, was das Programm veranlasst, alle Dateisysteme zu überprüfen, die in /etc/fstab aufgelistet sind. Die Reihenfolge ist dabei grundsätzlich durch die Angabe des sechsten Feldes innerhalb der /etc/fstab Datei geklärt. Das Wurzeldateisystem wird zuerst überprüft und dann werden entsprechend den Nummern in diesem sechsten Feld (fs_passno) die anderen Dateisysteme der Reihe nach abgearbeitet. Wenn mehrere solcher Systeme die gleiche Nummer haben, dann wird versucht, sie gleichzeitig zu bearbeiten.

Soll ein Dateisystem manuell (nicht beim Systemstart) überprüft werden, so gibt es ein paar Dinge zu bedenken. Neben der Tatsache, die oben schon erwähnt wurde, daß das System nicht gemountet sein sollte, gibt es ein paar zu bemerkende Optionsschalter, die bekannt sein müssen.

Die grundsätzliche Aufrufform ist

      fsck Optionen  Dateisystem

Um das Dateisystem jetzt manuell zu überprüfen, sollten zumindestens die wichtigsten Optionen bekannt sein, sonst kann es schlimmstenfalls dazu kommen, daß es gar nicht überprüft wird. Die folgenden Optionen beziehen sich hauptsächlich auf das EXT2 Dateisystem, das im Augenblick sicherlich der Standard unter Linux ist.

`-f`
  force - die Überprüfung wird erzwungen, auch wenn das Dateisystem ein gesetztes Valid-Flag hat. Das ist im Handbetrieb fast immer der Fall, daher ist das -f ein sehr wichtiger Parameter.
`-p`
  preen - Automatische Reparatur ohne jede Nachfrage.
`-n`
  no - Das Dateisystem wird ReadOnly geöffnet und alle Fragen, ob eine bestimmte Aktion durchgeführt werden soll, werden automatisch mit n(ein) beantwortet. Es werden also keine Veränderungen durchgeführt, aber man kann sehen, was passieren würde...
`-y`
  yes - Das genaue Gegenteil von -n. Alle gestellten Fragen werden mit y(es) beantwortet.

Die Angabe des Dateisystems erfolgt in Form der entsprechenden Gerätedatei. Ein manueller Aufruf könnte also z.B. so aussehen:

      e2fsck -f /dev/hda7

Damit würde das Dateisystem auf der siebten Partition (der dritten logischen Partition innerhalb der erweiterten Partition) des Masters des ersten IDE-Kanals zwingend (-f) überprüft.

Die Überprüfung und Reparatur von Journaling-Dateisystemen läuft grundsätzlich anders ab, als die von herkömmlichen Dateisystemen. Hier wird - im Falle einer Inkonsistenz - der Transaction-Log - eben das Journal - zurückverfolgt und alle Transaktionen rückgängig gemacht, bis das System wieder konsistent ist. Dieser Vorgang ist wesentlich schneller, als der bei einem traditionellen Dateisystem, da nicht die ganze Platte überprüft werden muß.

### Das Programm df

Das Programm df (Disk Free) dient dazu, die Belegung einzelner Dateisysteme (oder aller gemounteten Dateisysteme) zu ermitteln. Die Anwendung ist sehr einfach, wird df ohne Parameter angewandt, so zeigt es alle gemounteten Dateisysteme etwa in der folgenden Form:

    Filesystem           1k-blocks      Used Available Use% Mounted on
    /dev/hda2              2071328   1051656    914448  53% /
    /dev/hda5              3099108   1737096   1204580  59% /usr
    /dev/hda6              2071296    767708   1198364  39% /opt
    /dev/hda7              2071296    215212   1750860  11% /home

Aus dieser Ausgabe ist also zu entnehmen, welche Dateisysteme gerade gemountet sind, wieviel 1 Kilobyte-Blocks insgesammt zur Verfügung stehen (1k-blocks), wieviel davon belegt sind (Used), wieviel also noch frei sind (Available), die prozentuale Auslastung - also wieviel Prozent sind belegt (Use%) und schließlich der Mountpoint, an dem das Dateisystem eingehängt ist.

Wird stattdessen der Befehl df mit einem bestimmten Dateisystem aufgerufen, entweder durch die Nennung des Mountpoints oder durch die Angabe der entsprechenden Gerätedatei, so werden nur die Angaben über dieses Dateisystem ausgegeben. Hätten wir also entweder

      df /usr

oder

      df /dev/hda5

eingegeben, so wäre es zur folgenden Ausgabe gekommen:

    Filesystem           1k-blocks      Used Available Use% Mounted on
    /dev/hda5              3099108   1737096   1204580  59% /usr

Ein wichtiger Parameter für df ist noch die Angabe -i oder --inodes. Wird df mit dieser Option aufgerufen, so werden statt den Angaben über die Kilobyte-Blöcke jetzt Angaben über die I-Nodes gemacht. die Ausgabe sähe jetzt also folgendermaßen aus:

    Filesystem            Inodes   IUsed   IFree IUse% Mounted on
    /dev/hda2             263296   16769  246527    6% /
    /dev/hda5             393600  100095  293505   25% /usr
    /dev/hda6             263296   32595  230701   12% /opt
    /dev/hda7             263296   11088  252208    4% /home

Jetzt sehen wir also die Anzahl aller Inodes, die Anzahl der benutzten Inodes (IUsed), die Anzahl der freien Inodes (IFree) und wieder die prozentuale Auslastung (IUse%).

Diese Angaben sind auserordentlich wichtig, weil - wie oben schon erwähnt - es dazu kommen kann, daß zwar noch reichlich Platz in Kilobyte auf einer Partition sein kann, jedoch keine Inodes mehr frei sind, weil sehr viele, sehr kleine Dateien darauf gespeichert sind.

Auch hier gibt es einen wichtigen Hinweis für moderne Journaling-Dateisysteme. Diese Systeme speichern ihre Daten in einer völlig anderen Struktur ab, in sogenannten B-Bäumen. Das hat zur Folge, daß solche Systeme keinen reservierten Platz für die Inodes aufweisen, also Inodes dynamisch anlegen können, wenn sie benötigt werden. Aus diesem Grund zeigt df -i bei solchen Systemen keine realen Werte für die Inodes an.

### Das Programm du

Das Programm du (Disk Usage) zeigt den Platzbedarf einzelner Dateien bzw. Verzeichnisse an. Das ist z.B. wichtig, wenn es darum geht, herauszufinden, welches Verzeichnis besonders viel Platz benötigt auf einer Partition, von der der df-Befehl gezeigt hatte, daß der Platz langsam knapp wird.

Das Programm ist in der Regel nur sinnvoll mit Kommandozeilenparametern anwendbar, weil es sonst alle Dateien und Verzeichnisse zeigt und die Ausgabe so etwas unübersichtlich wird. Der wichtigste Optionsschalter ist `-s`, der dafür sorgt, daß nur die Summe der verwendeten Bytes aller übergebenen Verzeichnisse ausgibt. So ist schnell feststellbar, wieviel Platz ein Verzeichnis mit allen darin enthaltenen Dateien und Unterverzeichnissen benötigt. Der Aufruf

      du -s /opt

führt dann nur noch zu einer Ausgabe, die etwa folgendermaßen aussehen könnte:

    767708 /opt

Die Angaben erfolgen normalerweise in Kilobyte, die obige Ausgabe besagt also, daß 760 Megabyte im /opt-Verzeichnis belegt sind. Wenn wir jetzt wissen wollen, wie sich diese Summe zusammensetzt, dann können wir einfach alle Verzeichnisse mitangeben, indem wir schreiben:

      du -s /opt/*

und bekommen jetzt eine Auflistung wie folgt:

    20      /opt/Office51
    20      /opt/fsuite
    88556   /opt/gnome
    157568  /opt/kde
    184220  /opt/kde2
    16      /opt/lost+found
    31372   /opt/netscape
    20924   /opt/netscape6
    4       /opt/nps
    258728  /opt/office52
    4       /opt/oracle
    8       /opt/skyrix
    9476    /opt/slab
    11764   /opt/tfd
    8       /opt/tngfw
    4       /opt/virtuoso-lite
    5012    /opt/www

Jetzt lässt sich also schon ziemlich genau sagen, wer hier den vielen Platz braucht...

### Werkzeuge für den Umgang mit Ext2-Dateisystemen

In dieser Stufe der Linux-Zertifizierung werden für die hier genannten Werkzeuge noch keine umfassenden Kenntnisse verlangt. Wichtig ist, zu wissen, daß sie existieren und welche Aktionen damit vorgenommen werden können. An dieser Stelle also nur eine kurze Beschreibung der entsprechenden Tools mit jeweils einem Hinweis auf die Handbuchseiten. Ich habe die entsprechenden Handbuchseiten übersetzt, ein Studium dieser Information kann sicherlich nicht schaden.

- mke2fs
  Das Werkzeug zum Anlegen des Dateisystems wurde in Abschnitt 1.104.1 - Erzeugen von Partitionen und Dateisystemen bereits ausführlich besprochen.
- debugfs
  Ein mächtiges Werkzeug, um ein EXT2-Dateisystem zu bearbeiten. Mit diesem Programm ist es möglich, manuell alle möglichen Einstellungen des Dateisystems zu verändern, aber auch es auf einen Schlag unbrauchbar zu machen.
- dumpe2fs
  Gibt den Superblock und Block-Gruppeninformationen eines EXT2-Dateisystems auf die Standard-Ausgabe aus. So kann diese wichtige Information zwischengespeichert werden um damit ein Dateisystem manuell wiederherzustellen.
- tune2fs
  Ermöglicht wichtige Einstellungen von Dateisystem-Parametern des EXT2-Dateisystems.