Die Dateisysteme von Linux

basic concepts of varios file systems of Linux

Im Gegensatz zu Windows und macOS, die streng von den Konzernen Microsoft bzw. Apple kontrolliert werden, ist Linux ein großes Open-Source-Projekt, das von einer Community von Enthusiasten entwickelt wird. Der Code bleibt immer für diejenigen verfügbar, die einen Beitrag leisten möchten, und es steht jedem frei, ihn gemäß den individuellen Anforderungen zu optimieren oder eigene Distributionen auf seiner Grundlage zu erstellen. Aus diesem Grund liegt Linux in so vielen Varianten vor, und das Gleiche gilt für sein Dateisystem, ein wesentlicher Bestandteil jedes Betriebssystems, das im Artikel über die Grundlagen von Dateisystemen definiert ist. Der Kernel bietet Unterstützung für zahlreiche Speicherformate, die am häufigsten verwendeten sind jedoch die der Ext-Familie, XFS, Btrfs, F2FS, JFS und ReiserFS. Nachfolgend finden Sie ihre kurzen Beschreibungen und erfahren mehr über die wichtigsten Besonderheiten, die mit ihnen verbunden sind.

Beachten Sie bitte: Linux bietet auch Lese-/Schreibzugriff auf Dateisysteme anderer Plattformen wie NTFS, FAT32 und exFAT von Microsoft Windows, HFS+ von macOS und ZFS von BSD, Solaris, Unix, die in den entsprechenden Artikeln behandelt werden.


Ext

Ext (Extended File System) wurde 1992 als das allererste speziell für Linux entwickelte Format veröffentlicht. Es hatte jedoch immer noch ernsthafte Leistungseinschränkungen und wurde schnell von Ext2 abgelöst. Dieses Dateisystem und seine späteren Revisionen – Ext3 und Ext4 – wurden zur Standardauswahl für die große Mehrheit der Linux-Distributionen.

Ext2 hat sich aufgrund seiner Struktur, die auf dem Konzept der Inodes basiert, als effizienter erwiesen. Solcher Deskriptor hält die Attribute eines bestimmten Objekts, wie einer Datei oder eines Verzeichnisses, und zeigt auf die Speicherorte seiner zugrunde liegenden Daten. Der Speicherraum in Ext2 wird in Blöcke unterteilt, die größere als Blockgruppen (Block Groups) bezeichnete Einheiten bilden. Die Informationen über alle Blockgruppen werden von der direkt nach dem Superblock angeordneten Deskriptortabelle (Descriptor Table) verwaltet. Jede Blockgruppe hält Inodes in ihrer eigenen Inode-Tabelle (Inode Table). Sie überwacht auch den Zustand ihrer Blöcke und Inodes unter Verwendung der Block- und Inode-Bitmaps. Inzwischen ist der Name einer Datei oder eines Verzeichnisses kein Teil des Inodes – Namen werden über Verzeichnisse, die als spezielle Art von Dateien implementiert sind, den entsprechenden Inode-Nummern zugeordnet.

Die meisten Linux-Dateisysteme ähneln sich darin, dass der Name nicht als Attribut angesehen wird, sondern als Alias für eine Datei in einem bestimmten Verzeichnis definiert wird. Ein Dateiobjekt kann von vielen Stellen verlinkt werden und unter verschiedenen Namen existieren (sogenannte harte Links oder Hardlinks). Dies kann zu ernsthaften und sogar unüberwindbaren Schwierigkeiten bei der Wiederherstellung von Dateinamen nach Dateilöschung oder logischer Beschädigung führen.

Ext3 ist tatsächlich eine aktualisierte Version von Ext2, die Journaling unterstützt. Das Journal in Ext3 ist als Logdatei organisiert, die alle Änderungen am Dateisystem aufzeichnet und es im Falle eines Absturzes vor Beschädigung schützt.

