34.2. Die wichtigsten Dateisysteme unter Linux

Anders als noch vor zwei oder drei Jahren ist die Auswahl eines Dateisystems für Linux nicht mehr eine Angelegenheit von Sekunden (Ext2 oder ReiserFS?). Kernel ab der Version 2.4 bieten eine große Auswahl an Dateisystemen. Im Folgenden erhalten Sie einen groben Überblick über die grundlegende Funktionsweise dieser Dateisysteme und deren Vorteile.

Seien Sie sich immer bewusst, dass kein Dateisystem allen Applikationen gleichermaßen gerecht werden kann. Jedes Dateisystem hat seine ihm eigenen Stärken und Schwächen, die berücksichtigt werden müssen. Sogar das höchstentwickelte Dateisystem der Welt wird niemals ein vernünftiges Backupkonzept ersetzen.

Die Fachbegriffe „Datenintegrität“ oder „Datenkonsistenz“ beziehen sich in diesem Kapitel nicht auf die Konsistenz der Speicherdaten eines Benutzers (diejenigen Daten, die Ihre Applikation in ihre Dateien schreibt). Die Konsistenz dieser Daten muss von der Applikation selbst gewährleistet werden.

[Important]Einrichtung von Dateisystemen

Soweit nicht explizit hier anders beschrieben, lassen sich alle Arbeiten zur Partitionierung und zum Anlegen und Bearbeiten von Dateisystemen bequem mit YaST erledigen.

34.2.1. ReiserFS

Offiziell stand ReiserFS als eine der Hauptfunktionen von Kernel-Version 2.4 zur Verfügung, aber auch seit der SUSE Linux-Version 6.4 als Kernel-Patch für den SUSE-Kernel 2.2.x. ReiserFS stammt von Hans Reiser und dem Namesys-Entwicklungsteam. ReiserFS hat sich als mächtige Alternative zu Ext2 profiliert. Seine größten Vorteile sind bessere Festplattenspeicherverwaltung, bessere Plattenzugriffsleistung und schnellere Wiederherstellung nach Abstürzen.

Die Stärken von ReiserFS im Detail:

Bessere Festplattenspeicherverwaltung

In ReiserFS werden alle Daten in einer Struktur namens B*-balanced tree organisiert. Die Baumstruktur trägt zur besseren Festplattenspeicherverwaltung bei, da kleine Dateien direkt in den Blättern des B*trees gespeichert werden können, statt sie an anderer Stelle zu speichern und einfach den Zeiger auf den tatsächlichen Ort zu verwalten. Zusätzlich dazu wird der Speicher nicht in Einheiten von 1 oder 4 kB zugewiesen, sondern in exakt der benötigten Einheit. Ein weiterer Vorteil liegt in der dynamischen Vergabe von Inodes. Dies verschafft dem Dateisystem eine größere Flexibilität gegenüber herkömmlichen Dateisystemen, wie zum Beispiel Ext2, wo die Inode-Dichte zum Zeitpunkt der Erstellung des Dateisystems angegeben werden muss.

Bessere Festplattenzugriffsleistung

Bei kleinen Dateien werden sowohl die Dateidaten als auch die „stat_data“ (Inode)-Informationen häufig nebeneinander gespeichert. Ein einziger Festplattenzugriff reicht somit, um Sie mit allen benötigten Informationen zu versorgen.

Schnelle Wiederherstellung nach Abstürzen

Durch den Einsatz eines Journals zur Nachverfolgung kürzlicher Metadatenänderungen reduziert sich die Dateisystemüberprüfung sogar für große Dateisysteme auf wenige Sekunden.

Zuverlässigkeit durch Data-Journaling

ReiserFS unterstützt auch die Modi Data-Journaling und „order data“. Die Arbeitsweise ähnelt der unter Abschnitt 34.2.3, „Ext3“ für Ext3 beschriebenen. Der Standardmodus data=ordered gewährleistet die Integrität der Daten und Metadaten, setzt Journaling jedoch nur für Metadaten ein.

