GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi la compression Gzip n'élimine-t-elle pas les blocs de données en double ?

Nicole Hamilton note correctement que gzip ne trouvera pas de données en double distantes en raison de la petite taille de son dictionnaire.

bzip2 est similaire, car il est limité à 900 Ko de mémoire.

À la place, essayez :

Algorithme LZMA/LZMA2 (xz , 7z )

L'algorithme LZMA appartient à la même famille que Deflate, mais utilise une taille de dictionnaire beaucoup plus grande (personnalisable ; la valeur par défaut est de l'ordre de 384 Mo). Le xz L'utilitaire, qui devrait être installé par défaut sur les distributions Linux les plus récentes, est similaire à gzip et utilise LZMA.

Comme LZMA détecte une redondance à plus longue portée, il pourra dédupliquer vos données ici. Cependant, il est plus lent que Gzip.

Une autre option est 7-zip (7z , dans le p7zip package), qui est un archiveur (plutôt qu'un compresseur à flux unique) qui utilise LZMA par défaut (écrit par l'auteur de LZMA). L'archiveur 7-zip exécute sa propre déduplication au niveau du fichier (en regardant les fichiers avec la même extension) lors de l'archivage dans son .7z format. Cela signifie que si vous souhaitez remplacer tar avec 7z , vous obtenez des fichiers identiques dédupliqués. Cependant, 7z ne conserve pas les horodatages, les autorisations ou les xattrs à la nanoseconde, il peut donc ne pas répondre à vos besoins.

lrzip

lrzip est un compresseur qui prétraite les données pour supprimer la redondance longue distance avant de les transmettre à un algorithme conventionnel tel que Gzip/Deflate, bzip2, lzop ou LZMA. Pour les exemples de données que vous donnez ici, ce n'est pas nécessaire ; c'est utile lorsque les données d'entrée sont plus grandes que ce qui peut tenir en mémoire.

Pour ce type de données (morceaux incompressibles dupliqués), vous devez utiliser lzop compression (très rapide) avec lrzip , car il n'y a aucun avantage à s'efforcer davantage de compresser des données complètement aléatoires une fois qu'elles ont été dédupliquées.

Bup et Obnam

Puisque vous avez marqué la question de sauvegarde, si votre objectif ici est de sauvegarder des données, envisagez d'utiliser un programme de sauvegarde de déduplication comme Bup ou Obnam.


Gzip gzip est basé sur l'algorithme DEFLATE, qui est une combinaison du codage LZ77 et Huffman. Il s'agit d'un algorithme de compression de données sans perte qui fonctionne en transformant le flux d'entrée en symboles compressés à l'aide d'un dictionnaire construit à la volée et en surveillant les doublons. Mais il ne peut pas trouver de doublons séparés par plus de 32K. Il n'est pas réaliste de s'attendre à ce qu'il détecte les doublons distants de 1 Mo.


gzip ne trouvera pas de doublons, même xz avec une taille de dictionnaire énorme ne le sera pas. Ce que vous pouvez faire est d'utiliser mksquashfs - cela permettra en effet d'économiser l'espace des doublons.

Quelques résultats de tests rapides avec xz et mksquashfs avec trois fichiers binaires aléatoires (64 Mo) dont deux identiques :

Configuration :

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 ..

Squashfs :

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. Compresser les fichiers lors de la lecture des données de STDIN

  2. Pourquoi xargs -L produit-il le bon format, alors que xargs -n ne le fait pas ?

  3. Pourquoi Bash `(())` ne fonctionne-t-il pas dans `[[]]` ?

  4. Pourquoi hostname --fqdn ne fonctionne-t-il pas sur mon ordinateur Ubuntu ?

  5. Pourquoi mon lien symbolique ne fonctionne-t-il pas ?

Redis comme cache :comment ça marche et pourquoi l'utiliser

Pourquoi les données sont importantes et comment les protéger

zstd - Algorithme de compression de données open source sous Linux

Comment activer la compression GZIP dans Nginx

Comment activer la compression Gzip sur Nginx

15 meilleurs gestionnaires de compression ou d'archivage pour le système Linux