După aproape doi ani de dezvoltare lansare , implementând sistemul de fișiere ZFS, proiectat ca un modul pentru nucleul Linux. Funcționarea modulului a fost testată cu nuclee Linux de la 2.6.32 până la 5.1. Pachetele de instalare finale vor fi disponibile în curând pentru principalele distribuții 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.
În cadrul 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 volume. În special, au fost implementate componentele: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) și ZPL (ZFS POSIX Layer). În plus, proiectul oferă posibilitatea utilizării ZFS ca backend pentru sistemul de fișiere în cluster Lustre. Lucrările proiectului se bazează pe codul original ZFS, importat din proiectul OpenSolaris și extins cu îmbunătățiri și corecții din comunitatea Illumos. Proiectul este dezvoltat cu participarea angajaților de la Laboratorul Național Livermore sub un contract cu Ministerul Energiei din SUA.
Codul este distribuit sub o licență liberă CDDL, care nu este compatibilă cu GPLv2, ceea ce împiedică integrarea ZFS pe Linux în ramura principală a nucleului Linux, deoarece amestecarea codului sub licențele GPLv2 și CDDL este inacceptabilă. Pentru a evita această incompatibilitate de licențiere, s-a decis să se distribuie produsul în întregime sub licența CDDL sub formă de modul descărcabil separat, care este livrat separat de nucleu. Stabilitatea bazelor de cod ale ZFS pe Linux este evaluată ca fiind comparabilă cu alte FS pentru Linux.
Modificări principale:
- A fost adăugat suport încorporat pentru criptarea datelor stocate la nivelul sistemului de fișiere și al partițiilor. Algoritmul aes-256-ccm este utilizat în mod implicit pentru criptare. Comanda „zfs load-key” este propusă pentru încărcarea cheilor de criptare;
- A fost implementată posibilitatea de a transfera date criptate atunci când se execută comenzile „zfs send” și „zfs receive”. Când se specifică opțiunea „-w”, datele deja criptate din pool sunt transferate în alt pool așa cum sunt, fără decriptare intermediară. În cadrul acestei copieri, datele rămân protejate cu cheia părții care trimite, ceea ce permite utilizarea acestui mod pentru backup pe sisteme nesigure (în cazul compromisului destinatarului, fără cheie atacatorul nu va putea accesa datele);
- A fost adăugată suportul pentru eliminarea unităților de stocare primare din pool-ul de stocare, conectate fie individual, fie ca parte a unui mirror. Eliminarea se efectuează cu comanda „zpool remove”. În timpul ștergerii, datele de pe unitatea eliminată sunt copiate pe unitățile primare rămase în pool;
- A fost adăugată comanda „zpool checkpoint” pentru a salva starea curentă a pool-ului cu posibilitatea de a reveni la modificările ulterioare la momentul salvat (se creează un snapshot al întregului pool). Această funcționalitate poate fi utilă în timpul desfășurării unor lucrări administrative complexe, care în condiții normale duc la modificări ireversibile (de exemplu, activarea flag-urilor noii funcționalități ZFS sau curățarea datelor);
- A fost adăugată comanda „zpool trim”, care permite informarea unităților de stocare utilizate în pool despre sectoarele care nu mai sunt folosite. Aplicarea operației TRIM oferă posibilitatea de a îmbunătăți eficiența SSD-urilor și de a preveni degradarea performanței lor. Pentru activarea unui proces continuu de fundal pentru transmiterea comenzilor TRIM, a fost propusă o nouă proprietate „autotrim”;
- A fost adăugată comanda „zpool initialize” pentru a iniția întregul spațiu de disc nerepartizat, ceea ce permite asigurarea disponibilității sale imediate pentru utilizare, fără a reduce performanța la prima accesare (de exemplu, în cazul plasării de stocări virtualizate, cum ar fi VMware VMDK);
- A fost adăugat suport pentru contabilitate și cote la nivel de proiect, completând cotele anterioare disponibile la nivel de utilizator și grup. Practic, proiectele sunt un spațiu separat de obiecte, legate de un identificator distinct (project ID). Legătura este definită prin operația 'chattr -p' sau prin moștenirea atributelor. Pentru gestionarea proiectelor sunt prezentate comenzile „zfs project” și „zfs projectspace”, care permit gestionarea creării proiectelor și stabilirea limitelor de spațiu pe disc pentru acestea;
- A fost adăugată posibilitatea de a crea scripturi Lua pentru automatizarea diferitelor lucrări cu ZFS. Scripturile sunt executate în medii izolate speciale prin comanda „zpool program”;
- A fost implementată o nouă bibliotecă , oferind un API stabil pentru administrarea ZFS din aplicații scrise în Python. Biblioteca este un wrapper peste libzfs_core și oferă un set identic de funcții, dar aplică tipuri mai apropiate de Python;
- A fost asigurată compatibilitatea utilitarilor arcstat, arcsummary și dbufstat cu Python 3. Utilitarele arcstat.py, arc_summary.py și dbufstat.py au fost redenumite în variante fără extensia „.py”;
- A fost adăugat suport pentru interfața de kernel Linux Direct IO (O_DIRECT), care permite accesul la date fără buffer și ocolind cache-ul;
- Au fost prezentate optimizări de performanță:
- Lucrările comenzilor „scrub” și „resilver” au fost accelerate prin împărțirea în două faze (a fost dedicată o fază separată pentru scanarea metadatelor și determinarea amplasării blocurilor de date pe disc, ceea ce permite realizarea unei verificări ulterioare folosind citiri secvențiale de date);
- A fost adăugat suport pentru clasele de alocare a datelor (Allocation classes),
care permit includerea în pool a SSD-urilor relativ mici și utilizarea acestora exclusiv pentru stocarea anumitor tipuri de blocuri folosite frecvent, cum ar fi metadatele, datele DDT și blocurile mici cu fișiere; - A fost crescută performanța comenzilor pentru administrare, cum ar fi
„zfs list” și „zfs get”, prin cache-ul metadatelor necesare pentru funcționarea lor; - A fost adăugat suport pentru paralelizarea operațiunilor de alocare a blocurilor prin lansarea unor procese „allocator” separate pentru fiecare grup de metaslab. Pe sistemele obișnuite se observă o creștere a performanței de 5-10%, dar pe sisteme mari (8 128 GB SSD, 24 core NUMA, 256 GB RAM) creșterea operațiunilor de alocare a blocurilor poate ajunge la 25%;
- A fost adăugată posibilitatea de a amâna executarea comenzii „resilver” (reconstruirea distribuției datelor având în vedere modificările configurației unităților) — dacă la lansarea unei noi operații, cea anterioară nu s-a finalizat, noul handler va începe să execute doar după ce termina cea precedentă;
- În jurnalul ZIL (ZFS Intent Log) au fost aduse optimizări ce permit crearea și procesarea blocurilor în prezența blocurilor care sunt încă procesate de stocare;
- Timpul de înregistrare a zvol-urilor în sistem a fost redus. Când pool-ul conține un număr mare de zvol-uri, acestea devin disponibile imediat după executarea „zpool import”;
- S-a adăugat suport pentru accelerarea hardware a calculului de hash-uri SHA256 și operațiilor de criptare AES-GSM cu utilizarea chip-urilor care suportă tehnologia Intel QAT (Quick Assist Technology). A fost adăugat suport pentru soluții de accelerare hardware ale chipset-ului Intel C62x și CPU Atom C3000.
Sursa: opennet.ro
