GNU/Linux >> Linux Esercitazione >  >> Linux

Perché la compressione Gzip non elimina blocchi duplicati di dati?

Nicole Hamilton nota correttamente che gzip non troverà dati duplicati distanti a causa delle ridotte dimensioni del dizionario.

bzip2 è simile, perché è limitato a 900 KB di memoria.

Invece, prova:

Algoritmo LZMA/LZMA2 (xz , 7z )

L'algoritmo LZMA appartiene alla stessa famiglia di Deflate, ma utilizza una dimensione del dizionario molto più grande (personalizzabile; l'impostazione predefinita è qualcosa come 384 MB). Il xz utility, che dovrebbe essere installata per impostazione predefinita sulle distribuzioni Linux più recenti, è simile a gzip e utilizza LZMA.

Poiché LZMA rileva la ridondanza a lungo raggio, sarà in grado di deduplicare i tuoi dati qui. Tuttavia, è più lento di Gzip.

Un'altra opzione è 7-zip (7z , nel p7zip pacchetto), che è un archiviatore (piuttosto che un compressore a flusso singolo) che utilizza LZMA per impostazione predefinita (scritto dall'autore di LZMA). L'archiviatore a 7 zip esegue la propria deduplicazione a livello di file (esaminando i file con la stessa estensione) durante l'archiviazione nel suo .7z formato. Ciò significa che se sei disposto a sostituire tar con 7z , ottieni file identici deduplicati. Tuttavia, 7z non conserva timestamp, autorizzazioni o xattr in nanosecondi, quindi potrebbe non soddisfare le tue esigenze.

lrzip

lrzip è un compressore che preelabora i dati per rimuovere la ridondanza a lunga distanza prima di inviarli a un algoritmo convenzionale come Gzip/Deflate, bzip2, lzop o LZMA. Per i dati di esempio che fornisci qui, non è necessario; è utile quando i dati di input sono più grandi di quelli che possono stare in memoria.

Per questo tipo di dati (pezzi incomprimibili duplicati), dovresti usare lzop compressione (molto veloce) con lrzip , perché non c'è alcun vantaggio nel sforzarsi di comprimere dati completamente casuali una volta che sono stati deduplicati.

Bup e Obnam

Dato che hai taggato la domanda backup, se il tuo obiettivo qui è il backup dei dati, prendi in considerazione l'utilizzo di un programma di backup di deduplicazione come Bup o Obnam.


Gzip gzip si basa sull'algoritmo DEFLATE, che è una combinazione di codifica LZ77 e Huffman. È un algoritmo di compressione dei dati senza perdita che funziona trasformando il flusso di input in simboli compressi utilizzando un dizionario creato al volo e controllando i duplicati. Ma non riesce a trovare duplicati separati da più di 32K. Aspettarsi che rilevi i duplicati a distanza di 1 MB non è realistico.


gzip non troverà duplicati, nemmeno xz con un'enorme dimensione del dizionario non lo farà. Quello che puoi fare è usare mksquashfs - questo salverà davvero lo spazio dei duplicati.

Alcuni rapidi risultati del test con xz e mksquashfs con tre file binari casuali (64MB) di cui due uguali:

Configurazione:

mkdir test
cd test
dd if=/dev/urandom of=test1.bin count=64k bs=1k
dd if=/dev/urandom of=test2.bin count=64k bs=1k
cp test{2,3}.bin
cd ..

Squash:

mksquashfs test/ test.squash
> test.squash - 129M

xz:

XZ_OPT='-v --memlimit-compress=6G --memlimit-decompress=512M --lzma2=preset=9e,dict=512M --extreme -T4 ' tar -cJvf test.tar.xz test/
> test.tar.xz - 193M

Linux
  1. Redis come cache:come funziona e perché usarlo

  2. Perché i dati sono importanti e come proteggerli

  3. Perché "\d" non funziona nelle espressioni regolari in sed?

  4. Perché non puoi semplicemente dd CD Audio come un normale CD di dati?

  5. mysql non si avvia dopo aver riposizionato la directory dei dati

zstd – Algoritmo di compressione dati open source in Linux

Come abilitare la compressione GZIP in Nginx

Come abilitare la compressione Gzip su Nginx

15 migliori gestori di compressione o archivio per il sistema Linux

Perché wget non verifica i certificati SSL?

Perché Swap viene utilizzato quando è rimasta molta memoria libera?