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