Login


 
Newsletter
Werbung
Do, 7. August 2003, 00:00

Dateisystem-Tuning

Vorwort

Es scheint wenig bekannt zu sein, dass man am Linux-Dateisystem ext2 diverse Einstellungen tätigen kann. Dieser Artikel schafft Klarheit.

Wir beschränken uns hier auf die Dateisysteme ext2 und ext3. Für die neueren Journalling-Dateisysteme wie ReiserFS, XFS und JFS wird es später einmal Erweiterungen des Artikels oder separate Artikel geben. Beiträge der Leser sind natürlich auch hier sehr willkommen. Auch die Netzwerk-Dateisysteme sollten einmal behandelt werden.

Bevor wir mit dem Tunen starten, benötigen wir jedoch Möglichkeiten, die Performance zu messen. Diese wurden bereits im Artikel »Performance-Messungen unter Linux« vorgestellt.

Die verschiedenen Ansatzpunkte, die beim Tuning des Dateisystems eine Rolle spielen, sind das Formatieren (mke2fs), die Mount-Optionen und das Programm tune2fs. Wir betrachten sie in dieser Reihenfolge. Doch zuvor müssen wir uns noch ansehen, wie man die Dateisystem-Parameter ermitteln kann.

Parameter ermitteln mit tune2fs

Der Aufruf

tune2fs -l /dev/hdc1
(ersetzen Sie hdc1 durch die Sie interessierende Partition) zeigt alle Dateisystem-Parameter auf einen Blick. Wir werden später noch genauer darauf eingehen, doch vorläufig soll es genügen, ein paar Begriffe anhand eines Beispiels zu erläutern. Hier das Beispiel:

tune2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: b8832d24-2924-41c5-b8a1-789bfb301afc
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: filetype sparse_super
Filesystem state: not clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 5505024
Block count: 10990460
Reserved block count: 549523
Free blocks: 10817703
Free inodes: 5505013
First block: 0
Block size: 4096
Fragment size: 4096
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 16384
Inode blocks per group: 512
Last mount time: Sun Nov 18 00:12:30 2001
Last write time: Sun Nov 18 00:57:38 2001
Mount count: 1
Maximum mount count: 20
Last checked: Sun Nov 18 00:11:21 2001
Check interval: 15552000 (6 months)
Next check after: Fri May 17 01:11:21 2002
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128

Der Block count gibt uns die Gesamtzahl der Blöcke im Dateisystem an. Es sind hier knapp 11 Millionen. Multipliziert mit der Block size von 4k ergibt das eine Dateisystemgröße von etwa 44 GB. Etwa 10,8 Mio. Blöcke sind frei, was 43,2 GB verfügbaren Platz ergeben sollte. df zeigt aber nur 41 GB als frei an. Das liegt an dem Reserved block count von 549523, was ziemlich genau 2,2 GB ausmacht. Dies läßt sich mit der Option -m von mke2fs regulieren.

Wir sehen ferner einen Inode count von 5,5 Millionen. Wir benötigen einen Inode pro Datei, Verzeichnis und Link. Wenn auf dem Dateisystem nur Ogg Vorbis-Dateien oder tar-Archive mit einer Durchschnittsgröße von 5 MB gespeichert werden sollen, benötigen wir 44 GB / 5 MB = 8800 Inodes. Selbst mit einem Sicherheitsfaktor von 2 haben wir also sehr viel mehr Inodes, als wir benötigen. Bei einer Größe von 128 Bytes pro Inode könnten wir 128 * 5,4 Mio., also mindestens 691 MB an Platz sparen, die für Dateien zusätzlich verfügbar wären. Dies läßt sich mit den Optionen -i bzw. -N von mke2fs einstellen, doch leider nicht mehr ändern, wenn das Dateisystem erst einmal angelegt ist.

Die Fragment size hingegen können wir ignorieren, da ext2 keine Fragmente (Aufsplittung von Blöcken) unterstützt.

mke2fs

Zwar hat mk2efs etliche Optionen, doch nur eine davon betrifft direkt die Performance: Das Einstellen der Blockgröße mit -b.

Faßt man den Begriff »Tuning« etwas weiter, dann werden einige weitere Optionen interessant.

-i Zahl
Stellt das Verhältnis Bytes pro Inode ein. Inodes sind die Verwaltungseinheiten des Dateisystems. Jeder Eintrag, egal ob Datei, Device oder Link, erfordert einen Inode. Normalerweise braucht man hier nichts zu ändern, aber wenn das Dateisystem sehr viele kleine Dateien enthält, kann man den Wert etwas verkleinern. Die sinnvolle Untergrenze ist die Blockgröße, also 1024 bei Blöcken von 1k und 4096 bei Blöcken von 4k.
Soll das Dateisystem umgekehrt nur sehr große Dateien enthalten, dann benötigt man weniger Inodes. Dann kann man den Wert für -i erhöhen. Dadurch wird der Platz im Dateisystem etwas besser ausgenutzt. Da Linux im Vergleich zu anderen UNIX-Systemen sehr kleine Inodes hat, ist die Verschwendung meist nicht so schlimm.
-m Prozentzahl
Dies stellt den Prozentsatz der Dateisystemgröße ein, der für root reserviert bleibt. Dieser reservierte Bereich ist nicht sichtbar. Das heißt, daß das Kommando df 0% frei anzeigt, selbst wenn der reservierte Bereich noch weitgehend frei ist.
Für alle systemkritischen Dateisysteme ist es stark zu empfehlen, den reservierten Bereich bei den vorgegebenen 5% zu lassen (bei sehr großen Dateisystemen evtl. weniger). Sie wollen doch sicher nicht zulassen, daß Ihr System wegen einem vollen Dateisystem von einem normalen Benutzer (oder einem Cron-Job, der als normaler Benutzer läuft), lahmgelegt wird. Systemkritisch sind in diesem Zusammenhang besonders die Partitionen, die /tmp, /var/tmp und /var/log enthalten.
-N Zahl
Dies legt die absolute Anzahl von Inodes fest. Diese Option ist interessant, wenn man, wie ich im obigen Beispiel vorgerechnet habe, nur sehr wenige Inodes benötigt.
-O
Wenn man Kompatibilität mit Kernel 2.0 benötigt, sollte man hier -O none angeben. In der Regel wird das unnötig sein.
-T
Diese Option legt ein Dateisystem für einen bestimmten Verwendungszweck an. Der einzige verfügbare Typ ist news. Da diese Option ein Dateisystem mit Standard-Parametern (Blockgröße 4k, reservierte Blöcke 5%) erzeugt, macht es keinen Sinn, diese Option zu verwenden.
Kommentare (Insgesamt: 0 || Kommentieren )
Pro-Linux
Frohe Weihnachten Fest!
Neue Nachrichten
Werbung