Ext4 ist eine Verbesserung gegenüber Ext3, die die Methode der Datenzuordnung von einzelnen Blöcken zu Extents geändert hat. Die Idee dahinter ist, die meisten Daten der Datei in einen zusammenhängenden Bereich zu schreiben und dann nur die Adresse des ersten Blocks und die Anzahl der Blöcke in einer Sequenz zu notieren. Bis zu vier Extents können direkt im Inode gespeichert werden, während der Rest als B+-Baum angeordnet wird. Außerdem verschiebt Ext4 den Vorgang, bis die Daten tatsächlich auf die Festplatte geschrieben wurden, und kann so die Fragmentierung minimieren.

Insgesamt gilt es als einer der flexibelsten Allzweck-Dateisystemtypen, der sich zudem einen guten Ruf für solide Stabilität erworben hat.

XFS

XFS (Extended File System) ist ein weiteres sehr ausgereiftes Dateisystem, das ursprünglich von Silicon Graphics entwickelt und auf den IRIX-Servern des Unternehmens angewendet wurde. 2001 fand es seinen Weg in den Linux-Kernel und wird heute von den meisten Linux-Distributionen unterstützt, von denen einige, wie Red Hat Enterprise Linux, es sogar standardmäßig benutzen.

Dieser Dateisystemtyp ist für das Speichern sehr großer Dateien und Volumen auf einem einzelnen Host optimiert. Es teilt seinen Speicherplatz in gleich große Bereiche auf, die als Zuordnungsgruppen (Allocation Groups) bezeichnet werden. Jede von ihnen verhält sich wie ein eigenständiges Dateisystem, d. h. sie hat ihren eigenen Superblock, verwaltet ihre eigenen Strukturen und ihren eigenen Speicherplatz. Letzteres wird mithilfe von B+-Bäumen gesteuert, von denen einer den ersten Block in der kontinuierlichen Freiraumregion aufzeichnet, und der andere – die Anzahl der Blöcke, aus denen die zusammengesetzt ist. Speicherblöcke werden Dateien mit dem gleichen Extent-basierten Ansatz zugewiesen. Alle Dateien und Verzeichnisse in XFS werden durch ihre individuellen Inodes dargestellt. Die Zuweisung von Extents kann direkt im Inode gespeichert oder im Fall einer sehr großen oder fragmentierten Datei von einem anderen damit verknüpften B+-Baum verfolgt werden. Und genau wie Inodes in Ext enthalten sie nicht die Namen, die nur in den entsprechenden Verzeichniseinträgen verfügbar sind.

XFS wendet das Journaling-Prinzip für alle Aktualisierungen seiner Metadaten an. Alle Änderungen werden zuerst in das Journal geschrieben, bevor die eigentlichen Blöcke geändert werden, was ihre sofortige Wiederherstellung im Falle von Missgeschick ermöglicht. Im Allgemeinen ist dieser Dateisystemtyp hochskalierbar und funktioniert sehr gut auf Serverhardware.

Btrfs

Btrfs (B-Tree File System) ist eines der beliebtesten Formate der neuen Generation für Linux, und es wird viel Mühe betrieben, um es stabil zu machen. Es wurde von Oracle entwickelt und wird seit 2009 vom Mainline-Linux-Kernel unterstützt. Fedora und SUSE verwenden es bereits standardmäßig.

Btrfs ist so angepasst, dass es auf einer Vielzahl von Geräten lauft, von Smartphones bis hin zu High-End-Servern. Darüber hinaus umfasst es die Funktionen eines logischen Volumen-Managers, da es sich über mehrere Speicher verteilen kann, zusammen mit unzähligen anderen erweiterten Möglichkeiten.

