Das neues Dateisystem Ext4

Aus LinuxUser 04/2007

Das neues Dateisystem Ext4

Fit für die Zukunft

Mit dem Dateisystem Ext2 wuchs Linux auf, mit Ext3 hielt zum ersten Mal ein Journaling Filesystem im Kernel Einzug. Ext4 soll Linux nun für die Zukunft rüsten.

Im Heimbereich erfüllt Ext3 die Wünsche der meisten Nutzer zur vollen Zufriedenheit. Auch das alternative ReiserFS arbeitet stabil und bringt sämtliche Features mit, die man von einem modernen Dateisystem erwartet.

Sowohl im Businessumfeld als auch im heimischen Einsatz gibt es jedoch zunehmend Probleme mit einigen Beschränkungen von Ext3: So erlaubt das Dateisystem bei einer Blockgröße von 4 KByte (Standardeinstellung) nur eine maximale Dateisystemgröße von 8 Terabyte. Das stellt nicht nur für professionelle RAID-Systeme ein echtes Manko dar: Auch für den heimischen Einsatz gibt es bereits erste Harddisks mit einer Kapazität von 1 TByte.

Die maximale Dateigröße von Ext3 liegt zurzeit bei 2 Terabyte. Auch diesen Grenzwert erreicht man spielend – zum Beispiel mit hochauflösenden, unkomprimierten Videodaten.

Was ist neu?

Gegenüber Ext3 bringt die aktuelle Entwicklerversion Ext4 hauptsächlich zwei wichtige Neuerungen:

  • Das eigentliche Dateisystem, die Metadaten und das Journaling Block Device (JBD) [1] sollen volle 64-Bit-Unterstützung bieten, um deutlich größere Dateien und Dateisysteme anlegen zu können.
  • Dank Extents soll Ext4 deutlich schneller schreiben als Ext3 und die Dateien weniger fragmentieren.

Vollen 64-Bit-Support bietet bislang aber nur das JBD: Die Arbeiten am Dateisystem und an den Metadaten sind noch voll im Gange. So beläuft sich die maximale Dateisystemgröße zwar bereits auf 1024 Petabyte, die 2-Terabyte-Schranke für einzelne Dateien hat Ext4 jedoch noch nicht überwunden.

Weniger gut ist es um die Rückwärtskompatibilität von Ext4 bestellt: Während sich Ext3-Partitionen problemlos als Ext2 einhängen lassen, gilt dies bei Ext4 nur, wenn der Benutzer keine Extents einsetzt. Da die Geschwindigkeitsvorteile von Ext4 gegenüber Ext3 allerdings in den Extents liegen (siehe Benchmarkergebnisse), dürften sie bei den meisten Nutzern den Grund für einen Wechsel zu Ext4 darstellen. Eine Rückkehr zu Ext3 ist dann nicht mehr möglich.

Achtung Baustelle!

Obwohl Ext4 seit Kernel 2.6.19 offiziell zu Linux gehört, sind die Arbeiten am neuen Dateisystem noch lange nicht abgeschlossen. So arbeitet zum Beispiel Takashi Sato an einem Online-Resizer, der Ext4 im laufenden Betrieb auf allfällige Fragmentierungen prüft und diese korrigiert. Das fertige Ext4 soll zudem auch eine Undelete-Funktion mitbringen. Einige neue Features benötigen jedoch eine Änderung des Dateisystemformats, wodurch es zu Problemen mit aktuellen Ext4-Partitionen kommen kann. Den Wechsel zum Ext3-Nachfolger sollten Sie sich deshalb gut überlegen. In Sachen Stabilität konnten wir in den Tests allerdings keine Probleme feststellen.

Kernel einrichten

Um Ext4 zu testen benötigen Sie einen aktuellen Kernel sowie die grundlegenden Entwicklertools make, gcc und glibc-devel. Für die Tests benutzten wir Kernel 2.6.20. Sie finden ihn auch auf der Heft-CD. Entpacken Sie die Sourcen als Root im Verzeichnis /usr/src und legen Sie anschließend den Link /usr/src/linux an, der auf die Quellen zeigt:

cp linux-2.6.20.tar.bz2 /usr/src
cd /usr/src
tar xvfj linux-2.6.20.tar.bz2
ln -s linux-2.6.20 linux

Damit der Kernel weiß, welche Elemente Sie im Kernel, als Modul oder gar nicht kompiliert haben möchten, müssen Sie in /usr/src/linux die Konfigurationsdatei .config anlegen. Dazu rufen Sie entweder make menuconfig oder make xconfig auf. Da das manuelle Setzen sämtlicher Optionen aber selbst für Experten keine leichte Angelegenheit darstellt, empfiehlt es sich, als Grundlage die Konfiguration des laufenden Kernels zu benutzen und lediglich die Unterschiede der neuen Kernelversion nachträglich einzupflegen. Kopieren Sie dazu die Datei /boot/config-Kernelversion als .config nach /usr/src/linux. Bei den meisten Distributionen erledigt dies folgender Befehl:

cp /boot/config$(uname -r) /usr/src/linux/.config

