Traditionell schreiben Unix-Dateisysteme Metadaten teilweise asynchron, was im regulären Betrieb für eine deutliche Beschleunigung sorgt, im Fall eines Systemabsturzes aber eine aufwändige Überprüfung des gesamten Dateisystems notwendig macht. Da die durchschnittliche Größe von Festplatten im Verhältnis zum Datendurchsatz in den letzten Jahren überproportional gestiegen ist, hat sich die Dauer eines Filesystemchecks stark verlängert, er kann mehrere Stunden beanspruchen. Das ist bereits bei einem unbeaufsichtigten Reboot sehr störend, vor allem wenn ein nicht automatisch zu behebender Fehler einen manuellen Eingriff erforderlich macht.
Journal-Typen
Aus diesem Dilemma führen zwei Wege: Entweder muss das Dateisystem die Strukturen auf der Festplatte trotz verspäteten Rückschreibens immer konsistent halten oder alle Veränderungen sofort sequenziell in einem fortlaufenden Journal oder Log protokollieren. Ersteres wird beispielsweise in den FFS-Implementationen aktueller 4.4BSD-Derivate (Soft-Updates)[1] oder vom UFS in Calderas OpenUNIX (Delayed Ordered Writes)[2] verwendet.
Unter den Dateisystemen, die ein Log führen, kann man zwischen zwei Typen unterscheiden. Journaling-Dateisysteme verwenden das sequenzielle Log nur temporär zum Protokollieren von Änderungen; sie schreiben die Daten später in die eigentliche Dateisystem-Organisation zurück. Log-structured-Dateisysteme hingegen verwenden das Log für die eigentliche Dateisystemorganisation; ein Zurückschreiben ist also nicht nötig. Nachteilig ist hier jedoch die starke Fragmentierung der Dateien: Bei jeder Dateimodifikation werden die Daten weiträumig auf der Platte verteilt.
Auch wenn sich dieser Artikel nur mit der ersten Variante beschäftigt, gibt es einige Log-Structured-Filesysteme für Linux. Das noch sehr experimentelle LinlogFS[3] ist für den Einsatz mit normalen Festplatten konzipiert, JFFS und JFFS 2 hingegen funktionieren nur auf Flash-Speichern in Embedded Devices, sind dafür aber Teil des Kernelbaums.
Binärbäume und Extents
Von einer Ausnahme (Ext3) abgesehen unterscheiden sich die Testkandidaten auch in anderen Aspekten als der zusätzlichen Log-Funktion von der Vorgängergeneration, der unter anderem UFS und Ext2 angehören. So benutzen beispielsweise XFS und JFS Binärbäume für die Verwaltung der Inode- und Block-Allokationstabellen, bei ReiserFS sind balancierte B-Trees sogar die fundamentale Datenstruktur zur Verwaltung des Dateisystems.
Im Gegensatz zu blockbasierten Dateisystemen wie Ext2/3 benutzen XFS und JFS Extents, um auf Datenblöcke zu zeigen. Extents sind Block-Länge-Paare, die eine effiziente Verwaltung einer großen Zahl aufeinander folgender Blöcke ermöglichen.
« Zurück
1
2
3
4
5
6
Weiter »