Wie der Name schon sagt, stützt sich Btrfs stark auf B-Baum-Strukturen, die jeweils aus internen Nodes und Blättern bestehen. Ein interner Node zeigt auf einen untergeordneten Node oder ein untergeordnetes Blatt, während ein Blatt ein Element mit einigen Informationen enthält. Das tatsächliche Layout und der Inhalt eines Elements hängen vom Typ des gegebenen B-Baums ab. Der Wurzel-B-Baum (Root B-tree), dessen Position im Superblock verfügbar ist, weist Verweise auf die restlichen B-Bäume auf. Der Chunk-B-Baum (Chunk B-tree) verwaltet die Zuordnung von logischen Adressen zu physischen Adressen, während der Geräte-B-Baum (Device B-tree) umgekehrt die physischen Blöcke auf den zugrunde liegenden Geräten mit ihren virtuellen Adressen verknüpft. Der Dateisystem-B-Baum (File System B-tree) ist für die Zuordnung von Dateien und Ordnern verantwortlich. Kleine Dateien werden direkt dort in Extent-Elementen gespeichert. Größere werden außerhalb in zusammenhängenden Bereichen platziert, die Extents genannt werden. In solchem Fall verweist ein Extent-Element auf alle Extents, die die Daten der Datei enthalten. Verzeichniselemente enthalten Dateinamen und zeigen auf ihre Inode-Elemente. Inode-Elemente wiederum werden für andere Eigenschaften wie Größe, Berechtigungen usw. verwendet.

Btrfs ist ein Copy-on-Write-Dateisystem. Anstatt ein Journal zu verwenden, erstellt es Kopien der Blöcke, bevor es sie modifiziert, und schreibt diese Daten dann an einen anderen freien Ort. Dieser Mechanismus hilft dabei, das Risiko der Datenbeschädigung zu eliminieren, wenn eine Aktualisierung beispielsweise aufgrund eines Stromausfalls unterbrochen wird. Dank ihm und einer Vielzahl anderer attraktiver Features findet Btrfs immer mehr Anhänger unter modernen Linux-Benutzern.

F2FS

F2FS (Flash-Friendly File System) ist ein weiteres modernes Format, das 2012 von Samsung Electronics eingeführt wurde. Es wurde speziell für Speichergeräte auf Basis des NAND-Flash-Speichers entwickelt und wird daher am häufigsten in modernen Smartphones und Wechselspeichermedien eingesetzt.

F2FS arbeitet auf Basis des Log-strukturierten Dateisystem-Ansatzes (LFS) und berücksichtigt Besonderheiten von Flash-Speichern wie konstante Zugriffszeit und eine begrenzte Anzahl von Datenumschreibungszyklen. Anstatt einen großen Chunk zum Schreiben zu erstellen, fügt F2FS die Blöcke in separate Chunks (bis zu 6) zusammen, die gleichzeitig geschrieben werden.

Es unterteilt seinen Speicherraum in Segmente fester Größe. Aufeinanderfolgende Segmente bilden eine Sektion, und mehrere Sektionen darstellen eine Zone. Die Datenzuordnung in ihnen erfolgt mithilfe von Nodes. Letztere gibt es in drei Arten: direkte Nodes, indirekte Nodes und Inodes. Ein Inode speichert Metadaten, einschließlich Name, Größe und anderer Dateieigenschaften; Ein direkter Node gibt den Ort seiner Datenblöcke an, während ein indirekter Node auf Blöcke in anderen Nodes zeigt. Die physischen Adressen dieser Nodes können in der Nodeadressentabelle (Node Address Table) gefunden werden. Der Inhalt selbst wird im Hauptbereich (Main Area) gespeichert. Die Sektionen darin trennen die Datenblöcke von den Nodeblöcken mit Dienstinformationen. Der Nutzungsstatus aller Blöcke wird durch die Segmentinformationstabelle (Segment Information Table) aufgezeichnet. Der Segmentzusammenfassungsbereich (Segment Summary Area) gibt an, welche Blöcke welchem Node zugeordnet sind.

Wenn die freien Segmente zur Neige gehen, bereinigt sich F2FS selbst im Hintergrund, wenn das System inaktiv ist. Der Reinigungsalgorithmus wählt die Opfersegmente anhand der Anzahl der verwendeten Blöcke gemäß der Segmentinformationstabelle oder nach ihrem Alter aus.

Die beschriebene Organisation sorgt dafür, dass F2FS auf Solid-State-Speicher ziemlich gute Leistung bringt. Bisher wurde es jedoch hauptsächlich auf tragbaren Geräten angewendet und ist auf Desktop- und Servermaschinen selten anzutreffen.

JFS

JFS (Journaled File System) wurde 1990 von IBM entwickelt. Die ursprüngliche Version, die manchmal als JFS1 bezeichnet wird, wurde im AIX-Betriebssystem des Unternehmens implementiert. Später wurde JFS2 veröffentlicht und nach Linux portiert, nachdem es Open-Source wurde.

