ZFS är ett lokalt filsystem och en logisk volymhanterare som skapats av Sun Microsystems Inc. för att styra och kontrollera placering, lagring och hämtning av data i datorsystem i företagsklass.
Filsystemet och volymhanteraren ZFS kännetecknas av dataintegritet, hög skalbarhet och inbyggda lagringsfunktioner, t.ex.:
- Replikation – processen att göra en replik (en kopia) av något.
- Deduplicering – en process som eliminerar överflödiga kopior av data och minskar lagringsöverskottet.
- Komprimering – en minskning av antalet bitar som behövs för att representera data.
- Snapshots – en uppsättning referensmarkörer för data vid en viss tidpunkt.
- Kloner – en identisk kopia av något.
- Dataskydd – processen att skydda viktig information från korruption och/eller förlust.
Historia om ZFS
Sun-ingenjörer inledde utvecklingsarbetet med ZFS 2001 för företagets Unix-baserade operativsystem Solaris. År 2005 släppte Sun källkoden till ZFS under en gemensam utvecklings- och distributionslicens (CDDL) som en del av OpenSolaris OS med öppen källkod. En grupp utvecklare, inklusive representanter från Sun och andra leverantörer, arbetade med förbättringar av den öppna källkoden och anpassade ZFS till ytterligare operativsystem, inklusive FreeBSD, Linux och Mac OS X.
Det öppna källkodsprojektet OpenSolaris, som inkluderade ZFS, avslutades efter att Oracle Corp. förvärvade Sun 2010 och varumärkesskyddade termen ZFS. Ingenjörer på Oracle fortsätter att förbättra och lägga till funktioner till ZFS på Solaris. Oracle använder sin egen ZFS-kod som grund för Oracle Solaris, Oracle ZFS Storage Appliance och annan Oracle-teknik.
En utvecklingsgemenskap startade ett nytt projekt med öppen källkod, kallat OpenZFS, baserat på ZFS-källkoden i den slutliga versionen av OpenSolaris. Det öppna samfundet arbetar med nya funktioner, förbättringar och felrättningar i OpenZFS-koden. De operativsystem som har stöd för OpenZFS är bland annat Apple OS X, FreeBSD, illumos (som är baserat på OpenSolaris) och Linuxvarianter som Debian, Gentoo och Ubuntu. OpenZFS fungerar på alla Linuxdistributioner, men endast vissa kommersiella leverantörer tillhandahåller det som en del av sina distributioner. Företag med kommersiella produkter som bygger på OpenZFS är bland annat Cloudscaling, Datto, Delphix, Joyent, Nexenta, SoftNAS och Spectra Logic.
ZFS och OpenZFS tenderar att tilltala företag som behöver hantera stora datamängder och säkerställa dataintegritet. Bland användarna finns vetenskapliga institutioner, nationella laboratorier, statliga myndigheter, finansföretag, telekommunikation samt media- och underhållningsföretag.
ZFS stod ursprungligen för Zettabyte File System, men ordet zettabyte har inte längre någon betydelse i samband med filsystemet. Som ett 128-bitars filsystem har ZFS potential att skala upp till 256 kvadriljoner zettabytes.
Hur ZFS fungerar
ZFS är utformat för att köras på en enda server, potentiellt med hundratals, om inte tusentals anslutna lagringsenheter. ZFS samlar det tillgängliga lagringsutrymmet och hanterar alla diskar som en enda enhet. En användare kan lägga till fler lagringsenheter till poolen om filsystemet behöver ytterligare kapacitet. ZFS är mycket skalbart och stöder en stor maximal filstorlek.
ZFS lagrar minst två kopior av metadata varje gång data skrivs till disk. Metadata innehåller information som t.ex. de disksektorer där data lagras, datablockens storlek och en kontrollsumma av de binära siffrorna i ett datamaterial. När en användare begär åtkomst till en fil utför en kontrollsummaalgoritm en beräkning för att kontrollera att de hämtade uppgifterna stämmer överens med de ursprungliga bitarna som skrivits till disken. Om kontrollsumman upptäcker en inkonsekvens markerar den dåliga data. I system med en speglad lagringspool eller ZFS-versionen av RAID kan ZFS hämta den korrekta kopian från den andra enheten och reparera den skadade datakopian.
ZFS brukar kallas för ett filsystem med kopiering vid skrivning, även om Oracle beskriver det som redirect vid skrivning. När ZFS skriver data till disken skrivs inte befintliga data över. ZFS skriver ett nytt block till en annan plats på disken och uppdaterar metadata för att peka på det nyskrivna blocket, samtidigt som det behåller äldre versioner av data.
Ett äkta copy-on-write-filsystem skulle göra en exakt kopia av ett datablock på en separat plats innan det ursprungliga blocket skrivs över. Innan data skrivs över måste systemet läsa blockets tidigare värde. Ett filsystem med kopiering vid skrivning kräver tre I/O-operationer – läsa, ändra och skriva – för varje dataskrivning. Ett redirect-on-write-system kräver däremot endast en I/O-operation, vilket möjliggör större effektivitet och högre prestanda.
ZFS är ett populärt val för nätverksanslutna lagringssystem, där NFS körs ovanpå filsystemet, samt i virtuella servermiljöer. Ett annat vanligt distributionsscenario är att lägga ett klustrade filsystem, t.ex. General Parallel File System (GPFS) eller Lustre, ovanpå ZFS för att möjliggöra skalning till ytterligare servernoder. OpenStack-användare kan distribuera ZFS som underliggande filsystem för Cinder blocklagring och Swift objektlagring.
Nyckelfunktioner i ZFS
Snapshots och kloner: ZFS och OpenZFS kan göra punktvisa kopior av filsystemet med stor effektivitet och snabbhet eftersom systemet behåller alla kopior av data. Ögonblicksbilder är oföränderliga kopior av filsystemet, medan kloner kan ändras. Ögonblicksbilder och kloner är integrerade i uppstartsmiljöer med ZFS på Solaris, vilket gör det möjligt för användare att backa tillbaka till en ögonblicksbild om något går fel när de patchar eller uppdaterar systemet. En annan potentiell fördel med ZFS är som återställningsteknik mot utpressningstrojaner.
RAID-Z: RAID-Z gör det möjligt att lagra samma data på flera platser för att öka feltoleransen och förbättra prestandan. Systemet rekonstruerar data på den förlorade enheten med hjälp av den information som finns lagrad på systemets andra enheter. I likhet med RAID 5 ger RAID-Z paritetsinformation på varje enhet för att lagringssystemet ska kunna fungera även om en enhet går sönder. Med RAID-Z är dock de randiga uppgifterna ett helt block, som är av varierande storlek. Även om RAID-Z vanligtvis jämförs med RAID 5, utförs vissa operationer annorlunda för att lösa vissa långvariga problem med traditionell RAID. Ett problem som RAID-Z tar itu med är den så kallade skrivhålseffekten, där ett system inte kan avgöra vilka data- eller paritetsblock som har skrivits till disken på grund av ett strömavbrott eller ett katastrofalt systemavbrott. Leverantörer av system som använder traditionell RAID löser vanligtvis problemet genom att använda en avbrottsfri strömförsörjning eller särskild maskinvara.
RAID-Z2 stöder förlust av två lagringsenheter, i likhet med RAID 6, och RAID-Z3 kan tolerera förlust av tre lagringsenheter. Användarna har möjlighet att ordna enheterna i grupper, precis som med konventionell RAID. Ett system med två grupper av sex enheter som konfigurerats som RAID-Z3 kan till exempel tolerera förlust av tre enheter i varje grupp.
Komprimering: Inline datakomprimering är en inbyggd funktion i ZFS och OpenZFS för att minska antalet bitar som behövs för att lagra data. ZFS och OpenZFS har stöd för ett antal komprimeringsalgoritmer. Användare har möjlighet att aktivera eller inaktivera inline-komprimering.
Deduplicering: Inline-datadeduplicering är en inbyggd funktion i ZFS och OpenZFS som möjliggör lagringseffektivitet genom att redundanta data elimineras. ZFS och OpenZFS hittar dubbla data genom att titta på kontrollsumman för ett block, som kan variera i storlek. Användare kan aktivera eller inaktivera inline-deduplicering.
ZFS send/receive: ZFS och OpenZFS gör det möjligt att skicka en ögonblicksbild av filsystemet till en annan servernod, vilket gör det möjligt för en användare att replikera data till ett separat system för t.ex. säkerhetskopiering eller datamigrering till molnlagring.
Säkerhet: ZFS och OpenZFS har stöd för delegerade behörigheter och finare åtkomstkontrollistor för att hantera vem som kan utföra administrativa uppgifter. Användare har möjlighet att ställa in ZFS som skrivskyddad, så att inga data kan ändras. Oracle stöder kryptering i ZFS på Solaris.
ZFS fördelar och begränsningar
ZFS integrerar filsystemet och volymhanteraren så att användarna inte behöver skaffa och lära sig separata verktyg och uppsättningar av kommandon. ZFS erbjuder en rik funktionsuppsättning och datatjänster utan kostnad, eftersom det är inbyggt i Oracle OS. Open source OpenZFS är fritt tillgänglig. Filsystemet kan utökas genom att lägga till enheter till lagringspoolen. Traditionella filsystem kräver att diskpartitionen ändras i storlek för att öka kapaciteten, och användarna behöver ofta volymhanteringsprodukter till hjälp.
ZFS är begränsat till att köras på en enda server i motsats till distribuerade eller parallella filsystem, som GPFS och Lustre, som kan skalas upp till flera servrar.
Den rika funktionsuppsättning som erbjuds med ZFS kan göra programvaran komplicerad att använda och hantera. Funktioner som de integrerade ZFS-kontrollalgoritmerna kan kräva extra processorkraft och påverka prestandan.
I Linuxgemenskapen finns det olika åsikter om licensiering när det gäller vidaredistribution av ZFS-kod och binära kärnmoduler. Red Hat anser till exempel att det är problematiskt att distribuera kod som skyddas av en CDDL tillsammans med kod som skyddas av en allmän offentlig licens (GPL). Canonical, som distribuerar Ubuntu, har däremot fastställt att de följer villkoren i CDDL- och GPL-licenserna.
ZFS vs. OpenZFS
Oracles ZFS och den öppna källkoden OpenZFS härstammar från samma ZFS-källkod. På separata spår har Oracle och den öppna källkodsgemenskapen lagt till tillägg och gjort betydande prestandaförbättringar av ZFS respektive OpenZFS. Oracle ZFS-uppdateringarna är proprietära och endast tillgängliga i Oracle-teknik. Uppdateringar av den öppna källkoden OpenZFS är fritt tillgängliga.
Listan över förbättringar som Oracle har gjort till ZFS sedan 2010 omfattar följande:
- kryptering;
- stöd för att komprimerade data ska finnas kvar mellan omstarter av operativsystemet i L2 adaptive replacement cache (ARC);
- startade Extensible Firmware Interface-etiketter som ger stöd för fysiska diskar och virtuella diskvolymer som är större än 2 TB;
- standardiserade användar- och gruppkvoter; och
- pool-/filsystemövervakning.
Listan över uppdateringar som open source-communityt har gjort till OpenZFS omfattar:
- ytterligare komprimeringsalgoritmer;
- resumable send/receive, vilket gör det möjligt att starta om en långvarig ZFS-sändning/mottagning från den punkt där systemet avbryts;
- komprimerad sändning/mottagning, vilket gör det möjligt för systemet att skicka komprimerade data från en ZFS-pool till en annan utan att behöva dekomprimera/återkomprimera datan vid förflyttning från sändningsnod till destination;
- komprimerad ARC, som gör det möjligt för ZFS att behålla komprimerade data i minnet, vilket möjliggör en större arbetsdatamängd i cacheminnet, och
- maximal blockstorlek ökar från 128 KB till 16 MB för att förbättra prestandan när man arbetar med stora filer och för att påskynda datarekonstruktionen när man återhämtar sig från ett diskfel.