ZFS ist ein von Sun Microsystems entwickeltes transaktionales Dateisystem, das zahlreiche Erweiterungen für die Verwendung im Server- und Rechenzentrumsbereich enthält. Hierzu zählen die vergleichsweise große maximale Dateisystemgröße, eine einfache Verwaltung selbst komplexer Konfigurationen, die integrierten RAID-Funktionalitäten, das Volume-Management sowie der prüfsummenbasierte Schutz vor Datenübertragungsfehlern. Der Name ZFS war ursprünglich ein Backronym für Zettabyte File System, ist aber inzwischen ein Pseudo-Akronym.

Eigenschaften ZFS ist ein 128-Bit Copy-On-Write-Dateisystem mit einer im Vergleich zu herkömmlichen Dateisystemen deutlich erweiterten Funktionalität. Bei herkömmlichen Dateisystemen verwaltet genau ein Dateisystem genau eine Partition. Sollen mehrere physische Partitionen zu logischen Partitionen zusammengefasst werden, muss hierzu eine zusätzliche Logical-Volume-Manager-Software installiert werden. Zur Ausfallsicherung können viele Dateisysteme zusätzlich durch ein optionales softwarebasiertes RAID-Subsystem (Software-RAID) abgesichert werden. ZFS fasst diese drei Funktionen zusammen und ergänzt diese um einen prüfsummenbasierten Schutz vor Datenübertragungsfehlern.

Datenträger-Pools In der Praxis werden zunächst aus physischen Datenträgern (eigentlich Datenspeicher-Geräten) logische Einheiten – sogenannte Pools (bzw. zPools) – gebildet, welche optional auch ausfallsicher ausgelegt sein können (RAID). Innerhalb eines Pools können dann beliebig viele logische Partitionen (mit je einem Dateisystem) angelegt werden, wobei diese, soweit es die Größe des Pools zulässt, dynamisch wachsen, aber auch verkleinert werden können. Um administrative Einschränkungen durchzusetzen, kann für jede logische Partition eine minimale und maximale Größe vorgegeben werden. Die logischen Partitionen können dabei in eine hierarchische Struktur eingebettet werden, innerhalb derer diese und andere Parameter auch vererbt werden können. Weiterhin ist es möglich, Datenbereiche aus Pools als dedizierte „Block-Devices“ (siehe auch Datenblock-orientierte Geräte) zur Verfügung zu stellen.

Die zweite Besonderheit von ZFS ist die besonders einfache Administration. Um einen Pool über mehrere Festplatten zu erzeugen und auf diesem eine Partition anzulegen, werden lediglich zwei einfach strukturierte Befehle benötigt. Das Partitionieren, Aufbauen des logischen Volumens und schließlich das Einhängen ins bestehende Dateisystem werden automatisch erledigt, können aber bei Bedarf auch manuell vorgenommen werden.

Ausfallsicherheit Redundanz Wie bei einem klassischen Volume-Manager können die zugrunde liegenden Pools ausfallsicher angelegt sein. Hierzu werden aus mehreren physischen Datenträgern per Software-RAID sogenannte Redundanz-Gruppen gebildet, eine oder mehrere dieser redundanten Gruppen bilden dann einen ausfallsicheren Pool. Das in das Dateisystem integrierte RAID-Subsystem bietet gegenüber klassischen Hardware- oder Software-Raid-Implementierungen den Vorteil, dass zwischen belegten und freien Datenblöcken unterschieden werden kann und somit bei der Rekonstruktion eines Raid-Volumens nur belegter Plattenplatz gespiegelt werden muss, hieraus resultiert im Schadensfall, besonders bei wenig gefüllten Dateisystemen, eine enorme Zeitersparnis. ZFS stellt mehrere RAID-Level zur Auswahl. Bei der Spiegelung (RAID-1) bilden zwei (oder mehr) Festplatten eine gespiegelte Redundanz-Gruppe, wobei die Daten zweimal oder öfter gespeichert werden können. Weiter gibt es zwei RAID-Z genannte Implementierungen. RAID-Z1 arbeitet ähnlich wie RAID-5, RAID-Z2 entspricht weitestgehend RAID 6. Bei RAID-Z1 bilden drei (oder mehr) Festplatten die Redundanz-Gruppe, dabei sind die Daten wie bei einem RAID 5 System paritätsgesichert, so dass eine der Festplatten ausfallen kann, ohne dass dabei Datenverluste entstehen. Durch das integrierte Design des ZFS wird jedoch im Gegensatz zu RAID-5 kein batteriegepufferter Speicher (NVRAM) benötigt, da keine Schreiblücke (write hole) zwischen Daten-Schreiben und Parity-Schreiben auftritt. Die RAID-Z2 genannte, ebenfalls schreiblückenfreie Implementierung von RAID-6 ist seit Solaris Express 47 verfügbar. Seit Juli 2009 ist auch RAID-Z3, also eine RAID-Z-Implementierung mit 3 Paritätsbits, verfügbar.Adam Leventhal: Triple-Parity RAID-Z in Adam Leventhal’s Weblog; abgerufen am 2. November 2009. Die Geschwindigkeitsoptimierung durch parallelen Zugriff (RAID-0 – Striping) wird von ZFS automatisch vorgenommen.