34.2.2. Ext2

Die Ursprünge von Ext2 finden sich in der frühen Geschichte von Linux. Sein Vorgänger, das Extended File System, wurde im April 1992 implementiert und unter Linux 0.96c integriert. Das Extended File System erfuhr eine Reihe von Änderungen und wurde für Jahre als Ext2 das bekannteste Dateisystem unter Linux. Mit dem Einzug der Journaling File Systeme und deren erstaunlich kurzen Wiederherstellungszeiten verlor Ext2 an Wichtigkeit.

Möglicherweise hilft Ihnen eine kurze Zusammenfassung der Stärken von Ext2 beim Verständnis für dessen Beliebtheit unter den Linux-Benutzern, die es teilweise noch heute als Dateisystem bevorzugen.

Stabilität

Als wahrer Oldtimer erfuhr Ext2 viele Verbesserungen und wurde ausführlich getestet. Daher wohl auch sein Ruf als absolut stabiles Dateisystem. Im Falle eines Systemausfalls, bei dem das Dateisystem nicht sauber aus dem Verzeichnisbaum ausgehängt werden konnte, startet e2fsck eine Analyse der Dateisystemdaten. Metadaten werden in einen konsistenten Zustand gebracht und momentan nicht zuzuordnende Dateien oder Datenblöcke werden in ein gesondertes Verzeichnis (lost+found) geschrieben. Im Gegensatz zu (den meisten) Journaling File Systemen analysiert e2fsck das gesamte Dateisystem und nicht nur die kürzlich veränderten Metadatenbits. Dies dauert bedeutend länger als die Überprüfung der Protokolldaten eines Journaling File Systems. Je nach Größe des Dateisystems kann dies eine halbe Stunde und mehr in Anspruch nehmen. Deshalb werden Sie Ext2 für keinen Server wählen, der hochverfügbar sein muss. Da Ext2 jedoch kein Journal pflegen muss und bedeutend weniger Speicher verbraucht, ist es manchmal schneller als andere Dateisysteme.

Leichtes Upgrade

Basierend auf dem starken Fundament Ext2 konnte sich Ext3 zu einem gefeierten Dateisystem der nächsten Generation entwickeln. Seine Zuverlässigkeit und Stabilität wurden geschickt mit den Vorzügen eines Journaling File Systems verbunden.

34.2.3. Ext3

Ext3 wurde von Stephen Tweedie entworfen. Anders als alle anderen modernen Dateisysteme folgt Ext3 keinem komplett neuen Designprinzip. Es basiert auf Ext2. Diese beiden Dateisysteme sind sehr eng miteinander verwandt. Ein Ext3-Dateisystem kann leicht auf einem Ext2-Dateisystem aufgebaut werden. Der grundlegendste Unterschied zwischen Ext2 und Ext3 liegt darin, dass Ext3 Journaling unterstützt. Zusammenfassend lassen sich für Ext3 drei Vorteile herausstellen:

Leichte und höchst zuverlässige Dateisystem-Upgrades von Ext2

Da Ext3 auf dem Ext2-Code beruht und sowohl sein platteneigenes Format als auch sein Metadatenformat teilt, sind Upgrades von Ext2 auf Ext3 sehr unkompliziert. Anders als beim eventuell sehr mühsamen Umstieg auf andere Journaling File Systeme wie zum Beispiel ReiserFS, JFS, oder XFS (Sie müssen Sicherungskopien des gesamten Dateisystems erstellen und dieses anschließend von Grund auf neu erstellen) ist ein Umstieg auf Ext3 eine Angelegenheit von Minuten. Zugleich ist er sehr sicher, da die Wiederherstellung eines gesamten Dateisystems von Grund auf nicht immer fehlerlos vonstatten geht. Betrachtet man die Anzahl der vorhandenen Ext2-Systeme, die auf ein Upgrade auf ein Journaling File System warten, kann man sich leicht die Bedeutung von Ext3 für viele Systemadministratoren ausmalen. Ein Downgrade von Ext3 auf Ext2 ist genauso leicht wie das Upgrade. Führen Sie einfach einen sauberen Unmount des Ext3-Dateisystems durch und mounten Sie es als ein Ext2-Dateisystem.

