ZFS este un sistem de fișiere locale și un manager de volume logice creat de Sun Microsystems Inc. pentru a direcționa și controla plasarea, stocarea și recuperarea datelor în sistemele de calcul de tip enterprise.
Sistemul de fișiere și managerul de volume ZFS se caracterizează prin integritatea datelor, scalabilitate ridicată și caracteristici de stocare încorporate, cum ar fi:
- Replicare – procesul de a face o replică (o copie) a ceva.
- Deduplicare – un proces care elimină copiile redundante de date și reduce cheltuielile de stocare.
- Compresie – o reducere a numărului de biți necesari pentru a reprezenta datele.
- Snapshots – un set de repere de referință pentru date la un anumit moment în timp.
- Clone – o copie identică a ceva.
- Protecția datelor – procesul de protejare a informațiilor importante împotriva corupției și/sau pierderii.
Istoria ZFS
Inginerii Sun au început să lucreze la dezvoltarea ZFS în 2001 pentru sistemul de operare (OS) Solaris al companiei, bazat pe Unix. În 2005, Sun a publicat codul sursă al ZFS sub o licență comună de dezvoltare și distribuție (CDDL) ca parte a sistemului de operare OpenSolaris cu sursă deschisă. O comunitate de dezvoltatori, inclusiv reprezentanți ai Sun și ai altor furnizori, a lucrat la îmbunătățiri ale codului open source și a portat ZFS pe alte sisteme de operare, inclusiv FreeBSD, Linux și Mac OS X.
Proiectul open source OpenSolaris, care includea ZFS, s-a încheiat după ce Oracle Corp. a achiziționat Sun în 2010 și a înregistrat ca marcă înregistrată termenul ZFS. Inginerii de la Oracle continuă să îmbunătățească și să adauge caracteristici la ZFS pe Solaris. Oracle utilizează codul său proprietar ZFS ca bază pentru Oracle Solaris, Oracle ZFS Storage Appliance și alte tehnologii Oracle.
O comunitate de dezvoltare a demarat un nou proiect open source, numit OpenZFS, bazat pe codul sursă ZFS din versiunea finală a OpenSolaris. Comunitatea deschisă lucrează la noi caracteristici, îmbunătățiri și corecturi de erori ale codului OpenZFS. Printre sistemele de operare care acceptă OpenZFS se numără Apple OS X, FreeBSD, illumos (care se bazează pe OpenSolaris) și variante de Linux precum Debian, Gentoo și Ubuntu. OpenZFS funcționează pe toate distribuțiile Linux, dar numai unii furnizori comerciali îl oferă ca parte a distribuțiilor lor. Companiile cu produse comerciale construite pe OpenZFS includ Cloudscaling, Datto, Delphix, Joyent, Nexenta, SoftNAS și Spectra Logic.
ZFS și OpenZFS tind să se adreseze întreprinderilor care trebuie să gestioneze cantități mari de date și să asigure integritatea datelor. Printre utilizatori se numără instituții științifice, laboratoare naționale, agenții guvernamentale, firme financiare, companii de telecomunicații, precum și companii media și de divertisment.
ZFS a însemnat inițial Zettabyte File System, dar cuvântul zettabyte nu mai are nicio semnificație în contextul sistemului de fișiere. Fiind un sistem de fișiere pe 128 de biți, ZFS are potențialul de a se extinde până la 256 de cvadrilioane de zettabyte.
Cum funcționează ZFS
ZFS este conceput pentru a rula pe un singur server, potențial cu sute, dacă nu chiar mii de unități de stocare atașate. ZFS reunește stocarea disponibilă și gestionează toate discurile ca pe o singură entitate. Un utilizator poate adăuga mai multe unități de stocare la pool dacă sistemul de fișiere are nevoie de capacitate suplimentară. ZFS este foarte scalabil și suportă o dimensiune maximă mare a fișierelor.
ZFS stochează cel puțin două copii ale metadatelor de fiecare dată când datele sunt scrise pe disc. Metadatele includ informații precum sectoarele de disc în care sunt stocate datele, dimensiunea blocurilor de date și o sumă de control a cifrelor binare ale unei bucăți de date. Atunci când un utilizator solicită accesul la un fișier, un algoritm de sumă de control efectuează un calcul pentru a verifica dacă datele recuperate corespund cu cifrele originale scrise pe disc. În cazul în care suma de control detectează o neconcordanță, acesta semnalizează datele eronate. În sistemele cu un grup de stocare în oglindă sau versiunea ZFS a RAID, ZFS poate prelua copia corectă de pe cealaltă unitate și poate repara copia de date deteriorată.
ZFS este denumit în mod obișnuit un sistem de fișiere de tip „copy-on-write”, deși Oracle îl descrie ca fiind „redirect on write”. Atunci când ZFS scrie date pe disc, nu suprascrie datele aflate pe loc. ZFS scrie un bloc nou într-un loc diferit de pe disc și actualizează metadatele pentru a indica blocul nou scris, păstrând în același timp și versiunile mai vechi ale datelor.
Un sistem de fișiere cu adevărat copy-on-write ar face o replică exactă a unui bloc de date într-o locație separată înainte de a suprascrie blocul original. Înainte de a suprascrie datele, sistemul ar trebui să citească valoarea anterioară a blocului. Un sistem de fișiere copy-on-write necesită trei operații de I/O – citire, modificare și scriere – pentru fiecare scriere de date. În schimb, un sistem de redirecționare la scriere necesită doar o singură operațiune I/O, facilitând o mai mare eficiență și o performanță mai mare.
ZFS este o alegere populară pentru sistemele de stocare conectate la rețea, care rulează NFS deasupra sistemului de fișiere, precum și în mediile de servere virtuale. Un alt scenariu comun de implementare este stratificarea unui sistem de fișiere în clustere, cum ar fi General Parallel File System (GPFS) sau Lustre, peste ZFS pentru a permite scalarea la noduri de server suplimentare. Utilizatorii OpenStack pot implementa ZFS ca sistem de fișiere care stă la baza stocării de blocuri Cinder și a stocării de obiecte Swift.
Caracteristici cheie ale ZFS
Snapshot-uri și clone: ZFS și OpenZFS pot face copii punctuale ale sistemului de fișiere cu mare eficiență și viteză, deoarece sistemul păstrează toate copiile datelor. Instantaneele sunt copii imuabile ale sistemului de fișiere, în timp ce clonele pot fi modificate. Instantaneele și clonele sunt integrate în mediile de pornire cu ZFS pe Solaris, permițând utilizatorilor să revină la un instantaneu dacă ceva nu merge bine atunci când aplică patch-uri sau actualizează sistemul. Un alt beneficiu potențial al ZFS este ca tehnică de recuperare împotriva ransomware.
RAID-Z: RAID-Z permite ca aceleași date să fie stocate în mai multe locații pentru a spori toleranța la erori și a îmbunătăți performanța. Sistemul reconstruiește datele de pe unitatea pierdută folosind informațiile stocate pe celelalte unități ale sistemului. Asemănător cu RAID 5, RAID-Z distribuie informații de paritate pe fiecare unitate pentru a permite unui sistem de stocare să funcționeze chiar și în cazul în care o unitate se defectează. Cu toate acestea, în cazul RAID-Z, datele în bandă reprezintă un bloc complet, care are o dimensiune variabilă. Deși RAID-Z este comparat de obicei cu RAID 5, acesta efectuează unele operațiuni în mod diferit pentru a rezolva anumite probleme de lungă durată ale RAID tradițional. Una dintre problemele pe care RAID-Z le abordează este cunoscută sub numele de „write hole effect”, în care un sistem nu poate determina ce blocuri de date sau de paritate au fost scrise pe disc din cauza unei pene de curent sau a unei întreruperi catastrofale a sistemului. Furnizorii de sisteme care utilizează RAID tradițional rezolvă de obicei această problemă prin utilizarea unei surse de alimentare neîntreruptibile sau a unui hardware dedicat.
RAID-Z2 suportă pierderea a două unități de stocare, similar cu RAID 6, iar RAID-Z3 poate tolera pierderea a trei dispozitive de stocare. Utilizatorii au opțiunea de a aranja unitățile în grupuri, ca în cazul RAID convențional. De exemplu, un sistem cu două grupuri de șase unități configurate ca RAID-Z3 ar putea tolera pierderea a trei unități din fiecare grup.
Compresie: Compresia datelor în linie este o caracteristică încorporată în ZFS și OpenZFS pentru a reduce numărul de biți necesari pentru stocarea datelor. ZFS și OpenZFS acceptă fiecare un număr de algoritmi de compresie. Utilizatorii au opțiunea de a activa sau dezactiva compresia inline.
Deduplicare: Deduplicarea datelor în linie este o caracteristică încorporată în ZFS și OpenZFS care permite o stocare eficientă prin eliminarea datelor redundante. ZFS și OpenZFS găsesc datele duplicate uitându-se la suma de control pentru un bloc, care poate varia în funcție de dimensiune. Utilizatorii pot activa sau dezactiva deduplicarea în linie.
ZFS send/receive: ZFS și OpenZFS permit trimiterea unui instantaneu al sistemului de fișiere către un alt nod de server, permițând unui utilizator să reproducă datele pe un sistem separat în scopuri precum backup sau migrarea datelor către un sistem de stocare în cloud.
Securitate: ZFS și OpenZFS acceptă permisiuni delegate și liste de control al accesului cu grad mai fin pentru a gestiona cine poate efectua sarcini administrative. Utilizatorii au opțiunea de a seta ZFS ca fiind numai pentru citire, astfel încât nicio dată nu poate fi modificată. Oracle suportă criptarea în ZFS pe Solaris.
Vantaje și limitări ale ZFS
ZFS integrează sistemul de fișiere și managerul de volume, astfel încât utilizatorii nu trebuie să obțină și să învețe instrumente și seturi de comenzi separate. ZFS oferă un set bogat de caracteristici și servicii de date fără niciun cost, deoarece este integrat în sistemul de operare Oracle. Open Source OpenZFS este disponibil gratuit. Sistemul de fișiere poate fi extins prin adăugarea de unități la fondul de stocare. Sistemele de fișiere tradiționale necesită redimensionarea partiției de disc pentru a crește capacitatea, iar utilizatorii au adesea nevoie de produse de gestionare a volumului pentru a-i ajuta.
ZFS este limitat la rularea pe un singur server, spre deosebire de sistemele de fișiere distribuite sau paralele, cum ar fi GPFS și Lustre, care pot fi extinse la mai multe servere.
Setul bogat de caracteristici oferit de ZFS poate face ca software-ul să fie complicat de utilizat și de gestionat. Funcționalități precum algoritmii integrați ai sumelor de control ZFS pot necesita putere de procesare suplimentară și pot afecta performanța.
În comunitatea Linux, există diverse opinii privind licențele în ceea ce privește redistribuirea codului ZFS și a modulelor binare ale kernelului. De exemplu, Red Hat consideră problematică distribuirea codului protejat prin CDDL cu cod protejat printr-o licență publică generală (GPL). În schimb, Canonical, care distribuie Ubuntu, a stabilit că respectă termenii licențelor CDDL și GPL.
ZFS vs. OpenZFS
ZFS al Oracle și OpenZFS open source derivă din același cod sursă ZFS. Pe căi separate, Oracle și comunitatea open source au adăugat extensii și au adus îmbunătățiri semnificative de performanță la ZFS și, respectiv, OpenZFS. Actualizările Oracle ZFS sunt brevetate și sunt disponibile numai în tehnologiile Oracle. Actualizările la codul OpenZFS cu sursă deschisă sunt disponibile în mod gratuit.
Lista de îmbunătățiri pe care Oracle le-a adus la ZFS începând cu 2010 include:
- criptare;
- susținerea persistenței datelor comprimate în timpul repornirii sistemului de operare în memoria cache de înlocuire adaptivă L2 (ARC);
- etichete Extensible Firmware Interface bootabile care oferă suport pentru discuri fizice și volume de discuri virtuale cu o dimensiune mai mare de 2 TB;
- cote implicite de utilizatori și grupuri; și
- monitorizarea pool-urilor/sistemelor de fișiere.
Lista de actualizări pe care comunitatea open source le-a făcut la OpenZFS include:
- algoritmi de compresie suplimentari;
- resumable send/receive, care permite ca o operațiune de trimitere/recepție ZFS de lungă durată să fie repornită din punctul de întrerupere a sistemului;
- compressed send/receive, care permite sistemului să trimită date comprimate de la un pool ZFS la altul fără a fi nevoie să decomprime/recomprime datele atunci când se deplasează de la nodul de trimitere la cel de destinație;
- compressed ARC, care permite ZFS să păstreze datele comprimate în memorie, permițând un set de date de lucru mai mare în memoria cache; și
- creșterea dimensiunii maxime a blocurilor de la 128 KB la 16 MB pentru a îmbunătăți performanța atunci când se lucrează cu fișiere mari și pentru a accelera reconstrucția datelor atunci când se recuperează în urma unei defecțiuni a unei unități.