Snapshots Copy-On-Write erlaubt es, sehr effizient Snapshots zu erstellen, dies geschieht praktisch sofort und das Dateisystem bleibt online. Ein Snapshot friert den aktuellen Dateisystemzustand ein, darauf folgende Schreiboperationen repräsentieren jeweils die Differenzen zum letzten Snapshot. ZFS-Snapshots können zum Lesen gemountet oder auch archiviert (zfs send) werden, des Weiteren gibt es ZFS-Clones, diese entsprechen einem beschreibbaren Snapshot.

Automatische Datenfehlerkorrektur Neben den Möglichkeiten, Daten gegen Festplattenausfälle zu sichern, wird außerdem jeder einzelne Block im Dateisystem mit einer Prüfsumme versehen, sodass Datenfehler im Dateisystem (z. B. verursacht durch Datenübertragungsfehler) automatisch erkannt und ggf. ohne manuellen Eingriff behoben werden können. Der Performance-Verlust ist dabei minimal. Auch stellt ZFS sicher, dass der Zustand des Dateisystems zu jeder Zeit konsistent ist und deshalb auch beispielsweise nach einem Stromausfall kein Überprüfen des Dateisystems (per fsck) notwendig ist.

Deduplikation Im Oktober 2009 wurde Deduplikation für ZFS freigegeben. Dadurch werden Blöcke mit identischem Inhalt nur noch einmal physisch abgelegt, was hilft Plattenplatz zu sparen. Ein typischer Anwendungsfall ist das Anlegen von virtuellen Festplatten für virtuelle Maschinen, die jeweils alle eine Installation eines virtualisierten Betriebssystems enthalten. Eine weitere wäre aus gleichartigen Backups redundante Information zu entfernen. Deduplikation benötigt allerdings viel RAM, wodurch ZFS bei Nutzung als ressourcenhungrig bezeichnet wurde. In OpenZFS bietet sich daher eher die LZ4 Kompression an, die eher auf Geschwindigkeit als auf Kompression ausgelegt ist und keinen zusätzlichen Speicher benötigt.

Performance Weiterhin ist ZFS ein relativ schnelles Dateisystem; aufgrund der integrierten RAID-Funktionen und End-To-End-Checksummen kommt es jedoch in der Geschwindigkeit auf älteren bzw. langsameren Systemen nicht an einfachere Dateisysteme heran, wobei die Performance von ZFS auch davon abhängig ist, welche RAID-Funktionalität genutzt wird und ob die einzelnen Platten unabhängig voneinander und gleichzeitig Daten transferieren können.

Datenkapazität ZFS ist für sehr große Datenmengen ausgelegt, was durch die durchgängige Verwendung von 128-Bit-Zeigern erreicht wird. In der Praxis sind die Grenzen jedoch mit denen eines 64-Bit-Dateisystems vergleichbar. Bei der Implementation unter Solaris und beispielsweise auch FreeBSD werden 64-Bit-Datentypen verwendet, da es in C derzeit keine architektur- und compilerübergreifend nutzbaren 128-Bit-Datentypen gibt. Im Wesentlichen werden die ersten 64 Bits des Zeigers immer zusammen mit 64 Nullen abgespeichert, die bei der Verarbeitung ignoriert werden. Das ermöglicht es, bestehende Dateisysteme später als echte 128-Bit-Dateisysteme weiterhin verwenden zu können.

Weiterentwicklung Sun entwickelte ZFS seit 2001 für das Betriebssystem Solaris und hat es 2006 mit Solaris 10 6/06 offiziell, inklusive kommerziellem Support, veröffentlicht. Zudem stellte Sun ZFS unter der Common Development and Distribution License (CDDL) für OpenSolaris (ab Build 27a) bereit. ZFS war auf allen von Solaris unterstützten Architekturen verfügbar: SPARC und x86 (sowohl 32-Bit-x86, IA-32, als auch 64-Bit, x64). Entworfen und umgesetzt wurde das Projekt vom Sun-Team unter der Leitung von Jeff Bonwick.

