Rilascio di ZFS su Linux 0.8.0, implementazioni di ZFS per il kernel Linux

Dopo quasi due anni di sviluppo presentata rilasciare ZFS su Linux 0.8.0, un'implementazione del file system ZFS impacchettato come modulo per il kernel Linux. Il modulo è stato testato con kernel Linux da 2.6.32 a 5.1. Pacchetti di installazione pronti in arrivo sarà preparato per le principali distribuzioni Linux tra cui Debian, Ubuntu, Fedora, RHEL/CentOS. Il modulo ZFS su Linux è già incluso nelle distribuzioni Debian, Ubuntu, Gentoo, Sabayon Linux e ALT Linux.

Come parte di ZFS su Linux, è stata preparata un'implementazione dei componenti ZFS relativi sia al funzionamento del file system sia al funzionamento del gestore di volumi. In particolare vengono implementati i seguenti 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 del cluster Lustre. Il lavoro del progetto si basa sul codice ZFS originale importato dal progetto OpenSolaris e migliorato con miglioramenti e correzioni dalla comunità Illumos. Il progetto è stato sviluppato con la partecipazione dei dipendenti del Livermore National Laboratory sotto contratto con il Dipartimento dell'Energia degli Stati Uniti.

Il codice è distribuito con una licenza CDDL gratuita, incompatibile con GPLv2, che non consente l'integrazione di ZFS su Linux nel ramo principale del kernel Linux, poiché non è consentito mescolare codice con licenze GPLv2 e CDDL. Per aggirare questa incompatibilità di licenza, si è deciso di distribuire l'intero prodotto sotto la licenza CDDL come modulo caricabile separatamente, che viene fornito separatamente dal core. La stabilità della base di codice ZFS su Linux è valutata come paragonabile ad altri file system per Linux.

