ZFS: ricomprimere i file esistenti dopo la modifica dell'algoritmo di compressione


14

Ho un pool creato nel 2011 che utilizza lzjb compressione non è stato fino a un paio d'anni dopo che un aggiornamento mi ha permesso di impostare la compressione lz4. Stimo che almeno il 20% del contenuto (per spazio) sull'array sia stato creato prima del 2013, il che significa che è ancora compresso usando lzjb.

Posso pensare a un paio di opzioni per risolvere questo problema e riguadagnare (un po ') spazio:

  1. Eseguire il backup e il ripristino in un nuovo pool. Non molto pratico, poiché non ho spazio di archiviazione ridondante sufficiente per contenere la copia temporanea. Il ripristino richiederebbe inoltre che il pool rimanga offline per diverse ore.

  2. Scrivi uno script per ricopiare qualsiasi file con un timestamp precedente al 2013. Potenzialmente rischioso, specialmente se soffoca su spazi o altri caratteri speciali e finisce per alterare il nome originale.

C'è un modo per convincere ZFS a ricomprimere i blocchi legacy usando l'attuale algoritmo di compressione? Un po 'come uno scrub, ma guarisce la compressione.

Una domanda correlata: esiste un modo per vedere l'utilizzo di ciascun tipo di algoritmo di compressione? zdb mostra solo le statistiche di compressione complessive, piuttosto che scomporle in singoli algoritmi.


2
Sono abbastanza sicuro che hai nominato le uniche due opzioni. Vedi anche la discussione nel numero 3013 sul perché questa funzionalità non esiste e potresti non volerlo fare affatto.
Michael Hampton

2
lz4 è presumibilmente al 10% migliore in compressione rispetto a lzjb. Se il 20% dei tuoi dati può essere compresso meglio del 10% otterrai al massimo il 2% di spazio libero in più. Ne vale la pena?
pipe

1
Se si scrive uno script shell per eseguire la copia, aggiungere export LC_ALL=Call'inizio dello script e tutti i caratteri speciali non ASCII nei nomi dei file verranno mantenuti intatti. Mantenere intatti gli spazi bianchi e il trattino è più complicato, usare virgolette doppie e --, ad es cp -- "$SOURCE" "$TARGET".
punti

4
@pipe Space è un (molto) piccolo vantaggio, ma sono più interessato alla velocità di decompressione. Dalla manpage di FreeBSD zpool-features: "In genere, la compressione lz4 è circa il 50% più veloce sui dati comprimibili e il 200% più veloce sui dati incomprimibili rispetto a lzjb. Inoltre è circa l'80% più veloce sulla decompressione, offrendo un rapporto di compressione circa il 10% migliore. "
Rowan194

@pts Non chiamerei obbedire alle regole fondamentali di programmazione della shell (virgolette doppie attorno alle variabili o usando --) "più complicato". È importante quanto evitare l'iniezione di SQL, per esempio.
glglgl,

Risposte:


14

Devi ricopiare i dati (completo o parziale) o zfs per inviare / ricevere i dati in un nuovo pool o file system ZFS.

Non ci sono altre opzioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.