Wikipedia · einfach zusammengefasst · Stand
ZFS (Dateisystem)
ZFS ist ein von Sun Microsystems entwickeltes transaktionales Dateisystem, das zahlreiche Erweiterungen für die Verwendung im Server- und …
Inhalt6 Abschnitte
Grundidee und Zweck
ZFS ist ein von Sun Microsystems entwickeltes transaktionales Dateisystem für besonders zuverlässige und große Speichersysteme, vor allem im Server- und Rechenzentrumsbereich. Es verbindet mehrere Aufgaben, die bei herkömmlichen Systemen oft getrennt sind: Dateisystem, Volume-Management, softwarebasiertes RAID und prüfsummenbasierter Schutz vor Datenfehlern. Dadurch lassen sich komplexe Speicheraufbauten vergleichsweise einfach verwalten.
ZFS ist ein 128-Bit-Copy-On-Write-Dateisystem. Copy-On-Write bedeutet, dass geänderte Daten nicht direkt an alter Stelle überschrieben werden, sondern zunächst neu geschrieben werden. Dadurch kann ZFS jederzeit auf einen konsistenten Zustand zurückgreifen. Nach einem Stromausfall ist deshalb normalerweise keine Dateisystemprüfung mit fsck nötig.
Der Name ZFS war ursprünglich ein Backronym für „Zettabyte File System“, gilt heute aber als Pseudo-Akronym. Die Erstveröffentlichung erfolgte im Juni 2006 mit Solaris 10. ZFS unterstützt unter anderem POSIX-Dateirechte und ACLs, transparente Komprimierung mit Verfahren wie LZJB, gzip, LZ4 und zle sowie transparente Verschlüsselung seit Oracle Solaris 11 Express 2010.11.
Pools und Verwaltung
Die zentrale Verwaltungseinheit in ZFS ist der Pool, auch zPool genannt. Ein Pool wird aus physischen Datenträgern oder Datenspeicher-Geräten gebildet. Innerhalb eines Pools können beliebig viele logische Partitionen beziehungsweise Dateisysteme angelegt werden. Diese können dynamisch wachsen und, soweit es die Größe des Pools erlaubt, auch verkleinert werden.
Für jedes Dateisystem können Mindest- und Höchstgrößen festgelegt werden, um administrative Grenzen einzuhalten. Außerdem können Dateisysteme hierarchisch angeordnet werden. In einer solchen Struktur lassen sich Einstellungen und andere Parameter vererben. ZFS kann außerdem Bereiche eines Pools als dedizierte Block-Devices bereitstellen, also als datenblockorientierte Geräte.
Ein wichtiger Vorteil von ZFS ist die einfache Administration. Um einen Pool über mehrere Festplatten zu erzeugen und darauf eine Partition anzulegen, reichen laut Artikel zwei einfach strukturierte Befehle. Partitionierung, Aufbau des logischen Volumens und Einhängen in das bestehende Dateisystem werden automatisch erledigt, können bei Bedarf aber auch manuell vorgenommen werden.
Ausfallsicherheit und Datenkorrektur
ZFS kann Pools ausfallsicher anlegen. Dazu werden aus mehreren physischen Datenträgern per Software-RAID Redundanz-Gruppen gebildet. Eine oder mehrere solcher Gruppen ergeben dann einen ausfallsicheren Pool. Weil das RAID-System in ZFS integriert ist, kann ZFS zwischen belegten und freien Datenblöcken unterscheiden. Bei einer Wiederherstellung müssen daher nur belegte Bereiche gespiegelt werden, was besonders bei wenig gefüllten Dateisystemen viel Zeit sparen kann.
ZFS unterstützt mehrere RAID-Arten. Bei Spiegelung, also RAID-1, bilden zwei oder mehr Festplatten eine gespiegelte Redundanz-Gruppe; Daten werden dabei zweimal oder öfter gespeichert. RAID-Z1 ähnelt RAID-5 und erlaubt bei mindestens drei Festplatten den Ausfall einer Festplatte ohne Datenverlust. RAID-Z2 entspricht weitgehend RAID 6 und ist seit Solaris Express 47 verfügbar. Seit Juli 2009 gibt es RAID-Z3 mit 3 Paritätsbits. Striping, also die Geschwindigkeitsoptimierung durch parallelen Zugriff wie bei RAID-0, nimmt ZFS automatisch vor.
Ein besonderer Schutz besteht darin, dass jeder einzelne Block im Dateisystem eine Prüfsumme erhält. Eine Prüfsumme ist ein Kontrollwert, mit dem ZFS Datenfehler erkennen kann, zum Beispiel Übertragungsfehler. Wenn redundante Informationen vorhanden sind, kann ZFS solche Fehler automatisch und ohne manuellen Eingriff korrigieren. Der Performance-Verlust wird im Artikel als minimal beschrieben.
Snapshots, Deduplikation und Leistung
Durch Copy-On-Write kann ZFS sehr schnell Snapshots erstellen. Ein Snapshot ist ein eingefrorener Zustand eines Dateisystems zu einem bestimmten Zeitpunkt. Er entsteht praktisch sofort, während das Dateisystem online bleibt. Spätere Schreibvorgänge speichern dann die Unterschiede zum letzten Snapshot. ZFS-Snapshots können zum Lesen gemountet oder mit „zfs send“ archiviert werden. ZFS-Clones sind beschreibbare Snapshots.
Seit Oktober 2009 unterstützt ZFS Deduplikation. Dabei werden Datenblöcke mit identischem Inhalt nur einmal physisch gespeichert. Das spart Speicherplatz, etwa bei virtuellen Festplatten für virtuelle Maschinen mit ähnlichen Betriebssysteminstallationen oder bei gleichartigen Backups. Deduplikation benötigt jedoch viel RAM, weshalb ZFS in diesem Zusammenhang als ressourcenhungrig bezeichnet wurde. In OpenZFS wird daher häufig eher LZ4-Kompression genutzt, die auf Geschwindigkeit ausgelegt ist und keinen zusätzlichen Speicher benötigt.
ZFS gilt als relativ schnelles Dateisystem. Wegen integrierter RAID-Funktionen und End-to-End-Checksummen erreicht es auf älteren oder langsameren Systemen aber nicht immer die Geschwindigkeit einfacherer Dateisysteme. Die Leistung hängt auch davon ab, welche RAID-Funktionalität genutzt wird und ob einzelne Festplatten unabhängig voneinander und gleichzeitig Daten übertragen können. Wie bei anderen Dateisystemen sinkt die Leistung ab etwa 80 % Belegung spürbar.
Kapazität und technische Grenzen
ZFS ist für sehr große Datenmengen ausgelegt. Grundlage ist die Verwendung von 128-Bit-Zeigern. Theoretisch kann ein Pool bis zu 2^128 Byte groß sein. Die maximale Anzahl von Dateien in einem Dateisystem beträgt 2^48, ebenso die maximale Anzahl von Dateien in einem Verzeichnis. Die maximale Anzahl von Geräten im Pool, Dateisystemen im Pool und Pools im System liegt jeweils bei 2^64.
In aktuellen Implementierungen sind einige Grenzen praktischer. Als maximale Größe des Dateisystems und maximale Größe einer Datei werden jeweils 16 EiB, also 2^64 Byte, genannt. Der Artikel weist darauf hin, dass diese Beschränkungen nur durch aktuelle Implementationen entstehen; per Definition könnte ZFS deutlich größere Datenmengen speichern.
Bei Solaris und FreeBSD werden 64-Bit-Datentypen verwendet, weil es in C derzeit keine architektur- und compilerübergreifend nutzbaren 128-Bit-Datentypen gibt. Im Wesentlichen werden die ersten 64 Bits eines Zeigers zusammen mit 64 Nullen gespeichert, die bei der Verarbeitung ignoriert werden. Dadurch können bestehende Dateisysteme später weiterverwendet werden, falls sie als echte 128-Bit-Dateisysteme genutzt werden.
Entwicklung, Varianten und Kritik
Sun entwickelte ZFS seit 2001 für Solaris und veröffentlichte es 2006 mit Solaris 10 6/06 offiziell mit kommerziellem Support. Außerdem stellte Sun ZFS unter der Common Development and Distribution License, kurz CDDL, für OpenSolaris bereit. Das Projekt wurde vom Sun-Team unter Leitung von Jeff Bonwick entworfen und umgesetzt.
ZFS wurde früh auf FreeBSD portiert und ist seit FreeBSD 7.0, veröffentlicht Anfang 2008, im Basissystem enthalten; mit FreeBSD 8.0 Ende 2009 galt es dort als stabil. Apple integrierte zunächst lesende ZFS-Unterstützung in Mac OS X Leopard, setzte eine vollständige Implementierung für Mac OS X Server 10.6 aber nicht um und stellte das Projekt am 23. Oktober 2009 ein. Unter Linux war eine Integration in die offiziellen Kernelquellen aus Lizenzgründen problematisch. ZFS on FUSE machte ZFS zwar nutzbar, lief aber im Userspace und hatte Nachteile wie geringeren Datendurchsatz; es wird seit 2012 nicht mehr weiterentwickelt.
Nach der Übernahme von Sun durch Oracle in den Jahren 2009 bis 2010 wurde ZFS im Rahmen von Solaris weiterentwickelt, allerdings nicht öffentlich. Im September 2013 entstand OpenZFS, um die von Sun beziehungsweise Oracle unabhängigen Entwicklungen zusammenzuführen und betriebssystemübergreifend zu vereinheitlichen. OpenZFS ist grundsätzlich zu Oracle ZFS kompatibel, aber nicht vollständig. Es gibt Zweige für illumos, FreeBSD, Linux, macOS und Windows.
Kritisiert wird, dass ZFS vor allem für Server und Rechenzentren entworfen wurde. Für Arbeitsplatzrechner und eingebettete Systeme kann die notwendige Pool-Anlage unpraktisch sein. Außerdem unterstützt ZFS bisher kein Shrinking von Partitionen, was Systeme mit nur einer Festplatte erschwert. Die Verarbeitung von 128-Bit-Pointern ist auf heutigen 32-Bit- oder 64-Bit-CPUs vergleichsweise aufwendig und bringt vor allem dort Vorteile, wo ungewöhnlich große Datenmengen gespeichert werden sollen.