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

1584
Nemo

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


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 selbst mit zu langsam -mx=1. Ich habe es versucht 7z a -mm=Zip -mx=1 -mmt=4(und -mm=GZipwas auch Deflate verwendet), aber nach der Datei-Scan-Phase bekomme ich einen Argumentfehler. http://7zip.bugaco.com/7zip/MANUAL/switches/method.htm

Meine typische Lösung wäre tar mit .tar.lzo(LZOP), das bei standardmäßiger Komprimierungsrate problemlos 100 MiB / s Single-Threading erreicht; oder .tar.gzmit 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.

1

2 Antworten auf die Frage

4
Tino Reichardt

Sie können die 7-Zip Z-Standardversion ausprobieren . 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 Komprimierung 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...

2
the8472

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"odertar --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 Kompression. Wenn Sie große Dateien haben, sollten Sie sie defragmentieren. Wenn Sie viele kleine Dateien haben, sollten Sie sicherstellen, dass die Festplatte mit angehängt ist. relatimeSie können auch fastar versuchen, das ich für viele kleine Dateien optimiert habe.

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 vor 6 Jahren 0
Da Ihre READMEs ext4 erwähnen, hätte ich vielleicht sagen sollen, dass meine Festplatten meistens externe NTFS-Festplatten sind ... Nemo vor 6 Jahren 0