Geben Sie nun als Root im Verzeichnis /usr/src/linux den Befehl make oldconfig ein, um aus der alten Konfigurationsdatei mit dem neuen Kernel eine neue zu erstellen. Bei sämtlichen Neuerungen fragt Sie dann das System, ob und wie Sie diese im neuen Kernel haben möchte. Je nach Kernelversion kommen dabei etliche Abfragen zusammen. Möchten Sie nur Ext4 hinzufügen, drücken Sie einfach fortlaufend [Eingabe], um sämtliche Voreinstellungen zu übernehmen. Ext4 wählt das System dann allerdings nicht aus. Öffnen Sie deshalb anschließend die .config-Datei und suchen Sie nach dem Eintrag

# CONFIG_EXT4DEV_FS is not set

Entfernen Sie das Rautezeichen am Anfang der Zeile und ändern Sie den Eintrag zu CONFIG_EXT4DEV_FS=m (Abbildung 1). Möchten Sie mit Ext4 auch auf der Root-Partition experimentieren, binden Sie das Dateisystem nicht als Modul, sondern direkt in den Kernel ein. Ändern Sie dann den Eintrag zu CONFIG_EXT4DEV_FS=y. Starten Sie jetzt make oldconfig neu, dann stellt der Befehl nur noch Fragen zu Ext4 (Abbildung 2).

Abbildung 1: Damit der Kernel Ext4 versteht, müssen Sie die entsprechende Option in der     <code srcset=

.config-Datei explizit freischalten.” width=”300″ height=”240″ /> Abbildung 1: Damit der Kernel Ext4 versteht, müssen Sie die entsprechende Option in der .config-Datei explizit freischalten.

Abbildung 2: Beim zweiten Durchlauf von     <code srcset=

make oldconfig müssen Sie nur noch die Fragen zu Ext4 beantworten.” width=”300″ height=”152″ /> Abbildung 2: Beim zweiten Durchlauf von make oldconfig müssen Sie nur noch die Fragen zu Ext4 beantworten.

Feintuning

Die meisten aktuellen Distributionen setzen so genannte Access Control Lists (ACL) und erweiterte Attribute ein, um eine feinere Einteilung der Benutzerrechte zu erlauben. Zeigt die Ausgabe von mount auf der Konsole Einträge mit acl oder user_xattr an, sollten Sie diese Features auch für Ext4 aktivieren. Antworten Sie dazu auf die Fragen zu EXT4DEV_FS_XATTR und EXT4DEV_FS_POSIX_ACL mit y.

Die Security Labels (EXT4DEV_FS_SECURITY) benötigen Sie für das Zusammenspiel mit Selinux. Achten Sie darauf, den Debugging Support für JBD2 nicht zu aktivieren, da das Filesystem sonst deutlich langsamer arbeitet. Den Debugging Support für JBD (JBD_SUPPORT) aktiviert make automatisch.

Haben Sie sich entschieden, schreibt make oldconfig die neue .config-Datei, die jetzt auch Unterstützung für Ext4 enthält. Starten Sie nun die Übersetzung des Kernels mit make. Dieser Vorgang dauert je nach der Leistungsfähigkeit Ihres Rechners bis zu mehreren Stunden. Nach der Kompilierung des Kernels geben Sie folgende Befehle ein, um die Module und den Kernel zu installieren:

make modules_install
make install

Die meisten Distributionen richten dabei auch die Initial Ramdisk (initrd) ein und passen den Bootloader an. Starten Sie nun den Rechner neu, können Sie aus dem Grub-Menü bereits den neuen Kernel auswählen. Den alten Kernel beeinträchtigt die Installation nicht.

Arbeiten mit Ext4

Um eine Ext4-Partition anzulegen, benötigen Sie eine aktuelle Version der E2fsprogs-Tools. Sie finden diese auf der Heft-CD und online bei Kernel.org [2]. Benutzer von Suse Linux finden unter bei Suse.com [3] respektive Opensuse.org [4] auch einen aktuellen Suse-Kernel der Version 2.6.20 sowie passende E2fsprogs. Achten Sie beim Einspielen dieses Kernels darauf, ihn nicht mit rpm -Uvh, sondern mit rpm -ivh zu installieren, da nur so der Original-Kernel von Open Suse 10.2 erhalten bleibt.

Die Ext2-Tools installieren Sie von Hand über den üblichen Dreischritt: ./configure, make und (als Root) make install. Tritt während des make-Aufrufs ein Fehler auf, fehlt auf Ihrem System vermutlich das Paket texinfo. Installieren Sie dann dieses Paket nach und rufen Sie make ein zweites Mal auf.

Eine neue Partition im Ext4-Format legen Sie mit dem Befehl mke2fs -j Partition an, wobei Sie Partition durch den Namen der passenden Gerätedatei ersetzen müssen. Alternativ erstellen Sie per GUI eine neue Ext3-Partition. Danach hängen Sie die Partition mit dem Befehl mount -t ext4dev PartitionMountpoint ein. Das zugehörige Modul ext4dev lädt der Kernel automatisch.

