Lansarea ZFS pe Linux 0.8.0, o implementare a ZFS pentru nucleul Linux

După aproape doi ani de dezvoltare prezentat eliberare ZFS pe Linux 0.8.0, o implementare a sistemului de fișiere ZFS, concepută ca un modul pentru nucleul Linux. Modulul a fost testat cu nuclee Linux de la 2.6.32 la 5.1. Pachete de instalare gata în curând vor fi pregătite pentru distribuțiile majore de Linux, inclusiv Debian, Ubuntu, Fedora, RHEL/CentOS. Modulul ZFS pe Linux este deja inclus în distribuțiile Debian, Ubuntu, Gentoo, Sabayon Linux și ALT Linux.

Ca parte a ZFS pe Linux, a fost pregătită implementarea componentelor ZFS legate atât de funcționarea sistemului de fișiere, cât și de funcționarea managerului de volum. În special, sunt implementate următoarele componente: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) și ZPL (ZFS POSIX Layer). În plus, proiectul oferă posibilitatea de a utiliza ZFS ca backend pentru sistemul de fișiere cluster Luster. Lucrarea proiectului se bazează pe codul ZFS original, importat din proiectul OpenSolaris și extins cu îmbunătățiri și remedieri de la comunitatea Illumos. Proiectul este dezvoltat cu participarea angajaților Laboratorului Național Livermore, în baza unui contract cu Departamentul de Energie al SUA.

Codul este distribuit sub o licență CDDL gratuită, care este incompatibilă cu GPLv2, care nu permite ca ZFS pe Linux să fie integrat în ramura principală a nucleului Linux, deoarece amestecarea codului sub licențe GPLv2 și CDDL este inacceptabilă. Pentru a evita această incompatibilitate de licențiere, s-a decis distribuirea întregului produs sub licența CDDL ca modul descărcabil separat, care este furnizat separat de nucleu. Stabilitatea bazei de cod ZFS pe Linux este evaluată ca fiind comparabilă cu alte sisteme de fișiere pentru Linux.

