Dopo quasi due anni di sviluppo rilascio , implementazione del file system ZFS, presentato come modulo per il kernel di Linux. Il funzionamento del modulo è testato con i kernel di Linux dalla versione 2.6.32 fino alla 5.1. I pacchetti di installazione pronti saranno per le principali distribuzioni Linux, tra cui Debian, Ubuntu, Fedora, RHEL/CentOS. Il modulo ZFS su Linux è già incluso in Debian, Ubuntu, Gentoo, Sabayon Linux e ALT Linux.
Nell'ambito di ZFS su Linux è stata preparata l'implementazione dei componenti ZFS, relativi sia al funzionamento del file system che al funzionamento del gestore dei volumi. In particolare, sono stati implementati componenti: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) e ZPL (ZFS POSIX Layer). Inoltre, il progetto offre la possibilità di utilizzare ZFS come backend per il file system cluster Lustre. I progressi del progetto si basano sul codice originale di ZFS, importato dal progetto OpenSolaris e ampliato con miglioramenti e correzioni dalla comunità Illumos. Il progetto è sviluppato con la partecipazione dei dipendenti del Lawrence Livermore National Laboratory, sotto contratto con il Dipartimento dell'Energia degli Stati Uniti.
Il codice è distribuito sotto la licenza libera CDDL, che non è compatibile con GPLv2, il che impedisce l'integrazione di ZFS su Linux nel ramo principale del kernel Linux, poiché la combinazione di codice sotto licenze GPLv2 e CDDL è inaccettabile. Per aggirare questa incompatibilità di licenza, è stato deciso di distribuire il prodotto interamente sotto la licenza CDDL come modulo scaricabile separato, fornito separatamente dal kernel. La stabilità della base di codice ZFS su Linux è valutata come paragonabile ad altri file system per Linux.
Principali modifiche:
- È stato aggiunto il supporto integrato per la crittografia dei dati memorizzati a livello di file system e partizioni. Per impostazione predefinita, viene utilizzato l'algoritmo aes-256-ccm per la crittografia. Per caricare le chiavi di crittografia, è stata proposta il comando «zfs load-key»;
- È stata implementata la possibilità di trasferire dati crittografati durante l'esecuzione dei comandi «zfs send» e «zfs receive». Specificando l'opzione «-w», i dati già crittografati nel pool vengono trasferiti in un altro pool così come sono, senza decrittografia intermedia. Durante una copia di questo tipo, i dati rimangono protetti dalla chiave della parte mittente, consentendo di utilizzare questa modalità per il backup su sistemi non affidabili (in caso di compromissione del destinatario, senza la chiave l'attaccante non potrà accedere ai dati);
- Aggiunta la supporto per la rimozione di dispositivi primari dal pool di archiviazione, collegati sia singolarmente che come parte di uno specchio. La rimozione avviene attraverso il comando «zpool remove». Durante il processo di rimozione, i dati dal dispositivo escluso vengono copiati sugli altri dispositivi primari rimasti nel pool;
- È stato aggiunto il comando «zpool checkpoint» per salvare lo stato attuale del pool con la possibilità di ripristinare le modifiche successive al momento salvato (viene creato uno snapshot dell'intero pool). Questa funzionalità può risultare utile durante l'esecuzione di operazioni amministrative complesse e potenzialmente pericolose, normalmente comportanti cambiamenti irreversibili (ad esempio, attivazione dei flag per una nuova funzionalità di ZFS o pulizia dei dati);
- È stato aggiunto il comando «zpool trim», che consente di informare i dischi utilizzati nel pool sui settori che non sono più in uso. L'applicazione dell'operazione TRIM consente di migliorare l'efficienza degli SSD e prevenire la degradazione delle loro prestazioni. È stata proposta una nuova proprietà «autotrim» per abilitare un processo di invio dei comandi TRIM in background continuativo;
- È stata aggiunta il comando «zpool initialize» per inizializzare tutto lo spazio su disco non allocato, garantendo così la sua prontezza all'uso immediato, senza compromettere le prestazioni al primo accesso (ad esempio, durante l'allocazione di archiviazioni virtualizzate come VMware VMDK);
- È stato aggiunto il supporto per la contabilizzazione e le quote a livello di progetto, che integra le quote precedentemente disponibili a livello di utente e di gruppo. Fondamentalmente, i progetti sono spazi separati di oggetti associati a un identificatore unico (project ID). L'associazione è determinata tramite l'operazione ‘chattr -p’ o attraverso l'ereditarietà degli attributi. Per gestire i progetti, sono disponibili i comandi «zfs project» e «zfs projectspace», che consentono di gestire la creazione di progetti e impostare limiti di spazio su disco;
- È stata aggiunta la possibilità di creare script Lua per automatizzare diverse operazioni con ZFS. Gli script vengono eseguiti in ambienti isolati speciali tramite il comando «zpool program»;
- È stata implementata una nuova libreria , che fornisce un'API stabile per la gestione di ZFS da applicazioni in linguaggio Python. La libreria funge da interfaccia a libzfs_core e offre un set di funzioni equivalente, ma utilizza tipi più adatti a Python;
- È garantita la compatibilità degli strumenti arcstat, arcsummary e dbufstat con Python 3. Gli strumenti arcstat.py, arc_summary.py e dbufstat.py sono stati rinominati in versioni senza estensione ".py";
- È stata aggiunta la supporto per l'interfaccia del kernel Linux Direct IO (O_DIRECT), che consente l'accesso ai dati senza buffering e bypassando la cache;
- Sono state presentate ottimizzazioni delle performance:
- È stato accelerato il funzionamento dei comandi "scrub" e "resilver" grazie alla suddivisione in due fasi (è stata dedicata una fase separata per la scansione dei metadati e per determinare la posizione dei blocchi dati sul disco, il che consente di eseguire ulteriori verifiche utilizzando la lettura sequenziale dei dati);
- È stato aggiunto il supporto per le classi di allocazione dei dati (Allocation classes),
, che consentono di includere nel pool relativi SSD di dimensioni ridotte e utilizzarli per memorizzare solo determinati tipi di blocchi frequentemente utilizzati, come metadati, dati DDT e piccoli blocchi di file; - Migliorata l'efficienza dei comandi di gestione, come
«zfs list» e «zfs get», grazie alla memorizzazione nella cache dei metadati necessari per il loro funzionamento; - Introdotta la supporto per il parallelismo nelle operazioni di allocazione dei blocchi attraverso l'avvio di processi «allocator» separati per ciascun gruppo di metaslab. Su sistemi normali si nota un aumento delle prestazioni del 5-10%, ma su grandi sistemi (8 128 GB SSD, 24 core NUMA, 256 GB di RAM) l'incremento delle operazioni di allocazione può raggiungere il 25%;
- Aggiunta la possibilità di eseguire con ritardo il comando «resilver» (ricostruzione della distribuzione dei dati tenendo conto della modifica della configurazione degli archivi) — se, all'avvio di una nuova operazione, la precedente non è ancora completata, il nuovo gestore inizierà ad eseguire solo al termine della precedente;
- Ottimizzazioni apportate al registro ZIL (ZFS Intent Log) che consentono la creazione e l'elaborazione dei blocchi anche in presenza di blocchi già in lavorazione dall'archiviazione;
- Ridotto il tempo di registrazione delle partizioni (zvol) nel sistema. Quando il pool contiene un gran numero di partizioni, queste diventano disponibili immediatamente dopo l'esecuzione di «zpool import»;
- È stata aggiunta la supporto per l'accelerazione hardware nel calcolo degli hash SHA256 e nelle operazioni di crittografia AES-GSM utilizzando chip con tecnologia Intel QAT (Quick Assist Technology). È stata aggiunta anche la supporto per l'accelerazione hardware del chipset Intel C62x e della CPU Atom C3000.
Fonte: opennet.ru