Zuverlässigkeit und Performance

Einige andere Journaling File Systeme folgen beim Journaling dem „metadata-only“-Ansatz. Das heißt, Ihre Metadaten bleiben in einem konsistenten Zustand; dies kann jedoch nicht automatisch für die Dateisystemdaten selbst garantiert werden. Ext3 ist in der Lage, sich sowohl um die Metadaten als auch die Daten selbst zu kümmern. Bis zu welchem Grade sich Ext3 um Daten und Metadaten kümmert, ist individuell einstellbar. Den höchsten Grad an Sicherheit (d.h. Datenintegrität) erreicht man durch den Start von Ext3 im data=journal-Modus; dies jedoch kann das System verlangsamen, da sowohl Metadaten als auch Daten selbst im Journal erfasst werden. Ein relativ neuer Ansatz besteht in der Verwendung des data=ordered-Modus, der sowohl die Daten- als auch die Metadatenintegrität gewährleistet, jedoch das Journaling nur für Metadaten verwendet. Der Dateisystemtreiber sammelt alle Datenblöcke, die zu einem Metadaten-Update gehören. Diese Datenblöcke werden auf die Platte geschrieben, bevor die Metadaten aktualisiert sind. Somit erreicht man Metadaten- und Datenkonsistenz ohne Leistungsverlust. Eine dritte Verwendungsart ist data=writeback. Hierbei können Daten in das Hauptdateisystem geschrieben werden, nachdem ihre Metadaten an das Journal übergeben wurden. Diese Option ist nach Meinung vieler aus Performancegründen die beste Einstellung. Jedoch kann es bei dieser Option passieren, dass alte Daten nach einem Absturz und einer Wiederherstellung in Dateien auftauchen, obwohl die interne Dateisystemintegrität gewahrt wird. Sofern nicht anders angegeben, wird Ext3 mit der Standardeinstellung data=ordered gestartet.

34.2.4. Umwandeln eines Ext2-Dateisystems in Ext3

Die Umwandlung eines Ext2-Dateisystems in Ext3 erfolgt in zwei Schritten:

Anlegen des Journals

Rufen Sie tune2fs -j als Benutzer root auf. Hierdurch wird ein Ext3-Journal mit Standardparametern angelegt. Möchten Sie selbst festlegen, wie groß und auf welchem Gerät das Journal angelegt werden soll, rufen Sie stattdessen tune2fs -J mit den beiden Journal-Optionen size= und device= auf. Mehr zu tune2fs entnehmen Sie der Manualpage tune2fs(8).

Festlegung des Dateisystemtyps in /etc/fstab

Damit das Ext3-Dateisystem auch als solches erkannt wird, öffnen Sie die Datei /etc/fstab und ändern Sie den Dateisystemtyp der betroffenen Partition von ext2 in ext3. Nach dem nächsten Neustart des Systems ist Ihre Änderung wirksam.

Ext3 für das Root-Verzeichnis verwenden

Wenn Sie von einem Root-Dateisystem booten möchten, das eine Ext3-Partition darstellt, so ist es zusätzlich nötig, die Module ext3 und jbd in die initrd zu integrieren. Tragen Sie die beiden Module hierzu in der Datei /etc/sysconfig/kernel bei den INITRD_MODULES zusätzlich ein, und rufen Sie den Befehl mkinitrd auf.

34.2.5. Reiser4

Nach der Veröffentlichung von Kernel 2.6 erhielt die Familie der Journaling-Dateisystem Zuwachs: Reiser4, welches sich grundlegend von seinem Vorgänger ReiserFS (Version 3.6) unterscheidet. Dieses Dateisystem führt zur Optimierung der Dateisystemfunktionalität und eines engmaschiges Sicherheitskonzeptes Plugins ein.

