ZFS

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 25 iulie 2021; verificările necesită 10 modificări .
ZFS
Dezvoltator Oracle (fostă Sun Microsystems ) , dezvoltatori de OpenZFS
Sistemul de fișiere ZFS - Sistemul de fișiere Zettabyte
Data depunerii noiembrie 2005 ( OpenSolaris )
Structura
Conținutul folderului Tabel hash extensibil
Restricții
Dimensiunea maximă a fișierului 16  exbibytes
Numărul maxim de fișiere 248 _
Lungimea maximă a numelui fișierului 255 de octeți
Dimensiunea maximă a volumului 256  zebibytes
Caractere valide în titluri fără codare sau UTF-8 (opțional)
Capabilități
Precizia stocării datei 1 ns [1]
Fluxuri de metadate Da (numite Atribute extinse )
Atribute POSIX , suplimentar
Drepturi de acces POSIX
Comprimarea fundalului da
Criptare în fundal Din versiunea de piscină 30
Sistem de operare acceptat Solaris , OpenSolaris , FreeBSD , Linux (prin FUSE sau modul separat de kernel ( ZFS pe Linux )), Apple Mac OS X 10.5 , Windows ( ZFSin )

ZFS (Zettabyte File System) este un sistem de fișiere Merkle arbore copiere pe scriere creat de Sun Microsystems în 2004–2005 pentru sistemul de operare Solaris . Acest sistem de fișiere acceptă cantități mari de date, combină conceptele unui sistem de fișiere, matrice RAID , un manager de disc logic (volum) , principiile sistemelor de fișiere ușoare și oferă o gestionare simplă a volumelor de stocare a datelor. La momentul în care a fost creat ZFS, structura sa de aspect a datelor era inovatoare. Există implementări deschise ale ZFS, în special, OpenZFS este licențiat sub CDDL ( Common Development and Distribution License ). Din cauza restricțiilor de licențiere, suportul ZFS pe GNU/Linux este limitat, ceea ce nu este cazul sistemului de fișiere Btrfs asemănător ZFS . ZFS este în prezent în curs de dezvoltare activă.  

Principalele avantaje ale ZFS sunt controlul complet asupra mediilor fizice și volumelor logice și menținerea constantă a consistenței sistemului de fișiere. Funcționând la diferite niveluri de abstractizare a datelor, ZFS este capabil să ofere acces de mare viteză la acestea, să le controleze integritatea și să minimizeze fragmentarea datelor . ZFS este foarte configurabil, vă permite să modificați cantitatea de spațiu pe disc în proces și să setați diferite dimensiuni de blocuri de date pentru diferite aplicații și oferă operații paralele de citire-scriere.

Istorie

ZFS a fost proiectat și construit la Sun Microsystems de o echipă condusă de Jeff Bonwick și anunțat  pe 14 septembrie 2004 [2] . Codul sursă pentru versiunea finală a fost integrat în ramura principală Solaris la 31 octombrie 2005 [3] .

ZFS a fost inclus în versiunea OpenSolaris 27 , lansată pe 16 noiembrie 2005. Sun a declarat că ZFS a fost integrat în actualizarea 6/06 pentru Solaris 10 în iunie 2006, la un an după deschiderea comunității OpenSolaris [4] .

ZFS a fost inițial numit „ Zettabyte File System”, dar mai târziu numele a evoluat într-un acronim simplu [5] .

ZFS a fost lansat sub o licență comercială ca parte a sistemului de operare Solaris, apoi ZFS cu sursă deschisă SUN Microsystems în proiectul OpenSolaris sub un CDDL. După achiziționarea SUN Microsystems de către Oracle, codul a fost închis din nou, dar în acest moment ZFS era deja inclus în FreeBSD și în alte proiecte open source care s-au dezvoltat independent și au schimbat coduri sursă prin „backport-uri” ( eng.  backports ) [6] .

În 2013, a fost lansat proiectul OpenZFS [7] [8] , care preia noi funcții și remedieri de la Illumos și le distribuie pe toate porturile pe alte platforme și invers [9] .

Specificitatea

Oportunități maxime

ZFS - 128 de biți[10] un sistem de fișiere care îi permite să stocheze de 18,4 × 10 de 18 ori mai multe date decât toate sistemele cunoscute pe 64 de biți. ZFS este conceput astfel încât limitările sale să fie atât de imposibil de atins încât nu vor fi întâlnite în practică în viitorul apropiat [11] .

Câteva limite teoretice în ZFS:

În același timp, utilitățile de gestionare a sistemului de fișiere impun restricții suplimentare.

Pool- uri de stocare

Spre deosebire de sistemele de fișiere tradiționale, care rezidă pe un singur dispozitiv și, prin urmare, necesită un manager de volum atunci când sunt utilizate pe mai multe dispozitive, ZFS este construit pe bazinele de stocare virtuale numite zpools . Pool-ul este construit din dispozitive virtuale ( vdevs ), fiecare dintre acestea fiind fie un dispozitiv fizic, fie o oglindă ( RAID 1) a unuia sau mai multor dispozitive sau ( RAID Z) un grup de două sau mai multe dispozitive. Capacitatea tuturor vdev -urilor este apoi disponibilă pentru toate sistemele de fișiere din zpool .

O cotă poate fi setată pentru a limita spațiul disponibil pentru un anumit sistem de fișiere sau volum . În plus, este posibil să utilizați rezervarea discului (limită) - acest lucru asigură că va exista întotdeauna spațiu disponibil pentru un anumit sistem de fișiere sau volum.

Versiuni ZFS Pool

Există diferite versiuni ale sistemului de fișiere ZFS și versiuni ale pool-ului ZFS ( zpool ), iar funcționalități diferite sunt disponibile în funcție de versiune. În noiembrie 2012, există 34 de versiuni ale pool-ului ZFS. Toate versiunile pool-ului sunt lansate inițial pentru Solaris .