Möchten Sie die Extents von Ext4 benutzen, ergänzen Sie den Mountbefehl um die Option -o extents. Eine mit Extents eingehängte Partition lässt sich aber nicht mehr als Ext3 nutzen. Achten Sie insbesondere darauf, keine bestehenden Ext3-Partitionen aus Versehen mit -o extents zu mounten. Sollte das doch passieren, hängen Sie die Partition wieder aus, ohne Dateien zu ändern: Sonst lässt sich die Partition nur noch als Ext4 einhängen. In Zukunft möchten die Entwickler den Support für Extents in das Tool mke2fs beziehungsweise tune2fs einbetten, die Mount-Option fällt dann weg.

Über diese Optionen hinaus unterstützt Ext4 die üblichen Mountparameter von Journaling-Dateisystemen. Eine zum Beispiel für Laptops interessante Option lautet -o commit=Sekunden. Das hier angegebene Zeitintervall bestimmt, wie häufig Ext4 Daten auf die Festplatte schreibt. In der Grundeinstellung geschieht dies alle fünf Sekunden. Mit höheren Werten lässt sich sowohl die Performance verbessern als auch Strom sparen. Beachten Sie aber dabei, dass gleichzeitig auch die Sicherheit der (noch nicht gespeicherten) Daten abnimmt. In den Benchmarks zeigte die Option commit=60 allerdings keine nennenswerten Unterschiede.

Die Benchmarks

Für erste Tests mit der Entwicklerversion von Ext4 nahmen wir das Dateisystem mit den Benchmarks bonnie++[5] und slow.c[6] in die Mangel. Als Distribution kam Open Suse 10.2 mit einem selbst kompilierten Kernel 2.6.20 und ext4dev als Modul zum Einsatz. Für die Tests nutzten wir bei Ext4 – sofern nicht anders vermerkt – die Mount-Option -o extents, bei den übrigen Dateisystemen die Standardwerte.

Ext4 schreibt deutlich flotter als sein Vorgänger und überholt im blockweisen Schreiben zum ersten Mal auch den direkten Konkurrenten ReiserFS (Abbildung 3). ReiserFS liest allerdings noch leicht schneller als der Ext3-Nachfolger. Nur wenig zügiger als Ext3 arbeitet Ext4 beim sequentiellen Anlegen und Löschen von Dateien (Abbildung 4).

Abbildung 3: Beim blockweisen Schreiben einer 1 GByte großen Datei überholt Ext4 ReiserFS knapp und arbeitet deutlich schneller als Ext3.

Abbildung 3: Beim blockweisen Schreiben einer 1 GByte großen Datei überholt Ext4 ReiserFS knapp und arbeitet deutlich schneller als Ext3.

Abbildung 4: Ein spezieller Stresstests von Bonnie++ testet, wieviele Dateien das Filesystem in einer Sekunde anlegt oder löscht. Auch hier punktet Ext4.

Abbildung 4: Ein spezieller Stresstests von Bonnie++ testet, wieviele Dateien das Filesystem in einer Sekunde anlegt oder löscht. Auch hier punktet Ext4.

Welche Wirkung Extents auf die Geschwindigkeit haben, demonstriert das Testresultat der zufällig angelegten Dateien (“Random Create”): Hier fällt Ext4 konsequenterweise hinter Ext3 zurück, da es durch die Reservierung der Extents quasi Zeit verliert. Beim zufälligen Löschen fallen diese Mehrarbeiten weg. Hier punktet denn Ext4 auch deutlich vor Ext3 und ReiserFS, das bei diesen Stresstests von Bonnie++ klar das Schlusslicht bleibt.

Schließlich wollten wir auch wissen, wie flott Ext4 ohne Extents arbeitet. Abbildung 5 zeigt die Ergebnisse des Benchmarks slow.c mit einer 1 GByte großen Testdatei. Sie zeigen mit ziemlicher Deutlichkeit, dass Ext4 seine Schreibperformance in erster Linie den Extents zu verdanken hat.

Abbildung 5: Ohne Extents schreibt Ext4 deutlich langsamer und fällt in etwa auf das Level von Ext3 zurück.

Abbildung 5: Ohne Extents schreibt Ext4 deutlich langsamer und fällt in etwa auf das Level von Ext3 zurück.

Fazit

Mit Ext4 bekommt der Linux-Kernel ein schnelles und zukunftssicheres Standarddateisystem, das sich zurzeit allerdings noch in den Kinderschuhen befindet. Obwohl die nur teilweise gegebene Abwärtskompatibilität mit Ext3 für einige Verwirrung sorgen dürfte, steht dem täglichen Einsatz von Ext4 bereits jetzt nichts mehr im Wege. Solange die Entwickler das Kernelmodul allerdings ext4dev nennen, sollten Sie für kritische Daten bei Ext3 bleiben.

Glossar

Extents

Über Extents reserviert das Dateisystem beim Anlegen einer Datei zusätzlichen Speicherplatz, um bei Änderungen diese am gleichen Ort speichern zu können. Größere Dateien werden so nicht zerstückelt. Das erhöht die Schreibgeschwindigkeit und beugt Defragmentationserscheinungen vor.

LinuxUser 04/2007 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