Come molti altri file system, il file system ZFS supporta anche la compressione a livello di file.
I vantaggi della compressione del file system ZFS sono:
i) salva gli spazi del disco: Come ho già detto, quando la compressione ZFS è abilitata, i file che si archiviano sul pool/file system ZFS vengono compressi per salvare lo spazio su disco.
ii) riduce il tempo di accesso al file: I processori in questi giorni sono molto veloci. Possono decomprimere i file in tempo reale. Quindi, ci vuole meno tempo per decomprimere un file che per recuperarlo da un dispositivo di archiviazione (i.e., disco rigido). Poiché i file compressi prendono meno area di archiviazione, possono essere recuperati più velocemente dal dispositivo di archiviazione (i.e., disco rigido) rispetto ai file non compressi e può essere decomprimato al volo. Nel complesso, ciò riduce il tempo di accesso al file e migliora le prestazioni del file system.
Questo articolo ti mostrerà come abilitare la compressione sul pool ZFS e sui file system. Ti mostrerò anche come funziona la compressione locale e ereditata del pool e dei file system ZFS. Quindi iniziamo.
Creazione di un pool ZFS:
Per sperimentare la compressione ZFS, è necessario creare un pool di test ZFS Pool1 con due dispositivi di archiviazione in una configurazione a specchio.
Questo articolo utilizzerà il VDB E VDC dispositivi di archiviazione per creare un VDEV (dispositivo virtuale) in configurazione a specchio e utilizzarlo per creare un pool Pool1.
$ sudo lsblk -e7
Per creare un nuovo pool Pool1 usando il VDB E VDC dispositivi di archiviazione in una configurazione a specchio, eseguire il seguente comando:
$ sudo zpool create -f pool1 mirror /dev /vdb /dev /vdc
Un nuovo pool di ZFS Pool1 dovrebbe essere creato usando il VDB E VDC dispositivi di archiviazione in una configurazione a specchio, come mostrato nello screenshot seguente.
$ sudo zpool status pool1
Creazione di file system ZFS:
Per testare la compressione locale e ereditata, è anche necessario creare alcuni file system ZFS sul pool ZFS Pool1.
Quando si crea un pool ZFS, ZFS crea un file system con lo stesso nome del nome del pool e lo monta automaticamente nella directory root (/) del tuo computer. Il punto di montaggio avrà lo stesso nome del nome della piscina.
Ad esempio, il pool ZFS Pool1 che hai creato in precedenza creerà automaticamente un file system ZFS Pool1 e montarlo sul /pool1 Directory del tuo computer, come puoi vedere nello screenshot qui sotto.
elenco $ sudo zfs
NOTA: Chiamerò il file system di alto livello Pool1 della piscina Pool1 un pool ZFS in questo articolo. Sei libero di chiamarlo un pool o un file system. Va tutto bene.
Per creare un nuovo file system ZFS FS1 in piscina Pool1, Esegui il seguente comando:
$ sudo zfs crea pool1/fs1
Come puoi vedere, un nuovo file system ZFS Pool1/FS1 è creato ed è montato in /pool1/fs1 directory.
elenco $ sudo zfs
È possibile creare un file system FS2 nel FS1 file system, che è nel pool Pool1 come segue:
$ sudo zfs crea pool1/fs1/fs2
Come puoi vedere, il file system FS2 è nidificato all'interno del file system Pool1/FS1.
elenco $ sudo zfs
Crea un altro file system FS3 in piscina Pool1 come segue:
$ sudo zfs crea pool1/fs3
Un file system FS3 dovrebbe essere creato nel pool Pool1, Come puoi vedere nello screenshot qui sotto.
elenco $ sudo zfs
I file system FS1, FS2, E FS3 dovrebbe creare la seguente struttura di directory nel pool Pool1:
$ Tree /Pool1
I file system ZFS sono come directory che crei su qualsiasi altro file system. Possono essere nidificati l'uno nell'altro. Di solito, sono montati nel punto di montaggio della piscina (io.e.,/pool1 per la piscina Pool1). È possibile configurare ZFS per montarli ovunque sul tuo computer come qualsiasi altro file system. Questo è un argomento per un altro articolo.
Ora, dovresti avere una comprensione di base di come i file system sono nidificati l'uno nell'altro in ZFS. Questo è abbastanza per capire la compressione locale e ereditaria di ZFS nelle prossime sezioni di questo articolo.
Compressione abilitante sui pool ZFS:
Se si abilita la compressione su un pool ZFS, la compressione sarà abilitata anche su tutti i file system di quel pool ZFS.
Puoi scoprire se la compressione è abilitata sul tuo pool ZFS Pool1 con il seguente comando:
$ sudo zfs ottieni pool di compressione1
La compressione non è abilitata sui pool ZFS per impostazione predefinita, come puoi vedere nello screenshot seguente.
Allo stesso modo, puoi verificare se la compressione è abilitata sul FS1, FS2, E FS3 file system. Anche la compressione non è abilitata sui file system ZFS per impostazione predefinita.
$ sudo zfs ottieni pool di compressione1/fs1
$ sudo zfs Ottieni pool di compressione1/fs1/fs2
$ sudo zfs ottieni la compressione pool1/fs3
Puoi abilitare la compressione in piscina Pool1 impostando il compressione proprietà della piscina a SU come segue:
$ sudo zfs imposta compressione = su pool1
Come potete vedere, compressione è abilitato (SU), ed è un Locale proprietà della piscina Pool1.
NOTA: Se una proprietà è Locale, Significa che la proprietà è impostata direttamente sul pool o nel file system. Non è ereditato dal suo genitore (pool o file system).
$ sudo zfs ottieni pool di compressione1
Ora, se controlli il compressione proprietà del FS1, FS2, E FS3 file system, dovresti vedere che la compressione è abilitata (SU) in tutti loro, e la proprietà lo è Ereditato da Pool1.
Poiché non hai impostato il compressione proprietà per il FS1, FS2, E FS3 file system, lo è ereditato dalla piscina Pool1.
$ sudo zfs ottieni pool di compressione1/fs1
$ sudo zfs Ottieni pool di compressione1/fs1/fs2
$ sudo zfs ottieni la compressione pool1/fs3
Puoi disabilitare compressione solo per il FS1 file system impostando il file compressione proprietà del FS1 file system a spento come segue:
$ sudo zfs imposta compressione = off pool1/fs1
Come potete vedere, compressione è disabilitato (spento) per il FS1 file system. Ora che il compressione La proprietà è impostata localmente per il FS1 file system. Non verrà ereditato dalla piscina Pool1.
$ sudo zfs ottieni pool di compressione1/fs1
IL FS2 Il file system è figlio del FS1 file system. Quindi, ha ereditato il compressione proprietà dal FS1 file system (genitore), come puoi vedere nello screenshot seguente.
$ sudo zfs Ottieni pool di compressione1/fs1/fs2
Come hai abilitato la compressione sul pool Pool1, La proprietà viene ereditata automaticamente da tutti i file system nidificati (figlio - FS1, FS2, E FS3) della piscina Pool1 (il genitore). Questo è il modo in cui le proprietà sono ereditate nei file system ZFS: i file system figlio ottengono le loro proprietà dai file system o pool principali a meno che non si imposta esplicitamente proprietà specifiche per il file system figlio.
Se impazzisci con i file system ZFS nidificati senza alcuna pianificazione precedente, potrebbe essere molto difficile gestire la compressione sul tuo pool ZFS. Quindi, non impazzire con i file system di nidificazione ZFS.
Compressione abilitante sui file system ZFS:
È inoltre possibile abilitare la compressione su file system ZFS specifici. Abilitiamo la compressione sul FS3 File system ZFS che hai creato in precedenza.
A questo punto, la compressione è abilitata per il FS3 File system ZFS perché la compressione è abilitata nel pool Pool1, Come puoi vedere nello screenshot qui sotto.
La proprietà di compressione per il FS3 Il file system è ereditato dal pool Pool1.
$ sudo zfs ottieni la compressione pool1/fs3
Se si disabilita la compressione sul pool Pool1, La compressione verrà anche disabilitata per il file system ZFS FS3.
$ sudo zfs imposta compressione = off pool1
Come potete vedere, compressione è anche disabilitato (spento) per il file system FS3 Come lo ha ereditato dalla piscina Pool1. Se si abilita la compressione per il FS3 file system a livello locale, quindi non accadrà.
$ sudo zfs ottieni la compressione pool1/fs3
Per abilitare la compressione per il FS3 file system, impostare la proprietà di compressione del FS3 file system a SU come segue:
$ sudo zfs imposta compressione = su pool1/fs3
Come potete vedere, compressione è abilitato (SU) per il FS3 file system localmente.
Se vuoi, puoi disabilitare compressione per il FS3 file system come segue:
$ sudo zfs imposta compressione = off pool1/fs3
La compressione dovrebbe essere disabilitata per il FS3 file system, come puoi vedere nello screenshot seguente.
$ sudo zfs ottieni la compressione pool1/fs3
Controllando come vengono compressi i dati:
Dopo aver abilitato la compressione sul pool ZFS o sul file system, ti consigliamo di sapere quanto bene i dati memorizzati nel pool ZFS o nel file system sono compressi. In questa sezione, ti mostrerò come farlo.
Distruggiamo lo ZFS Pool Pool1 che hai appena creato e ricreandolo per rendere le cose un po 'più semplici.
Per distruggere la piscina ZFS Pool1, Esegui il seguente comando:
$ sudo zpool distruggi pool1
Ora, crea il pool ZFS Pool1 di nuovo usando il VDB E VDC dispositivi di archiviazione nella configurazione dello specchio come segue:
$ sudo zpool create -f pool1 mirror /dev /vdb /dev /vdc
Abilita la compressione in piscina Pool1 come segue:
$ sudo zfs imposta compressione = su pool1
La compressione dovrebbe essere abilitata per il pool ZFS Pool1.
$ sudo zfs ottieni pool di compressione1
Puoi vedere il rapporto di compressione del pool ZFS Pool1 con il seguente comando:
$ sudo zfs ottieni cimpressratio pool1
In questo momento, la piscina Pool1 è vuoto. Quindi, il rapporto di compressione è 1.00x. Significa che nessun dato è ancora compresso.
Come puoi vedere, solo 108 kb dei dati vengono utilizzati dal pool Pool1.
elenco $ sudo zfs
Copiamo il /eccetera directory al pool ZFS Pool1.
$ sudo cp -r/ etc/ pool1/
Come puoi vedere, il /eccetera La directory viene copiata nel pool ZFS Pool1.
$ ls /pool1
Si noti che le dimensioni del /eccetera La directory in piscina è 4.2 mb1. Ma solo 3.26 MB2 dello spazio viene utilizzato dalla piscina Pool1.
$ sudo du -sh /pool1
elenco $ sudo zfs
In realtà, il /eccetera La directory è 11 mb di dimensioni, come puoi vedere nello screenshot qui sotto.
$ sudo du -sh /ecc
Il rapporto di compressione è circa 1.93x. È un ottimo rapporto di compressione. Maggiore è il rapporto di compressione, più spazio su disco risparmierai con la compressione ZFS.
$ sudo zfs ottieni cimpressratio pool1
ZFS Supportati algoritmi di compressione:
Al momento della stesura di questo documento, ZFS supporta i seguenti algoritmi di compressione dei dati:
i) lzjb: Questo algoritmo è ottimizzato per le prestazioni. Fornisce inoltre un rapporto di compressione dei dati decente.
ii) lz4: Questo algoritmo è una sostituzione del lzjb algoritmo. Fornisce una compressione e una decompressione più veloci. Il rapporto di compressione è moderatamente superiore al lzjb algoritmo.
iii) gzip: Usa lo stesso algoritmo di compressione del gzip comando. IL gzip L'algoritmo di compressione supporta diversi livelli di compressione. Il livello di compressione può essere 1-9. Puoi usare gzip-n (N è il livello) per definire un livello per il gzip Algoritmo di compressione. Se non specifichi un livello per il gzip Algoritmo di compressione, ZFS utilizza il livello 6 (GZIP-6) per impostazione predefinita.
GZIP-1: Livello 1 GZIP - Rapporto di compressione più veloce ma più basso.
GZIP-2: GZIP di livello 2 - più lento del livello 1 ma un rapporto di compressione più elevato rispetto al livello 1.
GZIP-3: GZIP di livello 3 - più lento del livello 2 ma un rapporto di compressione più elevato rispetto al livello 2.
GZIP-4: Livello 4 GZIP - più lento del livello 3 ma un rapporto di compressione più elevato rispetto al livello 3.
GZIP-5: Livello 5 GZIP - più lento del livello 4 ma un rapporto di compressione più elevato rispetto al livello 4.
GZIP-6: Livello 6 GZIP - più lento del livello 5 ma un rapporto di compressione più elevato rispetto al livello 5.
GZIP-7: Livello 7 GZIP - più lento del livello 6 ma un rapporto di compressione più elevato rispetto al livello 6.
GZIP-8: Livello 8 GZIP - più lento del livello 7 ma un rapporto di compressione più elevato rispetto al livello 7.
GZIP-9: GZIP di livello 9 - Rapporto di compressione più lento ma più alto.
iv) zle: Questo algoritmo è ottimizzato per le corse di zero.
lzjb è l'algoritmo di compressione dei dati predefiniti del file system ZFS.
Se hai il LZ4_COMPRET Funzione abilitata nel pool ZFS, quindi l'algoritmo di compressione dati predefinita sarà LZ4.
Per verificare se il LZ4_COMPRET La funzione è abilitata sul pool ZFS Pool1, Esegui il seguente comando:
$ sudo zpool Get funzione@lz4_compress pool1
Come puoi vedere, il LZ4_COMPRET La funzione è abilitata nel pool ZFS Pool1.
È possibile impostare un algoritmo di compressione diverso sul pool ZFS o sul file system come segue:
$ sudo zfs imposta compressione =
Sostituire con uno degli algoritmi di compressione supportati da ZFS e con il pool ZFS o il file system in cui si desidera abilitare la compressione utilizzando l'algoritmo di compressione .
Ad esempio, per abilitare la compressione e utilizzare il GZIP-9 Algoritmo di compressione in piscina Pool1, Esegui il seguente comando:
$ sudo zfs imposta compressione = gzip-9 pool1
Come potete vedere, GZIP-9 La compressione è abilitata sul pool Pool1.
$ sudo zfs ottieni pool di compressione1
Ora, crea un file system ZFS FS3 sul pool ZFS Pool1 come segue:
$ sudo zfs crea pool1/fs3
Allo stesso modo, puoi abilitare la compressione sul FS3 File system ZFS utilizzando il file zle Algoritmo di compressione come segue:
$ sudo zfs imposta compressione = zle pool1/fs3
Come potete vedere, zle La compressione è abilitata sul file system ZFS FS3.
$ sudo zfs ottieni la compressione pool1/fs3
Dovrei abilitare la compressione ZFS?
La dimensione di ogni tipo di file non è ridotta quando compressa. Video (i.e., Mp4), audio (i.e., Mp3) e immagine (i.e., Jpeg) file, ad esempio. Invece che le loro dimensioni sono ridotte, a volte, diventano più grandi quando sono compressi. Questo è un aspetto negativo della compressione del file system.
Se stai archiviando video, audio e immagini solo sul pool/file system ZFS, la compressione potrebbe non darti molti vantaggi. Ma se stai archiviando file di testo e altri file comprimibili (i.e., Documento Word, binari/programmi eseguibili), quindi abilitare la compressione sul pool/file system ZFS ne vale la pena. Ti farà risparmiare un sacco di spazio su disco e migliorerà le prestazioni del pool/file system ZFS.
Conclusione:
In questo articolo, ti ho mostrato come abilitare la compressione sui pool di ZFS e nei file system. Ti ho anche mostrato come verificare il rapporto di compressione dei pool ZFS e del file system per scoprire come vengono compressi i dati efficace. Ho discusso degli algoritmi di compressione ZFS disponibili e ho mostrato come abilitare la compressione sui pool e i file system ZFS utilizzando anche algoritmi specifici di compressione supportati da ZFS.
Riferimenti:
[1] MANPAGE DI ZFS