Versiunea 2 a inclus suport pentru metadate replicate ( ditto blocks ) .  Datorită structurii arborescente a formatului de disc ZFS, erorile irecuperabile din metadatele pool-ului pot duce la imposibilitatea deschiderii pool-ului. Această caracteristică oferă replicare automată a metadatelor (până la trei copii ale fiecărui bloc ) indiferent de redundanța subiacentă la nivelul întregului grup . De exemplu, într-un pool cu ​​o singură oglindă, metadatele cele mai critice vor fi scrise de trei ori pe fiecare parte a oglinzii, pentru un total de șase copii. Acest lucru asigură că, dacă datele sunt pierdute din cauza corupției, toate datele din pool vor fi localizabile și pool-ul va fi sănătos.  

Versiunea 3 include suport pentru piese de rezervă și paritate duală RAID-Z (raidz2) ; versiunea 4 a introdus suport pentru menținerea istoricului pool-ului ZFS ( zpool history); versiunea 5 a adăugat suport pentru compresia din mers pentru seturile de date ZFS folosind metoda gzip ; versiunea 6 include suport pentru proprietatea bootfs (vă permite să comutați FS rădăcină a sistemului de operare bootabil printr-un atribut, în plus față de opțiunea bootloader).

Versiunea 7 a introdus suport pentru un „jurnal țintă” ( ZFS Intent Log , ZIL , lit. „intent log”), care oferă aplicațiilor posibilitatea de a ști că datele pe care le-au modificat sunt în stocare stabilă, la întoarcerea de la un apel de sistem . Jurnalul țintă păstrează înregistrări ale acestor apeluri de sistem, acestea sunt reluate dacă a existat o întrerupere de curent sau o eroare critică în care pool-ul principal nu a confirmat executarea lor. Când jurnalul țintă se află în afara pool-ului principal, acesta alocă blocuri care se conectează prin pool.

În versiunea 8, este implementată capacitatea de a delega sarcini administrative pentru gestionarea ZFS utilizatorilor obișnuiți; înainte de aceasta, numai administratorii aveau capacitatea de a gestiona ZFS.

În versiunea 9, pe lângă funcțiile de cotă și rezervare existente, a fost adăugată și alocarea de cote și rezerve, care nu include consumul de spațiu pe disc de către structurile de date imbricate, precum clonele și cotele ( zfs set refquota, zfs set refreservation). Rezervarea este stabilită automat atunci când volumul ZFS creat non-sparse ( non-sparse ) se potrivește cu dimensiunea partiției. Tot în versiunea 9 a fost adăugat suport pentru serverul CIFS .

Versiunea 10 a introdus capacitatea de a adăuga dispozitive la un pool ca dispozitive de stocare în cache pentru a oferi un strat suplimentar de stocare în cache între memoria principală și disc. Utilizarea dispozitivelor de stocare în cache îmbunătățește semnificativ performanța pentru citirile grele ale conținutului inordonat, mai ales static. În versiunea 12 a apărut suport pentru proprietățile instantanee, în versiunea 13 au devenit disponibile următoarele proprietăți instantanee: usedbysnapshots, usedbychildren, usedbyrefreservation, usedbydataset, în versiunea 14 sunt disponibile și proprietățile și passthrough-x, aclinheritîn versiunea 15 sunt incluse proprietățile userused, groupused, userquota, groupquota.

Versiunea 17 a introdus suport pentru RAID-Z cu paritate triplă . Versiunea 18 acceptă caracteristica de reținere a instantaneelor ​​ZFS . Începând cu versiunea 19, a devenit posibilă eliminarea unui dispozitiv atașat pentru stocarea jurnalelor; anterior, un astfel de dispozitiv nu putea fi eliminat. Versiunea 20 include algoritmul de compresie zle .

Versiunea 21 introduce deduplicarea (utilizarea majoră a zle). Începând cu versiunea 30 , este acceptată criptarea sistemului de fișiere , începând cu versiunea 32, este suportat un bloc de 1 MB, iar în versiunea 34, este implementată crearea de partajări de rețea cu moștenire între sistemele de fișiere.

Versiunea 37 a adăugat suport pentru algoritmul de compresie lz4 (mai eficient și mai rapid decât cele existente).

Modelul tranzacției utilizând copy-on-write

ZFS utilizează un model de tranzacție cu obiecte bazat pe mecanismul de copiere la scriere . Toți pointerii către blocuri din sistemul de fișiere conțin o sumă de control de 256 de biți în blocul țintă, care este verificată atunci când blocul este citit. Fie suma Fletcher , fie funcția hash criptografică SHA-256 poate fi utilizată ca sumă de control . [13] Alte sume de control pot fi alese pentru date. Blocurile de date care conțin date active (în acest moment) nu sunt niciodată suprascrise împreună; dimpotrivă, un bloc nou este alocat, datele modificate sunt scrise în el și apoi metadatele oricăror blocuri care se referă la el, astfel totul este realocat și scris. Pentru a reduce cheltuielile generale, acest proces grupează mai multe actualizări într-un grup de tranzacții și, dacă este necesar, înregistrează utilizarea în scriere sincronă.

Pool-ul ZFS menține un jurnal al ultimelor zeci de versiuni ale datelor pool (pentru ultimele minute, ore sau zile, în funcție de intensitatea modificării datelor), conceput pentru a restaura datele în cazul în care o eroare de sistem a adus pool într-o stare inoperabilă, incurabilă. Cu copiere la scriere, toate aceste versiuni ale datelor din jurnal sunt autonome, dar partajează date comune.

Instantanee și clone

Modelul copy-by-write din ZFS are un alt avantaj puternic: atunci când ZFS scrie date noi - în loc să elibereze blocuri care conțin date vechi - le poate salva prin crearea de instantanee ale sistemului de fișiere. Instantaneele în ZFS sunt create foarte rapid (cu excepția cazurilor rare de blocare lungă a pool-ului printr-o operație consumatoare de timp cu FS), deoarece toate datele din instantaneu sunt deja salvate; sunt, de asemenea, eficiente în spațiu, deoarece orice date neschimbate sunt partajate (partajate) între sistemul de fișiere și instantaneul său.

De asemenea, un instantaneu care poate fi scris („clonă”) poate fi creat din orice instantaneu, rezultând două sau mai multe sisteme de fișiere sau volume independente care împart un complex de blocuri pentru a reduce amprenta totală și a reduce timpul de creare a clonelor. De îndată ce se fac modificări oricărei clone a sistemului de fișiere, blocuri de date noi sunt create pentru aceasta, iar datele vechi rămân în toate celelalte clone.

Când este creată, o clonă este legată de instantaneul din care a fost creată. Acest instantaneu nu poate fi distrus atâta timp cât este referit de cel puțin 2 clone (inclusiv stocarea originală). Pentru a elimina această legătură, spațiul de stocare (sistem de fișiere sau volum) trebuie recreat, dar acest lucru se face cu ușurință utilizând transferul și puteți evita ocuparea spațiului suplimentar în pool dacă activați deduplicarea în timpul transferului și transferați spațiul de stocare în aceeasi piscina.

Instantaneele vă permit să accesați datele care se aflau în seif la momentul în care a fost realizat instantaneul ca același seif numai pentru citire, indiferent de seiful original, clonele sale și alte instantanee. De asemenea, vă permit să restaurați rapid și precis datele de stocare la o stare instantanee.

Instantaneele și clonele pot fi create recursiv pentru un arbore de sisteme de fișiere. Acest lucru evită necesitatea de a repeta comenzile și de a gestiona singur tranzacțiile, deoarece crearea recursive de instantanee este atomică.

Crearea de instantanee și clone (precum și noi sisteme de fișiere) poate fi dificilă din cauza limitărilor ZFS. Instantaneele și clonele nu pot fi create dacă numele a cel puțin unuia dintre ele depășește limita (și numele complet al instantaneului este mai lung decât numele complet al originalului cu cel puțin 2 caractere), dacă există un conflict de nume (esențial pentru crearea de instantanee recursive), dacă sunt depășite noi cote sau rezervele nu sunt fezabile (cotele și rezervele sunt moștenite de la original).

Pe baza unor instantanee, sunt implementate backup-uri incrementale de stocare. Folosind redirecționarea instantaneelor, puteți recrea aceeași secvență de instantanee în orice pool ZFS. După crearea unor noi instantanee ale originalului, transferul incremental de instantanee recreează aceleași date actualizate în copiere sau clonă, cu excepția cazului în care există un conflict de actualizare. De asemenea, instantaneele vă informează ce fișiere au fost modificate, create, șterse și redenumite între instantanee.

Partiționare dinamică

Partiționarea dinamică a tuturor dispozitivelor la debit maxim înseamnă că dispozitivele suplimentare sunt incluse în zpool, canalele mai largi sunt extinse automat pentru a include utilizarea tuturor discurilor din pool, ceea ce echilibrează sarcina de scriere.

Diverse dimensiuni de bloc

ZFS folosește o dimensiune variabilă a blocului de până la 1 megaoctet (de la versiunea pool 32, obișnuia să fie de până la 128 de kiloocteți). În prezent, administratorului i se permite să seteze dimensiunea maximă a blocurilor utilizate, dar unele lucrări vor eșua (sau eșuează) dacă sunt folosite blocuri prea mari. Setările automate de performanță corespund privilegiilor.

Dacă compresia este activată, sunt utilizate dimensiuni variabile ale blocurilor. Dacă un bloc a fost comprimat, acesta se poate îmbina într-un bloc mai mic, ceea ce înseamnă că este utilizat mai puțin spațiu pe disc și debitul (Intrare/Ieșire) este crescut (cu prețul utilizării CPU și RAM crescute pentru operațiunile de compresie și decompresie).

Pool-ul ZFS acceptă, de asemenea, diferite dimensiuni de sector de dispozitiv și selectează automat cea mai mare dimensiune a blocului dintre dispozitivele specificate când a fost creat pool-ul (după aceea, dimensiunea blocului pool-ului nu poate fi modificată). Dimensiunile de 512 octeți, 4 KiB (4K) sunt acceptate stabil. Dimensiunile mari ale blocurilor sunt, de asemenea, acceptate, dar este posibil ca sistemul de operare să nu funcționeze stabil.

Controlul integrității datelor de la capăt la capăt

Controlul integrității end-to-end se referă la scrierea unei sume de control pe disc pentru fiecare bloc de date, iar suma de control și datele sunt distanțate în mod special cât mai departe posibil una de cealaltă pentru a reduce probabilitatea deteriorării articulațiilor. Dacă există mai multe dispozitive în pool, atunci pentru datele aflate pe unul dintre ele, suma de control va fi scrisă pe celălalt. Sumele de control sunt calculate nu numai pentru date, ci și pentru metadate și se dovedește că pool-ul are întotdeauna o sumă de control pentru fiecare bloc de informații.

La citirea oricărui bloc, suma de control este calculată și rezultatul este comparat cu suma de control stocată pe disc. În caz de discrepanță, eroarea este imediat detectată. Desigur, dacă nu a fost planificată în prealabil o redundanță în pool (nici RAID-Z, nici altfel), atunci eroarea nu poate fi corectată, dar datele corupte nu vor fi prezentate ca adevărate.

Scopul integrității datelor de la capăt la capăt este de a preveni corupția nedetectată a datelor din cauza defecțiunilor hardware sau firmware-ului unității sau controlerului. Deși probabilitatea unui astfel de eveniment pare scăzută, unele studii arată că este destul de semnificativă pentru organizațiile de orice dimensiune [14] .

Programele care citesc sau scriu date trebuie să accepte aceste caracteristici (posibilitatea eșecului de a citi un singur bloc al unui fișier, posibilitatea ca pool-ul să intre într-o stare de așteptare pentru recuperarea stocării cu I/O suspendat pentru o perioadă nedeterminată).

Crearea unui sistem de fișiere ușor

În ZFS, manipularea unui sistem de fișiere într-un pool este mai ușoară decât cantitatea de manipulare din sistemele de fișiere tradiționale; timpul și efortul necesar pentru a crea sau modifica un sistem de fișiere ZFS seamănă mai mult cu cantitatea de muncă implicată cu un director nou decât cu manipularea partițiilor în alte tehnologii.

Caracteristici suplimentare

Caracteristicile suplimentare includ o funcție pentru a seta o anumită prioritate I/O cu o perioadă de programare, suport pentru mai multe fire independente cu detectarea automată preventivă a lungimii și pasului, curățare și corecție inteligentă [15] , încărcare și partajare a discurilor într-un pool [16] , redare multiplă a metadatelor [ 17] , suport pentru mecanismul de copiere la scriere , abilitatea de a selecta un sistem de fișiere de pornire în încărcătorul sistemului de operare , instalarea sistemului principal de fișiere de boot, crearea mai multor sisteme de fișiere rădăcină, dintre care unul (cu toți copiii) vor fi utilizate la încărcarea sistemului de operare , capacitatea de a integra software și actualizări ale sistemului de operare cu crearea de instantanee și clone ale sistemelor de fișiere în care sunt stocate programe și utilizarea acestor instantanee pentru a restaura cu ușurință o versiune anterioară și clonele pentru a crea un sistem multiboot cu posibilitatea de a porni diferite configurații sau versiuni de sistem de operare ( Solaris este actualizat implicit), o opțiune pentru limitarea numelor de fișiere la text valid în UTF-8 în forma normală selectată, o opțiune pentru a nu sensibiliza majusculele caracterelor din numele fișierelor.

Gestionarea memoriei cache

ZFS introduce, de asemenea, înlocuirea adaptivă a memoriei cache ( ARC ), o nouă metodă de gestionare a memoriei cache în locul paginilor virtuale tradiționale din cache în memorie Solaris.

Endianness adaptiv

Array-urile și ZFS-ul configurat pe ele pot fi transferate între diferite platforme, chiar dacă au o îndianitate diferită. Formatul bloc ZFS permite detectarea automată și reordonarea octeților din mers atunci când metadatele sunt citite.

În același timp, ordinea diferită a octeților pe diferite sisteme nu afectează în niciun fel aplicațiile, fișierele pentru aceștia rămânând o simplă secvență de octeți. Astfel, aplicațiile sunt responsabile pentru formatul independent (platformă) deja în fișierele în sine.

Atribute pool

Atributele pool-ului sunt o modalitate de a controla caracteristicile și setările unui pool. Au tipuri speciale și restricții de scriere. Acestea indică dacă pool-ul este inscriptibil sau citibil, dacă deduplicarea datelor este activată, FS pentru încărcarea OS în mod implicit, o rădăcină de montare alternativă, caracteristicile pool-ului și multe altele.

Atributele sistemului de depozit de date

Atributele sistemului de depozit sunt o modalitate de a gestiona capabilitățile și setările depozitelor. Au tipuri speciale și restricții de scriere. Acestea specifică setările pentru criptare, compresie, sume de control, deduplicare, backup, cache, dimensiunea blocurilor de stocare a datelor din anumite stocări. Ele indică, de asemenea, dimensiunea volumelor, punctele de montare FS, disponibilitatea stocărilor individuale pentru scriere, apartenența depozitelor la zone, mandate, rezerve, cote, setări pentru crearea automată a partajărilor de rețea (NFS, SMB), drepturi de acces la acestea și Mai Mult. Aceste atribute specifică caracteristicile bolților. Aceste atribute facilitează gestionarea funcțiilor legate de FS care au fost efectuate anterior manual (de exemplu, configurarea montarii mai multor sisteme de fișiere suplimentare, crearea de partajări de rețea).

Unele dintre atributele sistemului sunt moștenite de depozitele copil; ca urmare, atributele sunt aplicate imediat și depozitelor copil. Atributele pentru controlul compresiei, deduplicarii, sumelor de verificare a datelor și altele asemenea se aplică numai datelor nou scrise. Pentru a le aplica tuturor datelor, datele trebuie suprascrise (acest lucru se face cu ușurință prin trimiterea de instantanee la același pool cu ​​recrearea stocărilor).

Atribute personalizate ale magazinului de date

Fiecărui depozit de date (FS, volum, instantaneu etc.) i se pot atribui atribute personalizate. Atributele utilizatorului diferă de atributele sistemului în numele lor. Pentru atributele personalizate, puteți utiliza orice nume (de la 1 la 2¹⁰ octeți), dar este recomandat să folosiți nume care conțin două puncte (pentru a evita conflictele cu atributele sistemului), numele dvs. de domeniu înainte de aceste două puncte (pentru a evita cu alți utilizatori) , numele atributului după două puncte. Atributele personalizate sunt moștenite de magazinele pentru copii.

Datorită dezvoltării ramificate a noilor caracteristici în diferite sisteme de operare, mai multe dintre aceste atribute sunt folosite ca atribute de sistem noi.

Atributele personalizate sunt folosite de utilizatori și de programele de sine stătătoare (de exemplu, programul de creare automată și backup cu glisare de timp).

Atributele sistemului de fișiere

Pentru fișierele de orice tip, poate fi specificată valoarea mai multor atribute de sistem. [18] Aceste atribute vă permit să controlați acțiunile asupra fișierului. Atributele de fișiere extinse au aceleași atribute de sistem.

Pe lângă atributele care stochează datele de creare, ultimul acces, ultima modificare, ultima modificare a metadatelor, există atribute [19] :

Numele atributului Nume atribut în comandă chmod[20] Scop Ce face sistemul de operare cu acest atribut
Ascuns hidden Fișierele cu acest atribut nu sunt afișate în lista generală dacă această opțiune este activată și acceptată în programul de ieșire a fișierelor. Nimic.
rar sparse Se recomandă ca un fișier cu acest atribut să fie procesat ca rar, adică să conțină blocuri de zero octeți care nu sunt stocate pe unitate, dar sunt implicite. Acest atribut este consultativ și nu are nimic de-a face cu dacă fișierul este de fapt rar. Programul de procesare a fișierelor pentru lucrul cu fișiere rare trebuie încă să primească date despre blocurile rare ale fișierului de la FS. Nimic.
Sistemică system Un fișier cu acest atribut este destinat sistemului de operare, nu este un fișier utilizator. De obicei ignorat de programe. Nimic.
Doar pentru lectură readonly Un fișier cu acest atribut nu poate fi modificat (doar date, nu atribute). Se aplică tuturor, fără excepție. Blocează accesul la scriere dacă atributul este setat.
Pentru arhivare archive Fișierul trebuie arhivat. Nimic.
De nedemontat nounlink Pentru directoare, numele directorului și numele copiilor săi imediati nu pot fi șterse sau modificate. Pentru alte tipuri de fișiere: numele fișierului nu poate fi șters sau modificat. Blochează schimbarea numelui și șterge accesul dacă atributul este setat.
imuabil immutable Un fișier cu acest atribut nu poate fi modificat (date, atribute, cu excepția acestui atribut în sine și a ultimei date de acces). Se aplică tuturor, fără excepție. Blocurile modifică accesul dacă atributul este setat.
Doar pentru supliment appendonly Datele fișierului pot fi modificate doar prin adăugare, dar nu pot fi suprascrise. Blocează accesul la scriere dacă atributul este setat.
Nu pentru gropi nodump Nu este utilizat pe Solaris. A venit de la BSD . Necesită privilegii adecvate pentru modificare. Nu este utilizat pe Solaris.
În carantină antivirus av_quarantined Accesul la dosar este restricționat până la ridicarea carantinei. Atributul poate fi setat și eliminat doar dacă aveți drepturi de superutilizator (antivirusul îl are). Blocează accesul dacă atributul este setat.
Modificat (după ultima verificare antivirus) av_modified Indică faptul că versiunea curentă a fișierului nu este verificată de antivirus. Setați automat atunci când fișierul este creat și ori de câte ori datele sau dimensiunea fișierului sunt modificate. Poate fi setat de un utilizator cu drepturi de modificare a atributelor. Poate fi resetat doar dacă aveți drepturi de superutilizator (antivirusul îl are). Setează automat atributul la modificarea datelor, crearea unui fișier.

Atribute extinse

Puteți crea atribute extinse pentru fiecare fișier de orice tip. Atributul extins este o matrice numită de octeți, la fel ca un fișier obișnuit. Atributelor extinse, cum ar fi fișierele obișnuite, li se pot atribui propriile permisiuni și atribute de sistem. Spre deosebire de un fișier obișnuit, atributele extinse, linkurile hard nu pot fi create pentru atributele extinse. Atributele extinse ale fișierelor au capacitatea de a fi tratate ca fișiere normale într-o măsură limitată. Pentru a face acest lucru, este creat un folder fără nume pentru fiecare fișier (la momentul creării primului atribut extins), în care sunt disponibile fișiere obișnuite corespunzătoare atributelor extinse ale acestui fișier. Pe Solaris, acest folder poate fi accesat utilizând utilitarul runat[21] .

Delegarea de autoritate către utilizatori

Gestionarea seifurilor individuale poate fi delegată utilizatorilor. Pentru a face acest lucru, ZFS a alocat puteri care pot fi delegate (crearea de stocări, instantanee, ștergerea lor, montare, comparare, redirecționare și multe altele). Permisiunile sunt delegate pentru seifurile selectate în același mod ca și atribuirea de atribute și se extind la seifurile secundare.

Reținerea datelor și backup

Datorită principiului „ copy-on-write ” ,  datele din ZFS sunt întotdeauna într-o stare consecventă, fișierul nu poate fi pierdut în momentul suprascrierii [6] .

Atunci când se utilizează volume cu redundanță (volume RAIDZ), siguranța datelor este asigurată în cazul defecțiunii suportului fizic [6] [22] , în timp ce RAIDZ este eficient pentru stocarea pe termen relativ lung a fișierelor mari, mai ales când se stabilește dimensiunea blocului corespunzătoare fișiere, iar cu rescrierea frecventă și la plasarea fișierelor de dimensiuni mici, există o sarcină crescută asupra procesorului și a subsistemului de disc [6] .

Restricții

  • Implementarea ZFS de către Solaris 10 nu are criptare transparentă, așa cum se găsește în Solaris 11 și NTFS , deși există o implementare a acesteia ca parte a proiectului OpenSolaris [23] .
  • ZFS nu acceptă alocarea de cote pe utilizator sau pe grup. În schimb, puteți crea rapid FS pentru utilizatori, fiecare dintre acestea având propria dimensiune. Ca atare, nu există o soluție practică de cotă pentru sistemele de fișiere partajate de diferiți utilizatori (de exemplu, un proiect de echipă de dezvoltare) în care datele pot fi partajate pentru fiecare utilizator, dar aceasta poate fi implementată deasupra stivei ZFS .
  • Extinderea stocării se realizează de obicei prin adăugarea unui grup de discuri, cum ar fi un vdev (stripe, RAID-Z , RAID-Z2 sau mirror ). Noile date vor folosi în mod dinamic toate vdev-urile disponibile. O altă modalitate de a crește spațiul pe disc este înlocuirea alternativă a discurilor fizice cu altele mai mari, cu așteptarea, după fiecare astfel de operațiune, până când ZFS se vindeca singur . Timpul de tratament depinde de cantitatea de informații stocate și nu de dimensiunea discului. Dacă se creează un instantaneu în timpul tratamentului  , acesta va reporni procesul de tratament. Trebuie remarcat faptul că înlocuirea discurilor fără pierdere de date este posibilă numai într-unul dintre modurile de funcționare a pool-ului care o permit.
  • În prezent, nu este posibil să se reducă numărul de vdev-uri fără a reduce dimensiunea pool-ului. Cu toate acestea, echipa de dezvoltare ZFS lucrează la această problemă. De la lansarea Solaris 10 08/11 (Actualizare 10), aceasta încă nu a fost implementată.
  • De asemenea, nu este posibil să adăugați o unitate nouă la o matrice RAID-Z sau RAID-Z2 (vdevs). Această caracteristică este dificil de implementat. Cu toate acestea, puteți crea un RAIDZ vdev și îl puteți adăuga la zpool .
  • Nu puteți amesteca tipuri de vdev într-un zpool. De exemplu, dacă aveți un pool ZFS eliminat care conține discuri pe un SAN , nu veți putea adăuga discuri locale ca vdev în oglindă.
  • O reconfigurare completă a stocării datelor necesită salvarea datelor pe medii externe (în afara ZFS), distrugerea pool-urilor și crearea de noi pool-uri conform noilor reguli. Dar, în cele mai multe cazuri, puteți scăpa cu transferul de date din pool-ul vechi în cel nou folosind ZFS, păstrând toate sau datele și atributele dorite (fără a stoca în afara ZFS). Redirecționarea nu va ajuta în cazul activării sau dezactivării criptării, modificării restricțiilor privind numele fișierului, dezactivarea controlului de acces obligatoriu, modificarea dimensiunii blocului de disc și alte operațiuni rare.
  • ZFS nu este în mod inerent un sistem de fișiere în cluster , distribuit sau paralel și nu oferă acces simultan la date de la gazde diferite. ZFS este un sistem de fișiere local.
  • În implementarea ZFS de către Solaris 11, nu puteți modifica tipul vdev în zpool. De exemplu, dacă aveți un pool ZFS care conține discuri (dispozitive bloc), nu veți putea copia conținutul discurilor în fișiere obișnuite și nu veți putea importa pool-ul din aceste fișiere și invers - transferați pool-ul din fișierele obișnuite în discuri.
  • Ștergerea unei cantități mari de date este o operațiune de blocare lentă (în versiunea pool 37 și anterioară), de exemplu, ștergerea unui sistem de fișiere fragmentat de 100 GiB poate dura mai mult de un minut și blochează obținerea unei liste de sisteme de fișiere și a altor sisteme de fișiere. acțiuni în același pool .
  • Nu există nicio modalitate de a controla recuperarea pool-ului după restaurarea accesului la diferite copii ale pool-ului în oglindă. Sistemul decide singur cum să dezinfecteze piscina, chiar dacă modificările au fost făcute independent la diferite copii ale piscinei (acest lucru este permis).
  • O piscină grav deteriorată nu poate fi reparată și trebuie recreată. Cu toate acestea, în multe cazuri, datele utilizatorului pot fi preluate din pool-ul corupt, importându-l pentru citire.
  • O anumită corupție incurabilă a pool-ului în datele de sistem nu are ca rezultat coruperea datelor utilizatorului sau blocarea modificărilor pool-ului. Cu aceste avarii, piscina extern continuă să funcționeze normal mult timp și nu avertizează asupra necesității remedierii acesteia. Dar dacă nu este corectat, va pierde în cele din urmă datele utilizatorului și va ajunge într-o stare irecuperabilă sau chiar ilizibilă. Capacitatea de a detecta astfel de probleme și de a le remedia automat (dacă este posibil) în timp util nu este încorporată în ZFS și necesită o configurare separată.

