Schnelle Komprimierung im 7z-Format (wie zip oder gzip)

1

Kurz gesagt: Kann die Deflate-Komprimierung nur im ZIP-Format verwendet werden ( -tzip ) in 7zip?


Ich möchte ein großes Verzeichnis (Hunderte GiB) von einer Festplatte auf eine andere archivieren, wobei die E / A-Geschwindigkeit gleich oder besser als ohne Komprimierung ist.

Ich mag das 7z-Format aus verschiedenen Gründen, aber LZMA- und Bzip2-Komprimierungen sind sogar zu langsam -mx=1. ich habe es versucht 7z a -mm=Zip -mx=1 -mmt=4 (und -mm=GZip die auch Deflate verwendet), aber ich erhalte nach der Datei-Scan-Phase einen Argumentfehler. http://7zip.bugaco.com/7zip/MANUAL/switches/method.htm

Meine typische Lösung wäre Teer mit .tar.lzo (LZOP), das bei standardmäßiger Komprimierungsrate problemlos 100 MiB / s Single-Thread erreicht; oder .tar.gz mit GZIP=-1. Ein sehr schneller Kompressor ist lbzip2 mit Multithreading, er kann jedoch nicht von Teer selbst ausgeführt werden.

Meine Quelldatenträger lesen normalerweise mit 20 MiB / s, manchmal 100 (mit Dateien, die mehrere MiB groß sind). Das Ziel schreibt bis zu 80 MiB / s. Dies ist also die Geschwindigkeit, die der Kompressor haben sollte, im Idealfall auch bei Single-Threading. Es stehen bis zu 8 Kerne und 16 GB RAM zur Verfügung.

Nemo
quelle

Antworten:

4

Sie könnten es versuchen 7-Zip Zstandard Ausführung. Diese Gabel unterstützt zusätzliche Codecs, die für die Komprimierung und Dekomprimierung sehr schnell sind.

Hier ist eine kurze Zusammenfassung der verwendeten Codecs:

  1. LZ4 - schnellste Komprimierung / Dekompression, jedoch nicht viel Kompressionsverhältnis

  2. Lizard / LZ5 - besseres Verhältnis als LZ4 und bei Dekompression oft schneller als LZ4 ... aber die Kompression ist etwas langsamer

  3. Brotli und Zstandard - zstd ist oft etwas schneller als Brotli, aber für Textinhalte ist Brotli vielleicht etwas besser;)

Threading wird von allen 5 Codecs unterstützt, derzeit bis zu 256 Threads.

Führen Sie es wie folgt aus:

7z a archiv.7z -m0=lz5 -mx1 -mmt=4

7z a archiv.7z -m0=zstd -mx1 -mmt=4

7z a archiv.7z -m0=brotli -mx1 -mmt=1 .. 7z a archiv.7z -m0=brotli -mx1 -mmt=256

Und so weiter...

Tino Reichardt
quelle
2

Ein sehr schneller Kompressor ist lbzip2 mit Multithreading, er kann jedoch nicht von Teer selbst ausgeführt werden.

In gnu tar können Sie angeben, welcher Kompressor mit einem Flag gekennzeichnet ist. Beispiele: tar -I "zstd -T0" oder tar --use-compress-program=pigz

Wenn Sie einen schnellen Single-Threaded-Kompressor benötigen, können Sie lz4 verwenden.

Sie müssen dies jedoch nicht verwenden, Sie können die Ausgabe auch durch einen Kompressor Ihrer Wahl leiten.

# create
tar -c /inputdir | pigz --fast > output.tar.gz
# decompress
pigz -d input.tar.gz | tar -x 

Meine Quelldatenträger lesen normalerweise mit 20 MiB / s, manchmal mit 100

Das klingt so, als wären Sie beim Lesen mit wahlfreiem Zugriff tatsächlich Engpässe und nicht bei der Komprimierung. Wenn Sie große Dateien haben, sollten Sie sie defragmentieren. Wenn Sie viele kleine Dateien haben, sollten Sie sicherstellen, dass der Datenträger mit geladen ist relatime und du könntest es auch versuchen fastar das habe ich für den Fall vieler kleiner Dateien optimiert.

the8472
quelle
Nein, mein Engpass ist normalerweise nicht I / O (außer bei lzop, was viel schneller ist als I / O). Wenn ich "20, manchmal 100" sage, meine ich, dass einige Festplatten konstant nur 20 lesen, während einige andere, die ich habe, schneller sind. Derzeit leite ich zu lbzip2 oder lzop, wenn I / O für lbzip2 zu schnell ist. Vielen Dank, dass Sie fastar erwähnt haben. Ich werde es mit einer Diskette versuchen.
Nemo
Da Ihre READMEs ext4 erwähnen, hätte ich vielleicht sagen sollen, dass meine Festplatten meistens externe NTFS-Festplatten sind
Nemo