Principalele modificări:

  • S-a adăugat suport încorporat pentru criptarea datelor stocate la nivelul sistemului de fișiere și al partițiilor. Algoritmul de criptare implicit este aes-256-ccm. Pentru a încărca cheile de criptare, se propune comanda „zfs load-key”;
  • A fost implementată capacitatea de a transmite date criptate la executarea comenzilor „zfs send” și „zfs receive”. Când se specifică opțiunea „-w”, datele deja criptate în pool sunt transferate într-un alt pool așa cum sunt, fără decriptare intermediară. În timpul unei astfel de copieri, datele rămân protejate de cheia părții expeditoare, ceea ce permite utilizarea acestui mod pentru backup pe sisteme nedemne de încredere (dacă destinatarul este compromis, fără cheie atacatorul nu va putea accesa datele);
  • S-a adăugat suport pentru eliminarea unităților primare dintr-un pool de stocare, conectate fie individual, fie ca parte a unei oglinzi. Îndepărtarea se efectuează cu comanda „zpool remove”. În timpul procesului de ștergere, datele de pe unitatea eliminată sunt copiate pe unitățile primare rămase din pool;
  • S-a adăugat comanda „zpool checkpoint” pentru a salva starea curentă a pool-ului cu posibilitatea de a anula modificările ulterioare la momentul salvat în timp (este creat un instantaneu al întregului pool). Caracteristica prezentată poate fi utilă în procesul de efectuare a lucrărilor administrative complexe potențial periculoase care ar duce în mod normal la modificări ireversibile (de exemplu, activarea semnalizatoarelor pentru noi funcționalități ZFS sau ștergerea datelor);
  • S-a adăugat comanda „zpool trim” pentru a informa unitățile utilizate într-un pool despre sectoarele care nu mai sunt utilizate. Utilizarea operațiunii TRIM face posibilă creșterea eficienței unităților SSD și prevenirea degradarii performanței acestora. Pentru a permite un proces de fundal continuu pentru transmiterea comenzilor TRIM, a fost propusă o nouă proprietate „autotrim”;
  • S-a adăugat comanda „zpool initialize” pentru a inițializa tot spațiul pe disc nealocat, asigurându-se că acesta este imediat gata de utilizare, fără a afecta performanța la primul acces (de exemplu, atunci când găzduiește spațiu de stocare virtualizat, cum ar fi VMware VMDK);
  • S-a adăugat suport pentru contabilitatea și cotele la nivel de proiect, completând cotele disponibile anterior la nivel de utilizator și grup. În esență, proiectele sunt un spațiu separat de obiecte asociate cu un identificator separat (ID de proiect). Legarea este determinată prin operația „chattr -p” sau prin moștenirea atributelor. Pentru a gestiona proiecte, sunt furnizate comenzile „zfs project” și „zfs projectspace”, care vă permit să gestionați crearea proiectelor și să setați limitele de spațiu pe disc pentru acestea;
  • S-a adăugat capacitatea de a crea scripturi Lua pentru a automatiza diverse lucrări cu ZFS. Scripturile sunt lansate în medii izolate speciale folosind comanda „zpool program”;
  • O nouă bibliotecă implementată pyzfs, care oferă un API stabil pentru administrarea ZFS din aplicațiile Python. Biblioteca este un wrapper peste libzfs_core și oferă un set identic de funcții, dar folosește tipuri mai apropiate de Python;
  • Utilitarele arcstat, arcsummary și dbufstat sunt acum compatibile cu Python 3. Utilitarele arcstat.py, arc_summary.py și dbufstat.py au fost redenumite în versiuni fără extensia „.py”;
  • S-a adăugat suport pentru interfața kernel-ului Linux Direct IO (O_DIRECT), care vă permite să accesați date fără a pune în buffer și să ocoliți memoria cache;
  • Optimizări de performanță prezentate:
    • Lucrarea comenzilor „scrub” și „resilver” a fost accelerată prin împărțirea acesteia în două faze (o fază separată este alocată pentru scanarea metadatelor și determinarea locației blocurilor de date pe disc, ceea ce permite verificarea ulterioară utilizând citirea secvențială a datelor) ;
    • S-a adăugat suport pentru clasele de alocare,
      permițând ca unități SSD relativ mici să fie incluse într-un pool și utilizate pentru a stoca doar anumite tipuri de blocuri utilizate frecvent, cum ar fi metadate, date DDT și blocuri mici cu fișiere;

    • Performanță crescută a comenzilor pentru administrare, cum ar fi
      „zfs list” și „zfs get”, datorită stocării în cache a metadatelor necesare funcționării lor;

    • S-a adăugat suport pentru paralelizarea operațiunilor de alocare a blocurilor prin lansarea de procese separate de „alocare” pentru fiecare grup de metaslab. Pe sistemele obișnuite se înregistrează o creștere a performanței cu 5-10%, dar pe cele mari (8 GB SSD, 128 core NUMA, 24 GB RAM), creșterea operațiunilor de alocare a blocurilor poate ajunge la 256%;
    • S-a adăugat posibilitatea execuției întârziate a comenzii „resilver” (reconstruirea distribuției datelor ținând cont de modificările în configurația unităților) - dacă, la pornirea unei noi operațiuni, cea anterioară nu s-a finalizat încă, atunci noul handler va începe executând numai după ce precedentul s-a terminat;
    • Au fost făcute optimizări în jurnalul ZIL (ZFS Intent Log) pentru a permite crearea și procesarea blocurilor atunci când există blocuri încă procesate de stocare;
    • Timpul pentru înregistrarea partițiilor (zvol) în sistem a fost redus. Când un pool conține un număr mare de partiții, acestea sunt acum disponibile imediat după executarea „zpool import”;
    • S-a adăugat suport pentru accelerarea hardware a calculelor hash SHA256 și operațiunilor de criptare AES-GSM folosind cipuri care acceptă Intel QAT (Tehnologia Quick Assist). S-a adăugat suport pentru instrumentele de accelerare hardware pentru chipset-ul Intel C62x și CPU Atom C3000.

Sursa: opennet.ru

Adauga un comentariu