Platforme

ZFS face parte din sistemul de operare Solaris și este disponibil atât pentru platformele SPARC , cât și pentru x86 . Deoarece codul ZFS este open source (licență CDDL), porturile către alte sisteme de operare și platforme pot fi produse fără implicarea Oracle.

OpenSolaris

OpenSolaris 2008.05 folosește ZFS ca sistem de fișiere implicit.

Nexenta OS

Nexenta OS  este un sistem de operare cu un mediu GNU construit pe nucleul OpenSolaris și pe mediul său de rulare, suportul ZFS a fost inclus în versiunea alpha1 a nucleului. Mai recent, Nexenta Systems a introdus NexentaStor  , un sistem de stocare de rețea activat ZFS care oferă capabilități NAS / SAN / iSCSI și se bazează pe Nexenta OS. NexentaStor include o interfață grafică care simplifică procesul de utilizare a ZFS. Pe 2 decembrie 2008, NexentaStor 1.1 a fost lansat. A actualizat nucleul OpenSolaris, a îmbunătățit integrarea cu CIFS/AD, a adăugat mai multe plugin-uri și a remediat unele erori. Există două ediții de NexentaStor: o ediție comercială Enterprise și o ediție gratuită pentru comunitate, cu o limită maximă a capacității de stocare de 18 TB. Din august 2012, versiunea actuală a software-ului este 3.1.3.

Linux

Nivelul kernelului

Din cauza restricțiilor de licențiere CDDL, ZFS nu este inclus în nucleu, dar este disponibil ca un modul de nucleu care este acum disponibil în multe distribuții GNU/Linux [6] [24] .

Multă vreme în Linux , portarea ZFS la nivelul kernelului a fost considerată imposibilă din punct de vedere legal din cauza incompatibilității licențelor CDDL , sub jurisdicția cărora se află ZFS, și GNU GPL , sub jurisdicția cărora se află Linux . Cu toate acestea, în mai 2010, Brian Behlendorf a prezentat o nouă versiune a proiectului, care lucrează la implementarea suportului nativ pentru sistemul de fișiere ZFS pentru Linux. Pentru a evita restricția de licență, Behlendorf a decis să-și distribuie întregul produs sub licența CDDL ca un modul descărcabil separat, care este livrat separat de kernel [25] [26] . Din martie 2013 (versiunea 0.6.1), proiectul este considerat gata de utilizare industrială [24] . Ubuntu 16.04 (64 de biți) este prima distribuție Linux standard care este pregătită pentru ZFS [27] .

FUSE

Inițiativa Google Summer of Code sponsorizează o adaptare Linux a ZFS folosind modulul FUSE , care rulează sistemul de fișiere ZFS în spațiul utilizatorului [28] . Se crede că această soluție este teoretic plină de pierderi de performanță [29] . Însă exemplul de implementare a NTFS ( NTFS-3G ) prin FUSE arată performanțe bune în comparație cu alte sisteme [30] , ceea ce dă motive de a prezice performanța acceptabilă a ZFS-FUSE.

La sfârșitul anului 2012, ZFS-FUSE [31] a fost prezentat ca versiunea 0.7.0, care includea suport aproape complet pentru ZFS și toate funcțiile sale - a fost introdus suportul pentru cea de-a 23-a versiune a pool-ului.

FreeBSD

Pawel Jakub Dawidek a adaptat ZFS pentru FreeBSD ca modul kernel. ZFS este inclus în FreeBSD 7.0 (lansat pe 27 februarie 2008) [32] .

Codul ZFSv28 este testat pe FreeBSD 9 și portat în ramura de dezvoltare stabilă 8. Versiunile FreeBSD 8.3, 8.4 și 9.0 acceptă versiunea 28 a pool-ului ZFS. Versiunea FreeBSD 9.2 și versiunile ulterioare ale FreeBSD folosesc noi caracteristici „feature flags” bazate pe implementarea versiunii 5000 a Pool-ului [33] .

Este de remarcat faptul că în FreeBSD, începând cu versiunea 8, ZFS, spre deosebire de Linux, nu necesită prezența FUSE și, prin urmare, nu există probleme de performanță asociate cu acesta. Acest lucru este confirmat de faptul că ZFS în FreeBSD este inclus în kernel și este prezent în sistem imediat, printre altele, permițându-vă să porniți sistemul de operare din volumele ZFS. Iar modulul FUSE nu este inclus în sistemul de operare și poate fi instalat opțional din colecția de porturi [34] (care este necesară, de exemplu, pentru a suporta NTFS).