Ein JFS-Volumen besteht aus Regionen, die als Zuordnungsgruppen (Allocation Groups) bezeichnet werden, und jede von ihnen enthält einen oder mehrere Dateisätze (FileSets). Alle Dateien und Verzeichnisse werden durch ihre individuellen Inodes beschrieben, während der Dateninhalt durch einen oder mehrere Extents dargestellt wird. Alle Extents werden von einem dedizierten B+-Baum indiziert. Der Inhalt kleiner Verzeichnisse wird in ihren Inodes gespeichert, während größere als B+-Bäume organisiert werden. B+-Bäume steuern auch die Nutzung des Speicherplatzes: Der erste B+-Baum speichert die Startblöcke der freien Extents und der zweite – die Anzahl der freien Extents. JFS umfasst auch einen separaten Log-Bereich und schreibt in diesen, wenn Metadatenänderungen stattfinden.

Im Allgemeinen gilt JFS als schnelles und zuverlässiges Dateisystem. Es sieht jedoch selten Verbesserungen und ist jetzt nicht mehr gebräuchlich, da es von moderneren Optionen übertroffen wird.

ReiserFS

ReiserFS ist ein alternatives Linux-Format, das für das Speichern einer großen Anzahl kleiner Dateien optimiert ist. Es wurde ursprünglich 2001 von Namesys entworfen und brachte eine Reihe neuer Features, die zum Zeitpunkt seiner Einführung sehr innovativ waren. Doch schließlich wurde seine Wartung aufgrund bestimmter technischer Probleme an Freiwillige übergeben.

ReiserFS ist um den S+-Baum herum organisiert, der aus internen Nodes und Blätter besteht. Über diese Struktur werden alle Dateien, Verzeichnisse und Metadaten verwaltet. Er enthält Elemente von vier Grundtypen: direkte, indirekte, Verzeichnis- und Statistikelemente. Direkte Elemente enthalten tatsächliche Daten, indirekte Elemente sind nur mit bestimmten Datenblöcken verknüpft, Verzeichniselemente stellen Einträge in einem Verzeichnis dar und Statistikelemente enthalten die Eigenschaften von Dateien und Ordnern. Jedes Element hat seinen eindeutigen Schlüssel, der verwendet wird, um es im Baum zu lokalisieren. Dieser Schlüssel enthält den Identifikator, die Adresse und den Typ des Elements.

Dateien und Dateifragmente, die nicht den gesamten Block belegen, werden kombiniert und direkt in den Blättern des S+-Baums gespeichert. Dieser Mechanismus wird als Tail-Packing bezeichnet und trägt dazu bei, die Menge an verschwendetem Speicherplatz und Fragmentierung zu reduzieren. Darüber hinaus nimmt ReiserFS keine Änderungen direkt am S+-Baum vor – es schreibt sie zuerst in das Journal und kopiert sie dann an die gewünschte Stelle auf dem Speicher.

Insgesamt verfügt ReiserFS über gute Suchfunktionen und ermöglicht kompakte Zuordnung kleiner Dateien. Dieses Format wird jedoch nicht mehr aktiv unterstützt, und es ist sehr unwahrscheinlich, dass es in naher Zukunft relevant bleiben wird.

Hinweis: Informationen zur Möglichkeit erfolgreicher Datenwiederherstellung auf den genannten Dateisystemen finden Sie in den Artikeln, in den die Besonderheiten der Datenrettung von verschiedenen Betriebssystemen und die Chancen für die Datenwiederherstellung beschrieben werden. Um zu verstehen, wie das Verfahren ausgeführt werden sollte, verwenden Sie  Anweisung zur Datenwiederherstellung unter Linux.

Wenn Sie die in anderen Umgebungen verwendeten Dateisysteme kennenlernen möchten, lesen Sie bitte die folgenden Artikel:

Letzte Aktualisierung: 20. April 2023

Wenn Ihnen dieser Artikel gefällt, teilen Sie ihn in sozialen Medien: