ZFS is een lokaal bestandssysteem en logische volumemanager gemaakt door Sun Microsystems Inc. om de plaatsing, opslag en het ophalen van gegevens in computersystemen van ondernemingsklasse te sturen en te controleren.
Het ZFS-bestandssysteem en de volumemanager worden gekenmerkt door gegevensintegriteit, hoge schaalbaarheid en ingebouwde opslagfuncties zoals:
- Replicatie – het proces van het maken van een replica (een kopie) van iets.
- Deduplicatie – een proces waarbij overbodige kopieën van gegevens worden geëlimineerd en de opslagoverhead wordt verminderd.
- Compressie – een vermindering van het aantal bits dat nodig is om gegevens weer te geven.
- Snapshots – een reeks referentiemarkeringen voor gegevens op een bepaald tijdstip.
- Clonen – een identieke kopie van iets.
- Gegevensbescherming – het proces van het beveiligen van belangrijke informatie tegen corruptie en/of verlies.
Geschiedenis van ZFS
De technici van Sun begonnen in 2001 met de ontwikkeling van ZFS voor het op Unix gebaseerde besturingssysteem Solaris (OS). In 2005 gaf Sun de broncode van ZFS vrij onder een gemeenschappelijke ontwikkelings- en distributielicentie (CDDL) als onderdeel van het open-source OpenSolaris OS. Een gemeenschap van ontwikkelaars, waaronder vertegenwoordigers van Sun en andere leveranciers, werkte aan verbeteringen aan de open source code en portte ZFS naar andere besturingssystemen, waaronder FreeBSD, Linux en Mac OS X.
Het OpenSolaris open source project, dat ZFS omvatte, eindigde nadat Oracle Corp. Sun in 2010 overnam en het handelsmerk voor de term ZFS opnam. Ingenieurs bij Oracle blijven verbeteringen aanbrengen en functies toevoegen aan ZFS op Solaris. Oracle gebruikt zijn eigen ZFS-code als basis voor Oracle Solaris, de Oracle ZFS Storage Appliance en andere Oracle-technologieën.
Een ontwikkelingsgemeenschap is een nieuw open source-project gestart, OpenZFS genaamd, gebaseerd op de ZFS-broncode in de definitieve release van OpenSolaris. De open gemeenschap werkt aan nieuwe functies, verbeteringen en bug fixes voor de OpenZFS-code. Besturingssystemen die OpenZFS ondersteunen zijn onder meer Apple OS X, FreeBSD, illumos (dat is gebaseerd op OpenSolaris), en Linux-varianten zoals Debian, Gentoo en Ubuntu. OpenZFS werkt op alle Linux distributies, maar slechts enkele commerciële verkopers bieden het aan als onderdeel van hun distributies. Bedrijven met commerciële producten gebouwd op OpenZFS zijn onder andere Cloudscaling, Datto, Delphix, Joyent, Nexenta, SoftNAS en Spectra Logic.
ZFS en OpenZFS hebben de neiging om ondernemingen aan te spreken die grote hoeveelheden gegevens moeten beheren en de integriteit van gegevens moeten waarborgen. Gebruikers zijn onder meer wetenschappelijke instellingen, nationale laboratoria, overheidsinstellingen, financiële bedrijven, telecommunicatiebedrijven en media- en entertainmentbedrijven.
ZFS stond aanvankelijk voor Zettabyte File System, maar het woord zettabyte heeft in de context van het bestandssysteem niet langer enige betekenis. Als een 128-bit bestandssysteem, heeft ZFS de potentie om te schalen naar 256 quadriljoen zettabytes.
Hoe ZFS werkt
ZFS is ontworpen om op een enkele server te draaien, mogelijk met honderden, zo niet duizenden, aangesloten opslagschijven. ZFS bundelt de beschikbare opslag en beheert alle schijven als een enkele entiteit. Een gebruiker kan meer opslagschijven aan de pool toevoegen als het bestandssysteem extra capaciteit nodig heeft. ZFS is zeer schaalbaar en ondersteunt een grote maximale bestandsgrootte.
ZFS slaat ten minste twee kopieën van metagegevens op telkens wanneer gegevens naar de schijf worden geschreven. De metagegevens bevatten informatie zoals de schijfsectoren waar de gegevens zijn opgeslagen, de grootte van de gegevensblokken en een controlesom van de binaire cijfers van een stuk gegevens. Wanneer een gebruiker toegang tot een bestand vraagt, voert een controlesomalgoritme een berekening uit om na te gaan of de opgehaalde gegevens overeenstemmen met de oorspronkelijke bits die naar de schijf zijn geschreven. Als de controlesom een inconsistentie detecteert, worden de slechte gegevens gemarkeerd. In systemen met een gespiegelde opslagpool of de ZFS-versie van RAID, kan ZFS de juiste kopie van de andere schijf ophalen en de beschadigde gegevenskopie repareren.
ZFS wordt meestal een copy-on-write bestandssysteem genoemd, hoewel Oracle het beschrijft als redirect on write. Wanneer ZFS gegevens naar de schijf schrijft, overschrijft het de bestaande gegevens niet. ZFS schrijft een nieuw blok naar een andere plek op de schijf en werkt de metagegevens bij om naar het nieuw geschreven blok te verwijzen, terwijl ook oudere versies van de gegevens behouden blijven.
Een echt copy-on-write bestandssysteem zou een exacte kopie van een gegevensblok op een aparte locatie maken voordat het oorspronkelijke blok wordt overschreven. Alvorens de gegevens te overschrijven, zou het systeem de vorige waarde van het blok moeten lezen. Een copy-on-write bestandssysteem vereist drie I/O-bewerkingen — lezen, wijzigen en schrijven — voor elke gegevensschrijver. Een redirect-on-write systeem daarentegen vereist slechts één I/O operatie, wat een grotere efficiëntie en hogere prestaties mogelijk maakt.
ZFS is een populaire keuze voor netwerk-attached storage systemen, waarbij NFS bovenop het bestandssysteem draait, en ook in virtuele server omgevingen. Een ander veelvoorkomend implementatiescenario is het leggen van een geclusterd bestandssysteem, zoals het General Parallel File System (GPFS) of Lustre, bovenop ZFS om schaling naar extra server nodes mogelijk te maken. OpenStack-gebruikers kunnen ZFS inzetten als het onderliggende bestandssysteem voor Cinder block storage en Swift object storage.
Kernmerken van ZFS
Snapshots en klonen: ZFS en OpenZFS kunnen point-in-time kopieën van het bestandssysteem maken met grote efficiëntie en snelheid omdat het systeem alle kopieën van de gegevens behoudt. Snapshots zijn onveranderlijke kopieën van het bestandssysteem, terwijl klonen kunnen worden gewijzigd. Snapshots en clones zijn geïntegreerd in boot omgevingen met ZFS op Solaris, waardoor gebruikers kunnen terugdraaien naar een snapshot als er iets fout gaat wanneer ze het systeem patchen of updaten. Een ander potentieel voordeel van ZFS is als een hersteltechniek tegen ransomware.
RAID-Z: RAID-Z maakt het mogelijk om dezelfde gegevens op meerdere locaties op te slaan om fouttolerantie te verbeteren en prestaties te verbeteren. Het systeem reconstrueert de gegevens op de verloren schijf met behulp van de informatie die op de andere schijven van het systeem is opgeslagen. Net als bij RAID 5 wordt bij RAID-Z de pariteitsinformatie over elke schijf gestreept, zodat het opslagsysteem kan blijven functioneren, zelfs als één schijf uitvalt. Bij RAID-Z zijn de gestreepte gegevens echter een volledig blok, dat in grootte kan variëren. Hoewel RAID-Z meestal wordt vergeleken met RAID 5, voert het sommige operaties anders uit om bepaalde reeds lang bestaande problemen met traditionele RAID op te lossen. Eén probleem dat met RAID-Z wordt aangepakt, is het zogenaamde “write hole”-effect, waarbij een systeem niet kan bepalen welke gegevens- of pariteitsblokken naar de schijf zijn geschreven als gevolg van een stroomstoring of een catastrofale systeemonderbreking. Verkopers van systemen die traditionele RAID gebruiken, lossen dit probleem meestal op door een ononderbroken stroomvoorziening of speciale hardware te gebruiken.
RAID-Z2 ondersteunt het verlies van twee opslagschijven, vergelijkbaar met RAID 6, en RAID-Z3 kan het verlies van drie opslagapparaten tolereren. Gebruikers hebben de mogelijkheid om schijven in groepen te rangschikken, net als bij conventionele RAID. Zo kan een systeem met twee groepen van zes schijven dat als RAID-Z3 is opgezet, het verlies van drie schijven in elke groep verdragen.
Compressie: Inline gegevenscompressie is een ingebouwde functie in ZFS en OpenZFS om het aantal bits dat nodig is om gegevens op te slaan te verminderen. ZFS en OpenZFS ondersteunen elk een aantal compressie-algoritmen. Gebruikers hebben de mogelijkheid om inline compressie aan of uit te zetten.
Deduplicatie: Inline data deduplication is een ingebouwde functie in ZFS en OpenZFS die opslag efficiëntie mogelijk maakt door het elimineren van overbodige gegevens. ZFS en OpenZFS vinden de dubbele gegevens door te kijken naar de controlesom voor een blok, die in grootte kan variëren. Gebruikers kunnen inline deduplicatie in- of uitschakelen.
ZFS send/receive: ZFS en OpenZFS maken het mogelijk een momentopname van het bestandssysteem naar een ander servernooppunt te sturen, waardoor een gebruiker gegevens naar een apart systeem kan repliceren voor doeleinden als back-up of gegevensmigratie naar cloud-opslag.
Veiligheid: ZFS en OpenZFS ondersteunen gedelegeerde machtigingen en fijnmaziger toegangscontrolelijsten om te beheren wie beheertaken kan uitvoeren. Gebruikers hebben de optie om ZFS in te stellen als alleen-lezen, zodat geen gegevens kunnen worden gewijzigd. Oracle ondersteunt encryptie in ZFS op Solaris.
ZFS voordelen en beperkingen
ZFS integreert het bestandssysteem en de volumebeheerder, zodat gebruikers geen aparte tools en reeksen commando’s hoeven aan te schaffen en te leren. ZFS biedt een rijke set functies en gegevensdiensten zonder kosten, omdat het is ingebouwd in het Oracle OS. Open source OpenZFS is vrij beschikbaar. Het bestandssysteem kan worden uitgebreid door schijven aan de opslagpool toe te voegen. Traditionele bestandssystemen vereisen dat de schijfpartitie wordt aangepast om de capaciteit te vergroten, en gebruikers hebben vaak volumebeheerproducten nodig om hen te helpen.
ZFS is beperkt tot het draaien op een enkele server in tegenstelling tot gedistribueerde of parallelle bestandssystemen, zoals GPFS en Lustre, die kunnen worden opgeschaald naar meerdere servers.
De rijke functieset die wordt geboden met ZFS kan de software ingewikkeld maken in gebruik en beheer. Functies zoals de geïntegreerde ZFS-controlesomalgoritmen kunnen extra verwerkingskracht vereisen en de prestaties beïnvloeden.
In de Linux-gemeenschap zijn er verschillende meningen over licenties met betrekking tot de herdistributie van de ZFS-code en binaire kernelmodules. Red Hat vindt het bijvoorbeeld problematisch om code te distribueren die beschermd is onder een CDDL met code die beschermd is onder een algemene openbare licentie (GPL). Canonical, die Ubuntu distribueert, heeft daarentegen vastgesteld dat het in overeenstemming is met de voorwaarden van de CDDL en GPL-licenties.
ZFS vs. OpenZFS
Oracle’s ZFS en open source OpenZFS zijn afgeleid van dezelfde ZFS-broncode. Op afzonderlijke sporen hebben Oracle en de open source-gemeenschap uitbreidingen toegevoegd en aanzienlijke prestatieverbeteringen aangebracht aan respectievelijk ZFS en OpenZFS. De Oracle ZFS-updates zijn eigendom van Oracle en alleen beschikbaar in Oracle-technologieën. Updates voor de open source OpenZFS-code zijn vrij beschikbaar.
De lijst met verbeteringen die Oracle sinds 2010 aan ZFS heeft aangebracht, omvat:
- encryptie;
- ondersteuning voor de persistentie van gecomprimeerde gegevens over OS reboots in de L2 adaptieve vervangingscache (ARC);
- bootable Extensible Firmware Interface-labels die ondersteuning bieden voor fysieke schijven en virtuele schijfvolumes van meer dan 2 TB groot;
- standaard gebruikers- en groepsquota; en
- pool / bestandssysteem monitoring.
De lijst van updates die de open source gemeenschap heeft gemaakt voor OpenZFS omvat:
- additional compression algorithms;
- resumable send/receive, which allows a long-running ZFS send/receive operation to restart from the point of a system interruption;
- compressed send/receive, which allows the system to send compressed data from one ZFS pool to another without having to decompress/recompress the data when moving from the sending node to the destination;
- compressed ARC, waarmee ZFS gecomprimeerde gegevens in het geheugen kan bewaren, waardoor een grotere set werkgegevens in de cache mogelijk wordt; en
- maximale blokgrootte verhoging van 128 KB naar 16 MB om de prestaties te verbeteren bij het werken met grote bestanden en de reconstructie van gegevens te versnellen bij het herstellen van een schijfstoring.