Die Dateisysteme von 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. Deshalb existiert Linux in zahlreichen Varianten, und das Gleiche gilt für seine Dateisysteme, einen wesentlichen Bestandteil jedes Betriebssystems, das im Artikel über die Grundlagen von Dateisystemen beschrieben wird. 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 kurze Beschreibungen dieser Dateisysteme und erfahren mehr über die Hauptbesonderheiten, die mit ihnen verbunden sind. Außerdem werden Ihnen die wichtigsten Technologien im Zusammenhang mit diesen Linux-Dateisystemen vorgestellt.
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. Ein solcher Deskriptor hält die Attribute eines bestimmten Objekts, wie einer Datei oder eines Verzeichnisses, und verweist auf die Speicherorte seiner zugrunde liegenden Daten. Der Speicherplatz in Ext2 ist in Blöcke unterteilt, die größere als Blockgruppen (Block Groups) bezeichnete Einheiten bilden. Informationen über alle Blockgruppen werden in der Deskriptortabelle (Descriptor Table) verwaltet, die direkt hinter dem Superblock angeordnet ist. Jede Blockgruppe enthält Inodes in einer eigenen Inode-Tabelle (Inode Table). Sie überwacht auch den Zustand ihrer Blöcke und Inodes mittels 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 Weiterentwicklung von 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 wird in einem B+-Baum organisiert. Zudem verzögert 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 eingesetzt 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 verwenden.
Dieser Dateisystemtyp ist für das Speichern sehr großer Dateien und Volumes 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 speichert, und der andere – die Anzahl der Blöcke, aus denen diese besteht. 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. Ebenso enthalten Inodes in XFS keine 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 Fall von Problemen ermöglicht. Generell ist dieser Dateisystemtyp hochskalierbar und eignet sich sehr gut für Serverhardware.
Btrfs
Btrfs (B-Tree File System) ist eines der beliebtesten Formate der neuen Generation für Linux, und es wird viel Aufwand 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 läuft, von Smartphones bis hin zu High-End-Servern. Darüber hinaus umfasst es die Funktionen eines logischen Volume-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 stellen eine Zone dar. 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-Speichern 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-Volume 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.
Andere Speichertechnologien von Linux
Linux-Dateisysteme sind im Allgemeinen unabhängig und werden direkt auf einer Partition ausgeführt, wenn sie mit gewöhnlichen eigenständigen Laufwerken verwendet werden. Allerdings können auch zusätzliche Technologien zwischen dem physischen Speicher und einem Linux-Dateisystem geschichtet werden, um erweiterte Funktionen bereitzustellen. Einige von ihnen, wie Btrfs, gehen sogar noch weiter, indem sie bestimmte Funktionen in ihre Kernfunktionalität integrieren und so den Bedarf an zusätzlichen Schichten minimieren.
Hier sind einige der gängigsten Speichertechnologien, mit denen Linux-Dateisysteme kombiniert werden können:
-
Logical Volume Manager (LVM) – eine Datenträgerverwaltungstechnologie, die im Vergleich zur herkömmlichen Partitionierung eine flexiblere und effizientere Zuweisung der Speicherkapazität ermöglicht. Sie ist mit den meisten Linux-Dateisystemen kompatibel, einschließlich Ext2, Ext3, Ext4, XFS, Btrfs, F2FS, JFS und ReiserFS. Mit ihrer Hilfe ist es möglich, Speicherpools zu erstellen, die sich über mehrere physische Speichergeräte erstrecken und darauf anpassbare logische Volumes einzurichten. Thin-Provisioning, ein spezielles Feature von LVM, ermöglicht die Optimierung der Speichernutzung durch dynamische Zuweisung von Speicherplatz nur dann, wenn tatsächlich Daten auf die Volumes geschrieben werden. In diesem Fall wird ein dedizierter "Thin Pool" als Quelle verwendet und die darin erstellten Volumes werden als "Thin Volumes" bezeichnet. Die virtuelle Größe eines solchen Volumes kann den tatsächlich im Thin Pool verfügbaren Speicherplatz überschreiten.
Hinweis: Folgen Sie bitte dieser Anleitung, wenn Sie Daten von einem LVM-Volume mit Thin-Provisioning retten müssen.
-
mdadm – ein Linux-Dienstprogramm zur Erstellung und Verwaltung von Software-RAID. Es kombiniert mehrere physische Laufwerke zu einer einzigen logischen Einheit mit der Möglichkeit, um die Speicherleistung zu verbessern und/oder Fehlertoleranz zu erreichen. mdadm unterstützt verschiedene RAID-Level, darunter RAID 0 (Striping), RAID 1 (Spiegelung), RAID 5 (Striping mit Parität), RAID 6 (doppelte Parität) und RAID 10 (Spiegelung von Stripes). Das resultierende RAID-Set wird in Linux als einzelnes logisches Blockgerät angezeigt und kann mit jedem vom Kernel unterstützten Dateisystem formatiert werden.
Hinweis: Verlassen Sie sich bitte auf die Anleitung, wenn Sie Daten auf RAID wiederherstellen müssen.
-
LUKS (Linux Unified Key Setup) – ein Standard zur Verschlüsselung von Blockgeräten in Linux, der die darauf gespeicherten Daten ohne den richtigen Verschlüsselungsschlüssel unzugänglich macht. LUKS ist mit einer Vielzahl von Linux-Dateisystemen kompatibel, darunter Ext2, Ext3, Ext4, XFS, Btrfs, F2FS, JFS und ReiserFS. Darüber hinaus kann es in Verbindung mit anderen Linux-Speichertechnologien wie LVM oder mdadm verwendet werden, um die Verschlüsselung über den von diesen Systemen verwalteten Volumes bereitzustellen.
Hinweis: Benutzen Sie bitte diese Anleitung, wenn Sie Daten von einem LUKS-verschlüsselten Volume retten müssen.
-
eCryptfs – ein Linux-natives kryptografisches Dateisystem. Es ermöglicht die Verschlüsselung einzelner Verzeichnisse oder Dateien innerhalb eines Volumes, ohne dass eine vollständige Festplattenverschlüsselung angewendet werden muss. eCryptfs funktioniert als "gestapeltes" Dateisystem und legt seine Verschlüsselung über ein vorhandenes Dateisystem, wobei die zugrunde liegende Dateisystemstruktur erhalten bleibt. Auf diese Weise bleibt ein Standard-Linux-Dateisystem wie Ext2, Ext3, Ext4, XFS, Btrfs, F2FS, JFS oder ReiserFS für die Verwaltung der Datenblöcke und anderer Metadaten verantwortlich, während eCryptfs sicherstellt, dass der Inhalt der Dateien beim Zugriff verschlüsselt oder entschlüsselt wird.
Hinweis: Greifen Sie bitte auf die Anleitung zurück, wenn Sie mit eCryptfs verschlüsselte Daten wiederherstellen müssen.
-
Btrfs-RAID – eine RAID-Funktionalität, die in das Btrfs-Dateisystem eingebettet ist. Es ermöglicht Benutzern, flexible, fehlertolerante Speichervolumes aus mehreren Speichergeräten zu konfigurieren. Btrfs unterstützt verschiedene RAID-Level, darunter RAID 0 (Striping), RAID 1 (Spiegelung), RAID 5 (Striping mit Parität), RAID 6 (doppelte Parität) und RAID 10 (Spiegelung von Stripes). Im Gegensatz zu herkömmlichem RAID ermöglicht Btrfs-RAID das dynamische Hinzufügen, Entfernen oder Ersetzen von Laufwerken im Array, ohne das System offline zu schalten.
Hinweis: Verlassen Sie sich bitte auf die Anleitung, wenn Sie Daten von Btrfs-RAID retten müssen.
Wenn Sie die in anderen Umgebungen verwendeten Dateisysteme kennenlernen möchten, lesen Sie bitte die folgenden Artikel:
Letzte Aktualisierung: 09. November 2024