Mac OS X

Apple a încercat să port ZFS la Mac OS X și au existat discuții active despre listele de corespondență ZFS și reduceri preliminare pentru următoarea versiune a Mac OS X de la Apple [35] . Deși Mac OS X 10.5 (9A321) acceptă ZFS, nu are capacitatea de a utiliza ZFS pe partițiile rădăcină și nici nu are capacitatea de a formata unități locale sub ZFS (acesta din urmă este considerat un bug [36] ).

În iunie 2009, Apple la conferința de presă WWDC '09 a abandonat ZFS în versiunea prezentată de Mac OS X 10.6 Snow Leopard, toate referințele la ZFS au fost eliminate din documentație și materialele site-ului. Compania nu dezvăluie motivele neutilizarii ZFS [37] .

În timp ce suportul pentru ZFS a fost returnat în Mac OS X 10.6 Snow Leopard build 10A432, marcat Golden Master, suportul ZFS a fost eliminat din nou în versiunea finală a Mac OS X 10.6, definitiv [38] .

Ca răspuns la închiderea suportului oficial pentru ZFS, a apărut un proiect gratuit, care se bazează pe baza de cod creată anterior de Apple, dar diferă prin metoda de integrare în sistem. MacZFS nu se execută la nivel de kernel, dar la nivel de utilizator, lucrând cu MacFUSE, a fost pregătit un pachet binar, compilat pe baza textelor sursă publicate în depozitul Git , precum și a instrucțiunilor de configurare.

redox

Sistemul de operare Redox plănuia să folosească ZFS ca sistem de fișiere implicit, dar mai târziu a trecut la propria sa implementare a unor principii similare - TFS [39] [40] , scris în limbajul principal Redox - Rust .