Engmaschiges Sicherheitskonzept

Beim Entwurf von Reiser4 legten die Entwickler besonderen Wert auf die Implementierung von sicherheitsrelevanten Eigenschaften. Daher enthält Reiser4 eine Reihe von speziellen Sicherheits-Plugins. Das wichtigste Plugin führt das Konzept von Datei-„Items“ ein. Zur Zeit wird die Dateizugriffskontrolle pro Datei definiert. Bei einer großen Datei, welche für verschiedene Benutzer, Gruppen oder Anwendungen relevante Information enthält, müssen die Zugriffsrechte ziemlich breit gesetzt werden, um alle betroffenen Parteien miteinzubeziehen. Bei Reiser4 können diese Dateien in kleinere Bestandteile aufgeteilt werden (die „Items“). Zugriffsrechte können dann für jedes Item und jeden Benutzer gesondert gesetzt werden, wodurch eine viel präzisere Regelung der Dateisicherheit möglich ist. Ein ideales Beispiel hierzu ist /etc/passwd. Bis jetzt konnte nur root die Datei lesen und schreiben, während Nicht-root-Benutzer lediglich Lesezugriff auf diese Datei hatten. Mit Hilfe des Item-Konzeptes in Reiser4 kann diese Datei nun in verschiedene Items aufgeteilt werden (ein Item pro Benutzer). Somit können Benutzer oder Anwendungen ihre eigenen Daten ändern, ohne jedoch Zugriff auf die Daten anderer zu haben. Dieses Konzept trägt sowohl zur Sicherheit als auch zur Flexibilität bei.

Erweiterbarkeit durch Plugins

Viele Dateisystemfunktionen und externe Funktionen, die normalerweise von einem Dateisystem verwendet werden, sind in Reiser4 in der Form von Plugins realisiert. Diese Plugins können dem Basissystem sehr leicht hinzugefügt werden. Dadurch ist es nicht mehr nötig, den Kernel neu zu kompilieren oder die Festplatte neu zu formatieren, um dem Dateisystem neue Funktionalitäten hinzuzufügen.

Besseres Dateisystemlayout durch „Delayed Allocation

Wie XFS unterstützt auch Reiser4 „Delayed Allocation“. Siehe Abschnitt 34.2.7, „XFS“. Diese Technik ermöglicht eine besseres Layout des Dateisystems.

34.2.6. JFS

JFS, das „Journaling File System“ wurde von IBM für AIX entwickelt. Die erste Betaversion des JFS-Linux-Ports erreichte die Linux-Gemeinde im Sommer 2000. Version 1.0.0 wurde im Jahre 2001 herausgegeben. JFS ist auf die Bedürfnisse von Server-Umgebungen mit hohem Durchsatz zugeschnitten, da hierbei einzig die Performance zählt. Als volles 64-Bit-Dateisystem unterstützt JFS große Dateien und Partitionen (LFS oder Large File Support), was ein weiterer Pluspunkt für den Einsatz in Server-Umgebungen ist.

Ein genauerer Blick auf JFS zeigt, warum dieses Dateisystem möglicherweise eine gute Wahl für Ihren Linux-Server darstellt:

Effizientes Journaling

JFS folgt einem „metadata only“-Ansatz. Anstelle einer ausführlichen Überprüfung werden lediglich Metadatenänderungen überprüft, die durch kürzliche Dateisystemaktivitäten hervorgerufen wurden. Dies spart enorm viel Zeit bei der Wiederherstellung. Zeitgleiche Aktivitäten, die mehrere Protokolleinträge erfordern, können in einem Gruppen-Commit zusammengefasst werden, wobei der Leistungsverlust des Dateisystems durch mehrfachen Schreibvorgang stark verringert wird.

Effiziente Verzeichnisverwaltung

JFS benutzt zwei unterschiedliche Verzeichnisstrukturen. Bei kleinen Verzeichnissen erlaubt es die direkte Speicherung des Verzeichnisinhaltes in seinem Inode. Für größere Verzeichnisse werden B+trees verwendet, welche die Verzeichnisverwaltung erheblich erleichtern.

