Kennenlernen des XFS-Dateisystems
Der moderne Linux-Kernel unterstützt eine Vielzahl von Dateisystemtypen, und jeder von ihnen verfolgt einen eigenen Ansatz zum Platzieren und Abrufen von Daten auf einem digitalen Medium. Diese Tatsache eröffnet natürlich viele Möglichkeiten. Gleichzeitig wird den Benutzern jedoch zusätzliche Verantwortung auferlegt, die sich zumindest ein grundlegendes Verständnis ihrer Besonderheiten bekommen müssen. Neben ext4, der Standardauswahl für die meisten Distributionen, bleibt XFS unter den am häufigsten verwendeten Optionen und erfordert eine genauere Betrachtung. Also, um was für ein Dateisystem handelt es sich und wie unterscheidet es sich von den anderen Formaten?
Einführung in XFS
XFS ist eines der robustesten Dateisysteme, die in Linux bereitgestellt sind. Es wurde ursprünglich von Silicon Graphics Inc. entworfen und 1994 auf ihrer UNIX-basierten IRIX-Plattform veröffentlicht. Später wurde das Dateisystem an die Open-Source-Community übergeben, die es 2001 in den Kernel einbaute. Seitdem hat es seinen Weg in alle großen Haupt-Distributionen von Linux geebnet. Diejenigen, die auf Red Hat basieren, wählen dieses Format sogar standardmäßig während der Installation, zum Beispiel CentOS, RHEL und Rocky Linux.
XFS wurde mit dem Gedanken über Geräte mit hoher Kapazität entwickelt und ist vor allem für seine hohe Leistung beim Umgang mit großen Datenmengen bekannt. Dieses Dateisystem findet sich typischerweise auf Servern, Speicher-Arrays und seltener – auf Consumer-PCs. Seine Popularität hat auch mit der weit verbreiteten Verwendung von NAS-Boxen zugenommen, von denen ein großer Teil mit XFS vom Hersteller geliefert wird, darunter Marken wie Buffalo LinkStation und TeraStation, NetGear, LaCie, Iomega und andere.
Trotz seines hohen Alters befindet sich das Dateisystem immer noch in aktiver Entwicklung. Es wurde einer Reihe von Modifikationen unterzogen, und jetzt haben wir die dritte Generation von XFS, die in den letzten Jahren ausgiebig genutzt wird:
Erste XFS-Generation – einfaches SGI XFS für das UNIX-basierte IRIX-Betriebssystem;
Zweite XFS-Generation – älteres Linux XFS eines erweiterten Formats, das derzeit hauptsächlich in NAS-Einheiten eingesetzt wird;
Dritte XFS-Generation – Linux XFS (Gen 3), die neueste Version, die in modernen Linux-basierten Systemen verwendet wird, wo das Metadatenformat zur einfacheren Identifizierung und Überprüfung geändert wurde.
XFS ermöglicht das Erstellen eines Volumens mit einer Größe von 18 Exabyte und die Verarbeitung einzelner Dateien mit einer Größe von bis zu 9 Exabyte. Die Anzahl der Dateien ist nur durch den verfügbaren Speicherplatz begrenzt. Das Dateisystem kann wachsen, solange nicht zugeordnete Blöcke vorhanden sind, und kann sich sogar über mehrere physische Geräte erstrecken.
Als Journaling-Dateisystem zeichnet XFS Änderungen auf, bevor sie in seine internen Strukturen übernommen werden, was seine Gesamtkonsistenz im Falle eines Absturzes oder Stromausfalls sicherstellt.
Grundstruktur des Dateisystems
XFS hat eine Extent-orientierte Organisation. Anstatt seinen Platz in einzelnen Blöcken aufzuteilen, fasst es diese zu zusammenhängenden Einheiten variabler Länge, die als Extents bezeichnet werden, zusammen. Eine einzelne Datei kann aus mehreren Extents bestehen, wenn ein zusammenhängender Bereich auf dem Speicher dafür nicht verfügbar ist. XFS versucht jedoch, ihre Anzahl so gering wie möglich zu halten, und führt Extents zusammen, wenn die Datei wächst. Die Informationen über eine Datei (Datei-Metadaten) werden in ihrem Inode gespeichert. Solche Inodes werden in Segmente zugeteilt, jeweils 64.
Das Dateisystem selbst kann in bis zu drei separate Teile unterteilt werden:
- Datenbereich
Der Datenbereich enthält die Metadaten des Dateisystems und die Daten von Benutzerdateien. Der Speicherplatz darin ist weiter in gleiche Zuordnungsgruppen unterteilt. Die Mindestgröße einer Zuordnungsgruppe beträgt 16 MB, die maximale – etwa 1 TB. Jede Zuordnungsgruppe steuert autonom die Raumnutzung innerhalb ihrer Grenzen. Daher können nebenläufige Prozesse die Zuordnung im gesamten Dateisystem parallel durchführen und stören sich nicht gegenseitig.
Freie Extents in der Zuordnungsgruppe werden mithilfe eines Paares von B+-Bäumen verwaltet. Ihre Einträge enthalten Informationen über die Startblockadresse eines Freiraumbereichs und seine Länge in Blöcken. Der erste B+-Baum wird durch den Adresswert indiziert, während der zweite – durch den Längenwert.
Die Orte von Inodes innerhalb der Zuordnungsgruppe werden ebenfalls unter Verwendung eines B+-Baums indiziert. Seine Einträge enthalten den Versatz für jedes 64-Inode-Segment und einen Merker für jeden Inode innerhalb eines Segments, der angibt, ob er benutzt wird.
Ein ähnlicher Ansatz wird gebraucht, um die Extents, die Dateien zugewiesen sind, zu verfolgen. Der Deskriptor jedes Extents enthält neben seiner Adresse und Länge in Blöcken den logischen Versatz vom Beginn der Datei und einen Merker, der ein Extent als vorbelegt, aber noch nicht beschrieben kennzeichnet. Extent-Deskriptoren werden normalerweise als lineares Array gespeichert, das in den Inode der Datei eingebettet ist. Wenn die Anzahl der Extents jedoch zu groß ist, werden sie mithilfe eines anderen B+-Baums indiziert, dessen Wurzel sich im Inode der Datei befindet.
XFS implementiert eine verzögerte Zuordnung, um das Schreiben zu verbessern. Zunächst wird ein virtueller Extent im Arbeitsspeicher aufgebaut und dafür im Dateisystem entsprechend viel Platz reserviert. Der genaue Speicherort der Daten bleibt jedoch unbekannt, bis XFS die Entscheidung trifft, sie tatsächlich zu schreiben. Daher werden einige kurzlebige temporäre Dateien möglicherweise nie echten Blöcken auf dem Speicher zugewiesen.
- Protokollbereich (Journal)
Dieser Bereich speichert die Änderungen an den Metadaten des Dateisystems. Der Eintrag im Protokoll für jedes Strukturelement besteht aus Kopfinformationen, die es beschreiben, und einer Kopie des neuen Images dieses Elements, wie es auf der Festplatte erscheinen sollte. Der Eintrag wird im Protokoll aufbewahrt, bis diese Änderungen tatsächlich in den Datenbereich übernommen werden. Im Falle eines Absturzes kann das Protokoll ausgelesen werden, um die unterbrochenen Vorgänge abzuschließen und die Dateisystemkonsistenz wiederherzustellen. Dieser Bereich kann sich je nach Konfiguration innerhalb des Datenbereichs selbst oder sogar extern auf einem separaten Gerät befinden, um die Geschwindigkeit/Zuverlässigkeit zu erhöhen.
- Echtzeit-Bereich
Dieser optionale Bereich speichert nur die Daten von Echtzeitdateien – solche mit besonderen Anforderungen an die E/A-Geschwindigkeit. Er befindet sich normalerweise auf einem separaten Hochleistungsspeichergerät. Der Bereich ist in eine Anzahl von Extents fester Größe unterteilt. Die Zuordnung darin erfolgt auf einfachere Weise. Er wird mithilfe einer linearen Bitmap verwaltet und der freie Platz wird mit einem zweidimensionalen Array indiziert.
Vor- und Nachteile von XFS
Dank seines Designs zeichnet sich XFS durch die Organisation großer Dateien, Verzeichnisse und Volumens sowie einer großen Anzahl von Dateien aus. Außerdem bietet es viele Features, die es optimal für große Computersysteme und andere Umgebungen, die ein zuverlässiges Hochleistungsdateisystem erfordern, machen. Unter ihnen kann man hervorheben:
- Reduzierte Fragmentierung und Streuung von Dateien
XFS bemüht sich, Dateien so zusammenhängend wie möglich zu speichern. Das Extent-Konzept ermöglicht es, freie Bereiche benachbarter Blöcke effizient zuzuweisen, während B+Bäume die Suche nach freien Extents erleichtern. Wenn es "Löcher" in einer Datei gibt, überspringt XFS diese einfach, ohne Speicherplatz für leere Blöcke zu verschwenden. Die Benutzung der verzögerten Zuordnung gibt ihm das Verständnis der endgültigen Größe der Datei. Da das weiß, wie viele Blöcke zugewiesen werden müssen, schafft es XFS oft, die gesamte Datei in einem einzigen Extent unterzubringen, vorausgesetzt, es gibt zusammenhängenden Speicherplatz, um sie zu speichern, oder sie zumindest in viel größeren Extents zuzuweisen, was sonst nicht möglich wäre. Darüber hinaus verringert das Puffern kurzlebiger Dateien die Auswirkungen solcher Dateien auf die Fragmentierung und reduziert die Anzahl der Metadatenaktualisierungen.
- Eignung für Mehrkomponenten-Speichersysteme
XFS kann mehrere Speichergeräte umfassen und verfügt über einen eigenen Volumen-Manager. Für Striped-Disk-Arrays (z. B. RAID 5) kann man die Größe jeder Stripe-Einheit und die Anzahl der Einheiten pro Stripe zum Zeitpunkt der Dateisystemerstellung definieren. XFS verwendet diese Informationen, um Daten gemäß den Speicherspezifikationen zu platzieren und so eine bessere Leistung zu erzielen.
Der von XFS verwendete XLV-Volumen-Manager dient als zusätzliche Abstraktionsschicht zwischen dem Dateisystem und den zugrunde liegenden physischen Speichergeräten. Er gibt XFS die Unterstützung von Striping für höhere E/A-Leistung, Spiegelung für höhere Zuverlässigkeit und Verkettung zum Erstellen sehr großer logischer Volumens. Außerdem ermöglicht XLV die Online-Neukonfiguration eines Volumens, wenn es gemountet und aktiv ist. Zum Beispiel kann man die Größe eines Volumens erweitern oder es fast ohne Ausfallzeiten defragmentieren.
- Schnelle parallele E/A-Operationen
XFS ist für parallelen Zugriff optimiert. Wie bereits erwähnt, teilt es den Speicherplatz in unabhängige Zuordnungsgruppen auf. Jede Zuordnungsgruppe verhält sich fast wie ein separates Dateisystem – steuert die eigene Speicherplatznutzung und schreibt ihre eigenen Metadaten. Daher können solche Zuordnungsgruppen vom Kernel gleichzeitig adressiert werden, und mehrere parallele Operationen wirken sich nicht auf die Leistung aus.
- Hohe Datenrettungschancen
XFS verwendet Journaling für Metadaten, das seine Wiederherstellung nach Systemabstürzen oder Stromausfällen erleichtert. Die Benutzerdaten haben im Falle ihres Verlustes ebenfalls hohe Chancen, wiedergewonnen zu werden, allerdings mit externen Datenwiederherstellungstools wie UFS Explorer oder Recovery Explorer. Wenn eine Datei gelöscht wird, entfernt das Dateisystem teilweise die Informationen über ihren Inode und aktualisiert den B+-Baum der freien Extents. Die Information über den Namen dieser Datei ist vom jeweiligen Verzeichniseintrag getrennt. Doch mithilfe von Heuristiken findet die Software den Namen, die Größe und die Position dieser Datei gerundet auf den Block. Die Wahrscheinlichkeit, dass sie wiederhergestellt wird, liegt bei fast 100 %, und mit seinem richtigen Namen – bei 80 %. Im Falle einer versehentlichen Formatierung des Dateisystems werden die Informationen über die verwendeten Extents zerstört und die Zuordnungsgruppen aktualisiert. Die Informationen über Benutzerdateien bleiben jedoch auf dem Speicher, wodurch die Software eine bis zu 100-prozentige Chance hat, sie zurückzubekommen.
Dieses robuste Dateisystem hat jedoch mehrere Schwachstellen. Zunächst einmal verwendet XFS keine Prüfsummen. Daher kann es nicht garantieren, dass die darin gespeicherten Daten immer intakt bleiben. Einige Dateien können unbemerkt beschädigt werden, und die fehlerhaften Bits werden möglicherweise zu spät entdeckt, was zu schwerwiegenden Datenverlusten führt. Außerdem protokolliert XFS keine Änderungen an den Benutzerdaten, wie es mit seinen internen Strukturen macht. Daher kann ein unerwartetes Herunterfahren des Betriebssystems zum Verlust von Informationen von den kürzlich erstellten oder geänderten Dateien führen. Andererseits gibt es keine Möglichkeit, das Journaling vollständig zu deaktivieren, was sich auf die Lebensdauer von Solid-State-Laufwerken auswirken kann. Schließlich kann dieses Dateisystem nicht, breite Kompatibilität vorweisen. Diese Tatsache kann im Falle eines externen Geräts oder eines Dual-Boot-Systems ein Problem darstellen, da Betriebssysteme wie Windows und macOS XFS nicht nativ unterstützen.
Obwohl es einige kleinere Mängel aufweist, ist XFS im Großen und Ganzen ein recht zuverlässiges und vielseitiges Dateisystem. Daher kann es eine ausgezeichnete Formatwahl sein, insbesondere für geräumige Speicherlösungen.
Letzte Aktualisierung: 20. Juli 2022