Principali modifiche:

  • Aggiunto il supporto integrato per la crittografia dei dati archiviati a livello di file system e partizioni. L'algoritmo di crittografia predefinito è aes-256-ccm. Il comando "zfs load-key" è stato proposto per caricare le chiavi di cifratura;
  • Implementata la possibilità di trasferire dati crittografati durante l'esecuzione dei comandi 'zfs send' e 'zfs receive'. Quando si specifica l'opzione "-w", i dati già crittografati nel pool vengono trasferiti a un altro pool così come sono, senza decrittografia intermedia. Con tale copia, i dati rimangono protetti dalla chiave del mittente, che consente di utilizzare questa modalità per il backup su sistemi non affidabili (se il destinatario è compromesso, l'attaccante non sarà in grado di accedere ai dati senza la chiave);
  • Aggiunto il supporto per la rimozione delle unità primarie da un pool di archiviazione, connesse sia individualmente che come parte di un mirror. La rimozione viene eseguita con il comando "zpool remove". Il processo di eliminazione copia i dati dall'unità esclusa alle unità primarie rimanenti nel pool;
  • Aggiunto il comando "zpool checkpoint" per salvare lo stato corrente del pool con la possibilità di eseguire il rollback di ulteriori modifiche al punto temporale salvato (viene creata un'istantanea dell'intero pool). Questa funzione può essere utile nel processo di esecuzione di lavori amministrativi complessi potenzialmente pericolosi, che in condizioni normali portano a modifiche irreversibili (ad esempio, attivazione di flag per nuove funzionalità ZFS o cancellazione di dati);
  • È stato aggiunto il comando "zpool trim" per informare le unità utilizzate nel pool sui settori che non sono più in uso. L'uso dell'operazione TRIM consente di aumentare l'efficienza degli SSD e di prevenire il degrado delle loro prestazioni. È stata proposta una nuova proprietà "autotrim" per abilitare il processo continuo in background di trasmissione dei comandi TRIM;
  • Aggiunto il comando "zpool initialize" per inizializzare tutto lo spazio su disco non allocato, che consente di essere immediatamente pronto per l'uso, senza degrado delle prestazioni al primo accesso (ad esempio, quando si ospitano archivi virtualizzati come VMware VMDK);
  • Aggiunto il supporto per la contabilità e le quote a livello di progetto, oltre alle quote precedentemente disponibili a livello di utente e gruppo. In sostanza, i progetti sono uno spazio separato di oggetti associati a un identificatore separato (ID progetto). L'associazione è definita tramite l'operazione 'chattr -p' o tramite l'ereditarietà degli attributi. Per la gestione dei progetti vengono presentati i comandi “zfs project” e “zfs projectspace” che permettono di gestire la creazione dei progetti e di impostarne i limiti di spazio su disco;
  • Aggiunta la possibilità di creare script Lua per automatizzare vari lavori con ZFS. Gli script vengono eseguiti in speciali ambienti isolati utilizzando il comando "zpool program";
  • Nuova libreria implementata pyzfs, che fornisce un'API stabile per l'amministrazione di ZFS dalle applicazioni Python. La libreria è un wrapper attorno a libzfs_core e fornisce un insieme identico di funzioni, ma utilizza tipi Python più vicini;
  • Le utilità arcstat, arcsummary e dbufstat sono state rese compatibili con Python 3. Le utilità arcstat.py, arc_summary.py e dbufstat.py sono state rinominate in versioni senza l'estensione ".py";
  • Aggiunto il supporto per l'interfaccia del kernel Linux Direct IO (O_DIRECT), che consente l'accesso ai dati senza buffering e bypassando la cache;
  • Ottimizzazioni delle prestazioni introdotte:
    • Il lavoro dei comandi "scrub" e "resilver" è stato accelerato grazie alla suddivisione in due fasi (è stata assegnata una fase separata per la scansione dei metadati e la determinazione della posizione dei blocchi con i dati sul disco, che consente un'ulteriore verifica utilizzando i dati sequenziali lettura);
    • Aggiunto il supporto per le classi di allocazione,
      consentire di raggruppare e utilizzare SSD relativamente piccoli per archiviare solo determinati tipi di blocchi di uso comune, come metadati, dati DDT e piccoli blocchi di file;

    • Prestazioni migliorate dei comandi di amministrazione come
      "zfs list" e "zfs get", memorizzando nella cache i metadati necessari al loro funzionamento;

    • Aggiunto il supporto per la parallelizzazione delle operazioni di allocazione dei blocchi eseguendo processi di allocatore separati per ogni gruppo metaslab. Sui sistemi convenzionali si registra un aumento delle prestazioni del 5-10%, ma su quelli di grandi dimensioni (8 SSD da 128 GB, 24 core NUMA, 256 GB di RAM) l'aumento delle operazioni di allocazione dei blocchi può raggiungere il 25%;
    • Aggiunta la possibilità di ritardare l'esecuzione del comando "resilver" (ricostruire la distribuzione dei dati tenendo conto dei cambiamenti nella configurazione delle unità) - se il precedente non è ancora stato completato all'avvio di una nuova operazione, il nuovo gestore inizierà l'esecuzione solo dopo il precedente è terminato;
    • Sono state aggiunte ottimizzazioni allo ZIL (ZFS Intent Log) per consentire la creazione e l'elaborazione di blocchi in presenza di blocchi ancora in fase di elaborazione da parte dello storage;
    • Tempo di registrazione ridotto per le partizioni (zvol) nel sistema. Quando un pool contiene un numero elevato di partizioni, ora sono disponibili immediatamente dopo aver eseguito "zpool import";
    • Aggiunto il supporto per il calcolo con accelerazione hardware degli hash SHA256 e le operazioni di crittografia AES-GSM utilizzando i chip Intel QAT (Quick Assist Technology). Aggiunto il supporto per l'accelerazione hardware del chipset Intel C62x e della CPU Atom C3000.

Fonte: opennet.ru

Aggiungi un commento