Bessere Speichernutzung durch dynamische Vergabe der Inodes

Unter Ext2 müssen Sie die Inode-Dichte (von Verwaltungsinformationen belegter Speicher) vorab angeben. Dadurch wird die maximale Anzahl von Dateien oder Verzeichnissen Ihres Dateisystems limitiert. JFS erspart Ihnen diese Überlegungen — es weist Inode-Speicher dynamisch zu und stellt ihn bei Nichtbedarf wieder zur Verfügung.

34.2.7. XFS

Ursprünglich als Dateisystem für ihr IRIX-Betriebssystem gedacht, startete SGI die Entwicklung von XFS bereits in den frühen 90ern. Mit XFS sollte ein hochperformantes 64-Bit Journaling File System geschaffen werden, das den extremen Herausforderungen der heutigen Zeit gewachsen ist. XFS ist gut geeignet für den Umgang mit großen Dateien und zeigt gute Leistungen auf High-End-Hardware. Jedoch weist sogar XFS eine Schwäche auf. Wie ReiserFS, legt XFS großen Wert auf Metadatenintegrität und weniger auf Datenintegrität.

Ein kurzer Blick auf die Schlüsselfunktionen von XFS erklärt, warum es sich möglicherweise als starke Konkurrenz zu anderen Journaling File Systemen in der High-End-Datenverarbeitung herausstellen könnte.

Hohe Skalierbarkeit durch den Einsatz von „Allocation Groups

Zum Erstellungszeitpunkt eines XFS-Dateisystems wird das dem Dateisystem zugrunde liegende Block-Device in acht oder mehr lineare Bereiche gleicher Größe unterteilt. Diese werden als „Allocation Groups“ bezeichnet. Jede Allocation Group verwaltet Inodes und freien Speicher selbst. Allocation Groups können praktisch als „Dateisysteme im Dateisystem“ betrachtet werden. Da Allocation Groups relativ autonom sind, kann der Kernel gleichzeitig mehrere von ihnen adressieren. Hier liegt der Schlüssel zur hohen Skalierbarkeit von XFS. Das Konzept der autonomen Allocation Groups kommt natürlicherweise den Anforderungen von Multiprozessorsystemen entgegen.

Hohe Performance durch effiziente Festplattenspeicherverwaltung

Freier Speicher und Inodes werden von B+ trees innerhalb der Allocation Groups verwaltet. Der Einsatz von B+trees trägt zu einem Großteil zur Leistung und Skalierbarkeit von XFS bei. XFS benutzt „Delayed Allocation“. XFS führt die Speicherzuweisung (engl. Allocation) in zwei aufeinander folgenden Schritten durch. Eine noch ausstehende Transaktion wird zunächst in RAM gespeichert und der entsprechende Speicherplatz reserviert. XFS entscheidet noch nicht, wo genau (d.h. in welchen Dateisystemblöcken) die Daten gespeichert werden. Diese Entscheidung wird bis zum letztmöglichen Moment hinausgezögert. Einige kurzlebige, temporäre Daten werden somit niemals auf Platte gespeichert, da sie zum Zeitpunkt der Entscheidung über ihren Speicherort durch XFS bereits obsolet sind. So erhöht XFS die Leistung und verringert die Dateisystemfragmentation. Da allerdings eine verzögerte Zuordnung weniger Schreibvorgänge als in anderen Dateisystemen zur Folge hat, ist es wahrscheinlich, dass der Datenverlust nach einem Absturz während eines Schreibvorgangs größer ist.

Preallocation zur Vermeidung von Dateisystemfragmentation

Vor dem Schreiben der Daten in das Dateisystem reserviert XFS den benötigten Speicherplatz für eine Datei (engl. preallocate). Somit wird die Dateisystemfragmentation erheblich reduziert. Die Leistung wird erhöht, da die Dateiinhalte nicht über das gesamte Dateisystem verteilt werden.