Note

  1. zfs/zfs_vnops.c at 12fa7f3436fbd89f4d6b00c2c076405e7a21d62f · zfsonlinux/zfs · GitHub + zfs/zfs_znode.h at 25458cbef9e59ef9ee6a7e729ab2522ed308f88f · zfsonlinux/zfs · GitHub + zfs/zfs_vfsops.c at 25458cbef9e59ef9ee6a7e729ab2522ed308f88f · zfsonlinux/zfs · GitHub
  2. ZFS: ultimul cuvânt în sistemele de fișiere (ZFS: ultimul cuvânt în sistemele de fișiere) . Sun Microsystems (14 septembrie 2004). Consultat la 30 aprilie 2006. Arhivat din original pe 4 iunie 2012.
  3. Jeff Bonwick. ZFS: Ultimul cuvânt din sistemele de fișiere . Blogul lui Jeff Bonwick (31 octombrie 2005). Consultat la 30 aprilie 2006. Arhivat din original pe 13 octombrie 2012.
  4. Sun sărbătorește aniversarea de succes a unui an de la OpenSolaris . Sun Microsystems (20 iunie 2006). Arhivat din original pe 13 octombrie 2012.
  5. Jeff Bonwick. Tu spui zeta, eu spun zetta (Tu spui zeta, eu spun zetta) . Blogul lui Jeff Bonwick (4 mai 2006). Consultat la 8 septembrie 2006. Arhivat din original pe 13 octombrie 2012.
  6. 1 2 3 4 5 Melnikov, 2020 .
  7. Se lansează proiectul OpenZFS . LWN.net ( 2013-09-17.mdy . 2022 ). Preluat : 2013-10-01.mdy . 2022 . Arhivat din original pe 11 octombrie 2016.
  8. Anunț OpenZFS . OpenZFS ( 2013-09-17.mdy . 2022 ). Preluat : 2013-09-19.mdy . 2022 . Arhivat din original pe 2 aprilie 2018.
  9. Istoricul OpenZFS . openzfs. Preluat : 2013-09-24.mdy . 2022 . Arhivat din original pe 24 decembrie 2013.
  10. Cea mai simplă verificare arată că în implementarea actuală mai mult de 16 BEI pool-ul nu poate folosi. Această verificare este ușor de făcut pe cont propriu, deoarece 8 dispozitive EIB sunt furnizate chiar de ZFS, cel puțin sute per gigaoctet real de spațiu atunci când se utilizează compresia.
  11. Potrivit liderului de proiect Bonwick, „Umplerea sistemelor de fișiere pe 128 de biți va depăși capacitatea cuantică de stocare a datelor pe Pământ. Nu puteți umple și stoca un volum de 128 de biți fără a fierbe oceanul.” Un exemplu despre cât de mari sunt aceste numere: dacă creați 1000 de fișiere în fiecare secundă, va dura aproximativ 9000 de ani pentru ca ZFS să atingă limita de fișiere. Calculul arată că timpul necesar este de 8925,5129601298833079654997463217 ani fără a lua în considerare modificarea vitezei unghiulare de scriere pe disc și alte costuri. Ca răspuns la o întrebare despre popularea unui ZFS fără a fierbe oceanele, Bonwick scrie: „Deși cu toții am dori ca legea lui Moore să se mențină la infinit, mecanica cuantică pune câteva limite fundamentale asupra vitezei de calcul și a capacității de informare a oricărui dispozitiv fizic. În special, s-a demonstrat că 1 kilogram de materie, limitat de 1 litru de spațiu, poate efectua nu mai mult de 10 51 de operații pe secundă pe cel mult 10 31 de biți de informații [vezi Fig. Seth Lloyd, „ Limite fizice finale ale calculului Arhivat din original pe 7 august 2008. .“ Nature 406, 1047-1054 (2000)]. Un volum complet de 128 de biți va conține 2128 de blocuri = 2137 de biți = 2140 de biți; deci masa minimă necesară pentru a stoca acest număr de biți ar fi ( 2140 biți) / ( 1031 biți/kg) = 136 miliarde kg.”
  12. Există restricții suplimentare cu privire la atributele utilizate de sistemul de operare, de exemplu, dimensiunea atributului FS pentru lista de acces Solaris NFS este limitată la aproximativ 10⁴ octeți, ceea ce corespunde la 2000 până la 20 de utilizatori, în funcție de lungimile conectărilor și gazde.
  13. Specificația ZFS pe disc (link în jos) . Arhivat din original pe 28 octombrie 2015, Sun Microsystems, Inc.  Vezi capitolul 2.4.
  14. Integritatea datelor . Raport CERN (8 aprilie 2007). Data accesului: 28 ianuarie 2008. Arhivat din original la 13 octombrie 2012.
  15. Smokin' Mirrors . Blog de Jeff Bonwick (2 mai 2006). Consultat la 23 februarie 2007. Arhivat din original pe 13 octombrie 2012.
  16. Alocarea blocurilor ZFS . Blogul lui Jeff Bonwick (4 noiembrie 2006). Consultat la 23 februarie 2007. Arhivat din original pe 13 octombrie 2012.
  17. Aceleași blocuri - Banda respingătoare uimitoare . Flippin' off bits Weblog (12 mai 2006). Preluat la 1 martie 2007. Arhivat din original la 13 octombrie 2012.
  18. Rezumat - pagini de manual secțiunea 1: Comenzi utilizator . Data accesului: 13 ianuarie 2016. Arhivat din original pe 24 octombrie 2016.
  19. Sinopsis - paginile de manual secțiunea 3: Funcții de bază ale bibliotecii: fgetattr, fsetattr, getattrat, setattrat - obțineți și setați atributele sistemului . Preluat la 13 martie 2016. Arhivat din original la 11 octombrie 2016.
  20. Rezumat - paginile de manual secțiunea 1: Comenzi utilizator: chmod - schimbarea modului de permisiuni al unui fișier . Preluat la 13 martie 2016. Arhivat din original la 25 martie 2016.
  21. Rezumat - pagini de manual secțiunea 1: Comenzi utilizator . Data accesului: 13 ianuarie 2016. Arhivat din original pe 2 februarie 2017.
  22. Ahrens, 2014 .
  23. Proiect OpenSolaris: Suport pentru criptarea discului în ZFS. . Proiectul OpenSolaris. Consultat la 11 iulie 2008. Arhivat din original la 13 octombrie 2012.
  24. 12 Neil McAllister . ZFS gata de producție oferă stocare la scară cosmică pentru Linux. Sistem de fișiere extrem de fiabil acum gata pentru o implementare largă . Registrul (30 martie 2013). Preluat la 30 martie 2013. Arhivat din original la 4 aprilie 2013.  
  25. Suportul nativ pentru sistemul de fișiere ZFS este disponibil pentru Linux  : [ arh. 29 mai 2010 ] // OpenNET. - 2010. - 27 mai.
  26. Matt Ahrens, Brian Behlendorf. OpenZFS pe Linux  (engleză)  (link indisponibil) . LinuxCon 2013 (17 septembrie 2013). Consultat la 25 decembrie 2013. Arhivat din original la 13 noiembrie 2013.
  27. Ben Everard . Ubuntu 16.04 S-a întors - și este genial. Linux Voice, numărul 27, iunie 2016
  28. Ricardo Correia. Anunțarea ZFS pe FUSE/Linux (26 mai 2006). Consultat la 15 iulie 2006. Arhivat din original la 13 octombrie 2012.
  29. Implementarea unui sistem de fișiere la nivel de activitate în spațiul utilizatorului poate implica costuri suplimentare, cum ar fi schimbarea contextului . Dar o astfel de implementare stă la baza întregii teorii a sistemelor micronucleare și este mai fiabilă decât implementarea în interiorul nucleului.
  30. Szabolcs Szakacsits. Performanța driverului de citire/scriere NTFS-3G (link indisponibil) (28 noiembrie 2007). Consultat la 20 ianuarie 2008. Arhivat din original pe 4 ianuarie 2007. 
  31. ZFS pentru Linux 0.7.0 . Consultat la 7 noiembrie 2012. Arhivat din original pe 20 noiembrie 2012.
  32. Dawidek, Pawel ZFS s-a angajat la baza FreeBSD (6 aprilie 2007). Consultat la 6 aprilie 2007. Arhivat din original la 13 octombrie 2012.
  33. Note de lansare pentru FreeBSD 9.2-RELEASE . FreeBSD. Data accesului: 30 septembrie 2013. Arhivat din original pe 3 octombrie 2013.
  34. Colecția de porturi FreeBSD . Consultat la 21 aprilie 2015. Arhivat din original pe 19 aprilie 2015.
  35. Portarea ZFS la OSX . zfs-discuții (27 aprilie 2006). Consultat la 30 aprilie 2006. Arhivat din original pe 13 octombrie 2012.
  36. Mac OS X 10.5 9A326 Seeded . Forumuri InsanelyMac (14 decembrie 2006). Consultat la 14 decembrie 2006. Arhivat din original la 13 octombrie 2012.
  37. Linux.Org.Ru . Forumuri InsanelyMac (11 iunie 2009). Consultat la 11 iunie 2009. Arhivat din original la 13 octombrie 2012.
  38. Robin Harris - Apple îl lovește pe ZFS în fund . Consultat la 2 septembrie 2009. Arhivat din original pe 2 septembrie 2009.
  39. https://github.com/redox-os/tfs Arhivat 26 octombrie 2018 la Wayback Machine „TFS a fost creat din necesitatea unui sistem de fișiere modern pentru sistemul de operare Redox, ca înlocuitor pentru ZFS, care s-a dovedit a fi lent de implementat din cauza designului său monolit.”
  40. https://www.phoronix.com/scan.php?page=news_item&px=TFS-File-System-Rust-ZFS Arhivat la 18 octombrie 2018 la Wayback Machine , https://www.phoronix.com/scan. php ?page=news_item&px=Redox-OS-2016-State Arhivat 18 octombrie 2018 la Wayback Machine

Link -uri

Porturi

Recenzii și informații

  • ZFS Uncovered  (engleză)  - o prezentare generală a sistemului de fișiere ZFS.
  • ZFS  (rusă) pe Xgu.ru
  • Melnikov G. ZFS  : arhitectură, caracteristici și diferențe față de alte sisteme de fișiere: [ arh. 1 decembrie 2020 ] / Georgy Melnikov; Grupul Mail.ru // Habr. - 2020. - 1 decembrie.