Auf Basis der Veröffentlichung von Sun wurde ZFS von Pawel Jakub Dawidek, mit Unterstützung durch Sun-Entwickler, bereits früh auf FreeBSD portiertlists.freebsd.org und ist seit FreeBSD 7.0 (veröffentlicht Anfang 2008) im Basissystem enthalten, wurde damals aber noch als experimentell eingestuft; Mit FreeBSD 8.0 (Ende 2009) gilt es als stabil.svn.freebsd.org

Auch Apple hatte ZFS-Unterstützung, vorerst nur lesend, in Mac OS X Leopard (veröffentlicht Ende 2007) integriert. Volle Implementierung war für die Server-Version 10.6 (Snow Leopard, 2009) angekündigt worden, wurde dann jedoch doch nicht umgesetzt. Stattdessen wurden auf Apples Open-Source-Projektseite Mac OS Forge Quelltext und Binärprogramme der ZFS-Portierung veröffentlicht. Am 23. Oktober 2009 gab Apple dort bekannt, dass das ZFS-Projekt eingestellt worden war.Vgl. (23. Oktober 2009): „The ZFS project has been discontinued. The mailing list and repository will also be removed shortly.“ Don Brady, der bei Apple für die Entwicklung von ZFS zuständig gewesen war, gründete nach seinem Austritt bei Apple die Firma Ten’s Complement und entwickelte dort das Dateisystem unter dem Namen ZEVO weiter. 2012 wurde die Firma von GreenBytes übernommen, die 2014 wiederum von Oracle übernommen wurde. Obwohl ZEVO kostenpflichtige kommerzielle Software war gab es von GreenBytes 2012 eine gratis.

Eine direkte Unterstützung innerhalb des Linux-Kernels ist aus Lizenzgründen problematisch, daher gibt es keine in die offiziellen Kernelquellen integrierte Linux-Implementierung. Allerdings wurde mit dem Projekt ZFS on FUSE eine Implementierung geschaffen, die ZFS auch unter Linux nutzbar machte. Diese lief jedoch im Userspace und hatte dadurch verschiedene Nachteile, unter anderem einen verminderten Datendurchsatz. ZFS on FUSE wird seit 2012 nicht mehr weiterentwickelt, die letzte Version ist 0.7.0 und erschien am 9. März 2011.github.com/zfs-fuse (abgerufen am 5. Mai 2020) Dessen Ersatz ist die OpenZFS-Portierung ZFS on Linux.

Oracle ZFS Nach der Übernahme von Sun durch Oracle (in den Jahren 2009 bis 2010) findet die Weiterentwicklung von ZFS im Rahmen von Solaris statt. Da diese jedoch nicht öffentlich ist, ist auch nicht leicht zu erkennen, wie engagiert Oracle dabei tatsächlich vorgeht.

OpenZFS Unter der Bezeichnung OpenZFS wurde im September 2013 damit begonnen, alle bisherigen, von Sun bzw. Oracle unabhängigen Entwicklungen in einem Projekt zusammenzuführen. Dabei sollte das Dateisystem unter anderem auch betriebssystemübergreifend vereinheitlicht werden.OpenZFS: Community will ZFS-Implementierungen vereinheitlichen – Artikel bei Golem.de, vom 18. September 2013 (Abgerufen am: 24. September 2013)Announcement (englisch) – Ankündigung bei OpenZFS, vom 17. September 2013 (Abgerufen am: 24. September 2013)

Als Basis dienten die bereits vorhandenen Weiterentwicklungen, wie jene aus FreeBSD, die wiederum auf der CDDL-Veröffentlichung von Sun basieren. OpenZFS ist daher grundsätzlich zwar zu Oracle ZFS kompatibel, aber nicht vollständig. Von OpenZFS gibt es einzelne Entwicklungszweige für diverse Betriebssysteme: illumos – OpenZFS ist in das Betriebssystem integriert ZFS on FreeBSD (ZoF) ZFS on Linux (ZoL) OpenZFS on macOS (O3X) OpenZFS on Windows (ZFSin)

Das als Abspaltung von OpenSolaris hervorgegangene freie Betriebssystem illumos dient den OpenZFS-Portierungen als Basis. Neue Funktionen und Weiterentwicklungen werden so in illumos direkt eingepflegt und daraus von den Portierungen, und somit betriebssystemübergreifend, übernommen.

Auch in FreeBSD ist ZFS integriert und kann wahlweise genutzt werden. Einige Distribution verwenden sogar primär ZFS, wie beispielsweise TrueNAS Core (vormals FreeNAS). Von dieser Distribution ist auch eine Enterprise-Version, wahlweise mit zertifizierter Hardware, genannt TrueNAS Enterprise, verfügbar. Für beide Versionen trägt die Firma iXsystems die Projektverantwortung.