GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum eliminiert die Gzip-Komprimierung keine doppelten Datenblöcke?

Nicole Hamilton bemerkt richtig, dass gzip findet aufgrund seiner geringen Wörterbuchgröße keine entfernten doppelten Daten.

bzip2 ist ähnlich, da es auf 900 KB Speicher begrenzt ist.

Versuchen Sie stattdessen:

LZMA/LZMA2-Algorithmus (xz , 7z )

Der LZMA-Algorithmus gehört zur gleichen Familie wie Deflate, verwendet aber eine viel größere Wörterbuchgröße (anpassbar; Standard ist etwa 384 MB). Die xz Dienstprogramm, das standardmäßig auf den neuesten Linux-Distributionen installiert werden sollte, ähnelt gzip und verwendet LZMA.

Da LZMA Redundanzen mit größerer Reichweite erkennt, kann es Ihre Daten hier deduplizieren. Allerdings ist es langsamer als Gzip.

Eine weitere Option ist 7-zip (7z , im p7zip Paket), bei dem es sich um einen Archivierer (und nicht um einen Single-Stream-Kompressor) handelt, der standardmäßig LZMA verwendet (geschrieben vom Autor von LZMA). Der 7-Zip-Archiver führt seine eigene Deduplizierung auf Dateiebene aus (unter Berücksichtigung von Dateien mit der gleichen Erweiterung), wenn er auf seinem .7z archiviert Format. Das bedeutet, wenn Sie bereit sind, tar zu ersetzen mit 7z , erhalten Sie identische Dateien dedupliziert. 7z behält jedoch keine Nanosekunden-Zeitstempel, Berechtigungen oder xattrs bei, sodass es möglicherweise nicht Ihren Anforderungen entspricht.

lrzip

lrzip ist ein Kompressor, der die Daten vorverarbeitet, um Redundanzen über große Entfernungen zu entfernen, bevor er sie einem herkömmlichen Algorithmus wie Gzip/Deflate, bzip2, lzop oder LZMA zuführt. Für die Beispieldaten, die Sie hier angeben, ist dies nicht erforderlich; Es ist nützlich, wenn die Eingabedaten größer sind als das, was in den Speicher passt.

Für diese Art von Daten (duplizierte, nicht komprimierbare Blöcke) sollten Sie lzop verwenden Kompression (sehr schnell) mit lrzip , da es keinen Vorteil bringt, sich stärker zu bemühen, vollständig zufällige Daten zu komprimieren, nachdem sie dedupliziert wurden.

Bup und Obnam

Da Sie die Frage Backup markiert haben, sollten Sie, wenn Ihr Ziel hier das Sichern von Daten ist, die Verwendung eines Deduplizierungs-Backup-Programms wie Bup oder Obnam in Betracht ziehen.


Gzip gzip basiert auf dem DEFLATE-Algorithmus, der eine Kombination aus LZ77- und Huffman-Codierung ist. Es handelt sich um einen verlustfreien Datenkomprimierungsalgorithmus, der den Eingabestrom in komprimierte Symbole umwandelt, indem er ein Wörterbuch verwendet, das on-the-fly erstellt wird, und nach Duplikaten sucht. Aber es kann keine Duplikate finden, die durch mehr als 32 KB getrennt sind. Zu erwarten, dass Duplikate im Abstand von 1 MB erkannt werden, ist nicht realistisch.


gzip findet keine Duplikate, nicht einmal xz mit einer riesigen Wörterbuchgröße nicht. Was Sie tun können, ist mksquashfs zu verwenden - dies wird in der Tat Platz für Duplikate sparen.

Einige schnelle Testergebnisse mit xz und mksquashfs mit drei zufälligen Binärdateien (64 MB), von denen zwei gleich sind:

Einrichtung:

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. Dateien komprimieren, während Daten von STDIN gelesen werden

  2. Warum funktioniert Bash `(())` nicht innerhalb von `[[]]`?

  3. Warum funktioniert hostname --fqdn nicht auf meinem Ubuntu-Computer?

  4. Warum funktioniert mein symbolischer Link nicht?

  5. Warum können Sie CD-Audio nicht einfach wie eine gewöhnliche Daten-CD hinzufügen?

zstd – Open-Source-Datenkomprimierungsalgorithmus in Linux

So aktivieren Sie die GZIP-Komprimierung in Nginx

So aktivieren Sie die Gzip-Komprimierung auf Nginx

Die 15 besten Komprimierungs- oder Archivmanager für Linux-Systeme

Warum funktioniert `\d` nicht in regulären Ausdrücken in sed?

Warum Linux Bridge nicht funktioniert