ZFS er et lokalt filsystem og en logisk volumemanager skabt af Sun Microsystems Inc. til at lede og styre placering, lagring og hentning af data i computersystemer i virksomhedsklassen.
ZFS-filsystemet og volumemanageren er kendetegnet ved dataintegritet, høj skalerbarhed og indbyggede lagringsfunktioner som:
- Replikation – processen med at lave en kopi (en kopi) af noget.
- Deduplikering – en proces, der eliminerer redundante kopier af data og reducerer lageroverhead.
- Komprimering – en reduktion i antallet af bits, der er nødvendige for at repræsentere data.
- Snapshots – et sæt referencemarkeringer for data på et bestemt tidspunkt.
- Kloner – en identisk kopi af noget.
- Databeskyttelse – processen til sikring af vigtige oplysninger mod korruption og/eller tab.
Historie om ZFS
Sun-ingeniører begyndte udviklingsarbejdet på ZFS i 2001 til selskabets Unix-baserede Solaris-operativsystem (OS). I 2005 frigav Sun ZFS-kildekoden under en fælles udviklings- og distributionslicens (CDDL) som en del af open source-operativsystemet OpenSolaris. Et fællesskab af udviklere, herunder repræsentanter fra Sun og andre leverandører, arbejdede på forbedringer af open source-koden og porterede ZFS til flere operativsystemer, herunder FreeBSD, Linux og Mac OS X.
OpenSolaris open source-projektet, som omfattede ZFS, ophørte, efter at Oracle Corp. opkøbte Sun i 2010 og tog varemærket ZFS som varemærke. Ingeniører hos Oracle fortsætter med at forbedre og tilføje funktioner til ZFS på Solaris. Oracle bruger sin proprietære ZFS-kode som grundlag for Oracle Solaris, Oracle ZFS Storage Appliance og andre Oracle-teknologier.
Et udviklingsfællesskab startede et nyt open source-projekt, kaldet OpenZFS, baseret på ZFS-kildekoden i den endelige udgave af OpenSolaris. Det åbne fællesskab arbejder på nye funktioner, forbedringer og fejlrettelser i OpenZFS-koden. De operativsystemer, der understøtter OpenZFS, omfatter Apple OS X, FreeBSD, illumos (som er baseret på OpenSolaris) og Linux-varianter som Debian, Gentoo og Ubuntu. OpenZFS fungerer på alle Linux-distributioner, men kun nogle kommercielle leverandører leverer det som en del af deres distributioner. Virksomheder med kommercielle produkter, der er bygget på OpenZFS, omfatter Cloudscaling, Datto, Delphix, Joyent, Nexenta, SoftNAS og Spectra Logic.
ZFS og OpenZFS har tendens til at appellere til virksomheder, der skal håndtere store datamængder og sikre dataintegritet. Blandt brugerne er videnskabelige institutioner, nationale laboratorier, offentlige myndigheder, finansielle virksomheder, telekommunikationsselskaber samt medie- og underholdningsvirksomheder.
ZFS stod oprindeligt for Zettabyte File System, men ordet zettabyte har ikke længere nogen betydning i forbindelse med filsystemet. Som et 128-bit filsystem har ZFS potentiale til at skalere til 256 quadrillioner zettabyte.
Sådan fungerer ZFS
ZFS er designet til at køre på en enkelt server, potentielt med hundredvis, hvis ikke tusindvis af tilknyttede lagerdrev. ZFS samler den tilgængelige lagerplads og administrerer alle diske som en enkelt enhed. En bruger kan tilføje flere lagerdrev til puljen, hvis filsystemet har brug for yderligere kapacitet. ZFS er meget skalerbart og understøtter en stor maksimal filstørrelse.
ZFS gemmer mindst to kopier af metadata, hver gang data skrives til disken. Metadataene indeholder oplysninger som f.eks. de disksektorer, hvor dataene er gemt, størrelsen af datablokkene og en checksum af de binære cifre i et datastykke. Når en bruger anmoder om adgang til en fil, udfører en checksum-algoritme en beregning for at kontrollere, at de hentede data stemmer overens med de originale bits, der er skrevet på disken. Hvis checksummen opdager en uoverensstemmelse, markerer den de dårlige data. I systemer med en spejlet lagringspool eller ZFS-versionen af RAID kan ZFS hente den korrekte kopi fra det andet drev og reparere den beskadigede datakopi.
ZFS omtales almindeligvis som et copy-on-write-filsystem, selv om Oracle beskriver det som redirect on write. Når ZFS skriver data til disken, overskriver det ikke data på stedet. ZFS skriver en ny blok til et andet sted på disken og opdaterer metadataene, så de peger på den nyskrevne blok, samtidig med at ældre versioner af dataene bevares.
Et ægte copy-on-write-filsystem ville lave en nøjagtig kopi af en datablok på et separat sted, før det overskriver den oprindelige blok. Før dataene overskrives, skal systemet læse blokkens tidligere værdi. Et copy-on-write-filsystem kræver tre I/O-operationer — læse, ændre og skrive — for hver dataskrivning. I modsætning hertil kræver et redirect-on-write-system kun én I/O-operation, hvilket muliggør større effektivitet og højere ydeevne.
ZFS er et populært valg til netværkstilsluttede lagringssystemer, der kører NFS oven på filsystemet, samt i virtuelle servermiljøer. Et andet almindeligt implementeringsscenarie er at lægge et clusteret filsystem, f.eks. GPFS (General Parallel File System) eller Lustre, oven på ZFS for at muliggøre skalering til yderligere serverknudepunkter. OpenStack-brugere kan implementere ZFS som det underliggende filsystem for Cinder-bloklagring og Swift-objektlagring.
Nøglefunktioner i ZFS
Snapshots og kloner: ZFS og OpenZFS kan lave point-in-time-kopier af filsystemet med stor effektivitet og hastighed, fordi systemet bevarer alle kopier af dataene. Snapshots er uforanderlige kopier af filsystemet, mens kloner kan ændres. Snapshots og kloner er integreret i opstartsmiljøer med ZFS på Solaris, hvilket gør det muligt for brugerne at rulle tilbage til et snapshot, hvis noget går galt, når de patcher eller opdaterer systemet. En anden potentiel ZFS-fordel er som en genoprettelsesteknik mod ransomware.
RAID-Z: RAID-Z gør det muligt at gemme de samme data flere steder for at øge fejltolerancen og forbedre ydeevnen. Systemet rekonstruerer dataene på det tabte drev ved hjælp af de oplysninger, der er gemt på systemets andre drev. I lighed med RAID 5 giver RAID-Z paritetsinformationer på tværs af hvert drev, så et lagringssystem kan fungere, selv hvis et drev svigter. Med RAID-Z er de strippede data imidlertid en fuld blok, som er af variabel størrelse. Selv om RAID-Z typisk sammenlignes med RAID 5, udføres nogle operationer anderledes for at løse visse langvarige problemer med traditionel RAID. Et af de problemer, som RAID-Z løser, er den såkaldte skrivehulseffekt, hvor et system ikke kan afgøre, hvilke data- eller paritetsblokke der er blevet skrevet til disken på grund af en strømafbrydelse eller en katastrofal systemafbrydelse. Leverandører af systemer, der anvender traditionel RAID, løser typisk problemet ved hjælp af en uafbrydelig strømforsyning eller dedikeret hardware.
RAID-Z2 understøtter tab af to lagerdrev, i lighed med RAID 6, og RAID-Z3 kan tåle tab af tre lagerenheder. Brugerne har mulighed for at arrangere drev i grupper, ligesom med konventionel RAID. F.eks. kan et system med to grupper af seks drev opstillet som RAID-Z3 tolerere tab af tre drev i hver gruppe.
Komprimering: Inline datakomprimering er en indbygget funktion i ZFS og OpenZFS for at reducere antallet af bits, der er nødvendige for at lagre data. ZFS og OpenZFS understøtter hver især en række komprimeringsalgoritmer. Brugere har mulighed for at aktivere eller deaktivere inline-komprimering.
Deduplikering: Inline-datadeduplikering er en indbygget funktion i ZFS og OpenZFS, der muliggør lagringseffektivitet ved at eliminere redundante data. ZFS og OpenZFS finder de dobbelte data ved at se på checksummen for en blok, som kan variere i størrelse. Brugere kan aktivere eller deaktivere inline-deduplikering.
ZFS send/modtag: ZFS og OpenZFS gør det muligt at sende et øjebliksbillede af filsystemet til en anden serverknude, så en bruger kan replikere data til et separat system til formål som f.eks. sikkerhedskopiering eller datamigrering til skylagring.
Sikkerhed: ZFS og OpenZFS understøtter delegerede tilladelser og mere finkornede adgangskontrollister til at styre, hvem der kan udføre administrative opgaver. Brugere har mulighed for at indstille ZFS som skrivebeskyttet, så ingen data kan ændres. Oracle understøtter kryptering i ZFS på Solaris.
ZFS fordele og begrænsninger
ZFS integrerer filsystemet og volumenhåndteringen, så brugerne ikke behøver at anskaffe og lære separate værktøjer og sæt af kommandoer. ZFS tilbyder et rigt funktionssæt og datatjenester uden omkostninger, da det er indbygget i Oracle OS. Open source OpenZFS er frit tilgængeligt. Filsystemet kan udvides ved at tilføje drev til lagringspuljen. Traditionelle filsystemer kræver, at diskpartitionen skal ændres i størrelse for at øge kapaciteten, og brugerne har ofte brug for volumenstyringsprodukter til at hjælpe dem.
ZFS er begrænset til at køre på en enkelt server i modsætning til distribuerede eller parallelle filsystemer, såsom GPFS og Lustre, som kan skaleres ud til flere servere.
Det rige funktionssæt, der tilbydes med ZFS, kan gøre softwaren kompliceret at bruge og administrere. Funktioner som f.eks. de integrerede ZFS-kontrolsumsalgoritmer kan kræve ekstra processorkraft og påvirke ydeevnen.
I Linux-fællesskabet er der forskellige holdninger til licensering med hensyn til videredistribution af ZFS-koden og binære kernemoduler. Red Hat mener f.eks., at det er problematisk at distribuere kode, der er beskyttet under en CDDL, sammen med kode, der er beskyttet under en generel offentlig licens (GPL). Derimod har Canonical, som distribuerer Ubuntu, fastslået, at det er i overensstemmelse med betingelserne i CDDL- og GPL-licenserne.
ZFS vs. OpenZFS
Oracles ZFS og OpenZFS med åben kildekode stammer fra den samme ZFS-kildekode. På forskellige spor har Oracle og open source-fællesskabet tilføjet udvidelser og foretaget betydelige ydelsesforbedringer til henholdsvis ZFS og OpenZFS. Oracle ZFS-opdateringerne er proprietære og er kun tilgængelige i Oracle-teknologier. Opdateringer til open source-koden OpenZFS er frit tilgængelige.
Listen over forbedringer, som Oracle har foretaget til ZFS siden 2010, omfatter bl.a:
- kryptering;
- understøttelse af persistens af komprimerede data på tværs af genstarter af operativsystemet i L2 adaptive replacement cache (ARC);
- startbare Extensible Firmware Interface-etiketter, der giver understøttelse af fysiske diske og virtuelle diskvolumener, der er større end 2 TB;
- standardbruger- og gruppekvoter; og
- pool-/filsystemovervågning.
Listen over opdateringer, som open source-fællesskabet har foretaget til OpenZFS, omfatter:
- tilføjede komprimeringsalgoritmer;
- resumable send/receive, som gør det muligt at genstarte en langvarig ZFS-send/receive-operation fra det punkt, hvor systemet afbrydes;
- komprimeret send/receive, som gør det muligt for systemet at sende komprimerede data fra en ZFS-pool til en anden uden at skulle dekomprimere/genkomprimere dataene, når de flyttes fra den afsendende knude til destinationen;
- komprimeret ARC, som gør det muligt for ZFS at opbevare komprimerede data i hukommelsen, hvilket giver mulighed for et større arbejdsdatasæt i cache, og
- forøgelse af den maksimale blokstørrelse fra 128 KB til 16 MB for at forbedre ydeevnen ved arbejde med store filer og fremskynde datarekonstruktionen ved genoprettelse efter en drevfejl.