Das Dateisystem Ext3 tunen

Seite 8: Tools

Inhaltsverzeichnis

Natürlich will man nicht nur wissen, wie sehr die freien Bereiche zersplittert sind – das lässt ja lediglich eine Abschätzung zu, wie gut Ext3 bei neu angelegten Dateien eine Fragmentierung verhindern kann. Mindestens genauso interessant ist der Fragmentierungsgrad des bestehenden Dateisystems.

E2fsck gibt nach einem Test des Dateisystems aus, wie hoch der Prozentsatz an nicht zusammenhängend gespeicherten („non-contiguous“) Dateien ist (bei sauber ausgehängten Dateisystemen muss man den Test mit -f erzwingen). Dieser Wert fällt selbst bei recht gut gefüllten Dateisystemen überraschend niedrig im einstelligen Prozentbereich aus. Der Grund: e2fsck zählt dabei auch Dateien mit, die gar keine Datenblöcke enthalten (leere Dateien, schnelle symbolische Links, Gerätedateien). Außerdem sind auf typischen Linux-Systemen die meisten Dateien kleiner als 4 KByte, belegen also (bei einer Blockgröße von 4 KByte) nur einen Block; und da kann natürlich nichts fragmentieren. Der Anteil der fragmentierten Dateien liegt daher auch bei maximaler Fragmentierung nie höher als der Anteil der Dateien mit einer Größe von mehr als einem Block an allen Dateien.

Unser Tool ext2_frag geht etwas anders an die Sache heran und zählt leere sowie Gerätedateien gar nicht erst mit. Es teilt die Dateien in verschiedene Klassen je nach der Zahl der belegten Blöcke ein. Außerdem gibt es in den zusammenfassenden Statistiken den Prozentsatz der fragmentierten Dateien an den Files aus, die mehr als einen Block belegen – dieser Wert liegt typischerweise um den Faktor zwei bis drei höher als der auf alle Dateien bezogene, wie ihn e2fsck ausgibt.

Das bloße Zählen der fragmentierten Dateien hat allerdings den Nachteil, dass es nicht berücksichtigt, wie stark eine Datei fragmentiert ist – es unterscheidet ja nur zwischen fragmentiert und unfragmentiert. Ext2_frag berechnet daher für jede Größenklasse die durchschnittliche Zahl der Fragmente pro Datei.

Ein aussagekräftigeres Maß für die gesamte Fragmentierung ist die Zahl der nicht aufeinanderfolgenden Blöcke, ins Verhältnis gesetzt zur Zahl der möglichen Sprünge (die Zahl der belegten Datenblöcke minus eins, summiert über alle Dateien). Ext2_frag nennt das „Fragmentation index“. Dieser Wert ist 0, wenn alle Dateien am Stück gespeichert sind, und 100 bei maximaler Fragmentierung.

Bei einem Arbeitsplatzrechner hält sich die Fragmentierung in Grenzen.

Das E2fsprogs-Paket bringt außerdem das Tool filefrag mit, das ausgibt, aus wie vielen Fragmenten („extents“) eine Datei besteht. Das Tool gibt auch an, aus wie vielen Fragmenten die Datei mindestens bestehen muss: Dateien über 128 MByte Größe passen nicht mehr in eine Blockgruppe und müssen daher zwangsläufig aus mehreren Fragmenten bestehen.

Etwas komfortabler als filefrag ist das Programm fragments, das ganze Verzeichnisse durchsucht (mit der Option -r auch rekursiv) und neben zusammenfassenden Statistiken für jedes Verzeichnis (Option -d) auch Details zur Fragmentierung der einzelnen Dateien ausgeben kann (Option -f).

Während ext2_frag low level auf das Dateisystem zugreift und den Inhalt jedes Inodes analysiert, um die belegten Blöcke zu ermitteln, verwenden filefrag und fragments einen speziellen Ioctl, der die von einer Datei belegten Datenblöcke zurückliefert. Dieser Ioctl funktioniert allerdings nur mit regulären Dateien, nicht mit Verzeichnissen. Die Tools können daher beim gleichen Dateisystem zu etwas unterschiedlichen Ergebnissen kommen. Dateils dazu finden Sie im Textkasten Fragmentierung messen.

Fragmentierung kostet I/O-Performance, da sequenzielle Lese- und Schreiboperationen durch die Kopfbewegungen unnötig gebremst werden. In vielen Anwendungskontexten spielt das allerdings keine große Rolle: Meist greifen mehrere Anwendungen parallel auf die Platte zu, sodass gleichzeitig verschiedene Dateien angepackt werden müssen. Linux minimiert dabei die Kopfbewegungen durch ein Umsortieren der Schreib- und Lesezugriffe. Zum anderen werden die meisten Dateizugriffe sowieso aus dem Cache bedient: Dank dateiweisem Readahead sind die Daten häufig schon eingelesen, wenn sie eine Anwendung anfordert.

Wenn die I/O-Last allerdings sowieso sehr hoch ist, etwa weil permanent sehr viele Daten gelesen und geschrieben werden müssen, kann sich eine Fragmentierung durchaus bemerkbar machen – wir haben das bei unserem Cyrus-IMAP-Server erlebt, der ein gewaltiges Mail-Aufkommen wegschaffen muss und dabei jede Mail in einer eigenen Datei ablegt. Hier waren (trotz reichlich freiem Platz auf der Platte) ein Viertel aller Dateien mit einer Größe über einem Block fragmentiert – selbst unter den kleinen Dateien bis 48 KByte, die nur direkte Blöcke belegen (siehe Tabelle unten). Hier kann eine Defragmentierung durchaus helfen.

182370304 inodes (172828519 free)
364735735 blocks of 4096 bytes (248336353 free)
number of blocksfilesfragmentedpercentfragments/file
1572230300.001.00
<= 12349271476137221.801.37
<= 52451312615496430.209.30
<= 103626247923335.1864.78
<= 410821673967044.62148.23
> 41082462151861.66380.00
all files 97785259367579.582.16
files > 1 block 405622293675723.093.80
Fragmentation index: 8.80 percent.

Auch bei viel freiem Platz – das Dateisystem ist nur zu einem Drittel belegt – kann Ext3 mächtig fragmentieren.

Allerdings gibt es keinen Defragmentierer für Ext3 – das vor Urzeiten geschriebene ext2_defrag wird schon lange nicht mehr weiterentwickelt und kann mit aktuellen Ext2- und Ext3-Versionen nicht umgehen. Die einzige Methode zur Defragmentierung besteht darin, alle Dateien auf ein frisch angelegtes Dateisystem umzukopieren oder sie in ein tar-Archiv zu packen (am besten ebenfalls auf einem anderen Dateisystem), sie zu löschen und das Archiv danach wieder auszupacken. Dabei werden, angenehmer Nebeneffekt, auch die Verzeichnisdateien neu angelegt, sodass sie nur noch die Dateien enthalten, die tatsächlich in dem Verzeichnis gespeichert sind.

Mit dem bereits erwähnten Tool fragments können Sie auch herausfinden, ob vor allem einzelne Verzeichnisse (etwa solche, in denen eine Anwendung sehr häufig Dateien anlegt und löscht) fragmentiert sind und das Umkopieren auf diese Verzeichnisse beschränken. Bei unserem IMAP-Server hat das Umkopieren durchaus etwas gebracht: Die I/O-Spitzen in Zeiten besonders intensiven Mailaufkommens sind danach deutlich gesunken. (odi)