Das Dateisystem Ext3 tunen

Seite 10: "Textkasten: Fragmentierung messen"

Inhaltsverzeichnis
Fragmentierung messen Um die Fragmentierung einer Datei zu bestimmen, muss man herausfinden, welche Datenblöcke sie belegt, und die Folge der Datenblöcke mit der idealen Blockfolge abgleichen, wie sie das Bild darstellt. Die Datenblöcke einer Datei lassen sich auf drei verschiedene Arten ermitteln. Der direkte Weg besteht darin, die Platte sektorweise einzulesen und die Ext3-Datenstrukturen selbst zu interpretieren. Das läuft letztlich darauf hinaus, große Teile des Ext3-Treibers nachzuprogrammieren. Zum Glück ist das nicht nötig: Die Bibliothek libext2fs stellt Routinen bereit, um direkt auf Funktionen des Dateisystemtreibers zuzugreifen. Die beiden Funktionen ext2fs_get_next_inode() und ext2fs_block_iterate() iterieren über alle benutzten Inodes des Dateisystems und über alle Datenblöcke eines Inodes. ext2fs_get_next_inode() kann man eine eigene Funktion mitgeben, die mit der Blocknummer jedes Datenblocks aufgerufen wird, sodass sich das Layout der Datei auf der Platte mit der idealen Blockfolge vergleichen lässt. Diesen Ansatz wählen e2fsck und unser Tool ext2_frag. ext2_frag muss mit dem Namen des zu testenden Gerätes (Partition oder logisches Volume auf LVM-Systemen) aufgerufen werden: [VERBATIM14] Standardmäßig untersucht das Programm das gesamte Dateisystem und gibt für jede Datei aus, ob und wie sehr sie fragmentiert ist. Mit der Option -f beschränken sich die Ausgaben auf fragmentierte Dateien, was den Output übersichtlicher macht; mit -s werden lediglich zusammenfassende Statistiken für das gesamte Dateisystem ausgegeben. Um also die Fragmentierung des Dateisystems auf /dev/sda1 abzuschätzen, lautet der Aufruf [VERBATIM15] Die Option -i erlaubt es, sich die Fragmentierung einzelner Dateien, identifiziert über ihre Inode-Nummer, im Detail anzusehen; -v und -d liefern dann weitere Details über das Block-Layout der Datei. Alternativ kann man die Blocknummern einer Datei über den Ioctl FIBMAP erfragen, der allerdings nur mit regulären Dateien, nicht mit Verzeichnissen funktioniert. Damit arbeiten die Tools filefrag aus dem E2fsprogs-Paket und fragments. Im Unterschied zu ext2fs_block_iterate() liefert ioctl(FIBMAP) lediglich die Nummern der Datenblöcke zurück, nicht jedoch die der indirekten Blöcke – sie sind lediglich als Lücke in der Folge der Datenblöcke erkennbar. fragments muss mit dem Namen eines Verzeichnisses aufgerufen werden: [VERBATIM16] Mit der Option -r untersucht das Tool rekursiv die Unterverzeichnisse, -d gibt Statistiken für jedes Unterverzeichnis aus. -x sorgt dabei dafür, dass Verzeichnisse, in die andere Dateisysteme gemountet sind, ignoriert werden. Ein typischer Aufruf zur Untersuchung eines ganzen Dateisystems ist [VERBATIM17] Mit -f erhält man Angaben zur Fragmentierung der einzelnen Dateien, mit -b zusätzlich das Blocklayout jeder Datei.


(odi)