Wie stellen Sie die Blockgröße von bzip2 ein, wenn Sie tar verwenden?

9

Ich verwende, tarum einen Linux-Server auf Band zu sichern. Ich verwende die -jOption zum Komprimieren der Datei mit bzip2, sehe jedoch keine Möglichkeit, die Blockgrößenoptionen für bzip2 von tar aus anzupassen. Die Standardblockgröße beträgt 900.000 Byte, was die beste, aber die langsamste Komprimierung ergibt. Das Komprimierungsverhältnis stört mich nicht so sehr, daher möchte ich, dass bzip2 mit einer kleineren Blockgröße schneller ausgeführt wird.

Guy C.
quelle
1
Nebenbemerkung: In letzter Zeit habe ich bzip2 so gut wie aufgegeben. Ich verwende lzma (aus dem Paket lzma, lzma-utils oder lzma-sdk hängt der Name von Ihrer Distribution ab.) Es komprimiert normalerweise das gleiche oder besser als bzip2 bei gleicher CPU-Zeit - und wenn es um die Dekomprimierung geht, bläst es einfach bzip2 Weg.
Mihai Limbăşan

Antworten:

9
export BZIP=--fast
tar cjf foo.tar.bz2 foo

Oder leiten Sie die Ausgabe von taran bzip2.

Beachten Sie jedoch Folgendes auf der Manpage zu bzip2:

    -1 (oder - schnell) bis -9 (oder - am besten)
              Stellen Sie die Blockgröße beim Komprimieren auf 100 k, 200 k .. 900 k ein.
              Hat beim Dekomprimieren keine Auswirkung. Siehe MEMORY MANAGEMENT unten.
              Die Aliase --fast und --best sind hauptsächlich für GNU gzip kompatibel.
              Fähigkeit. Insbesondere --fast macht die Dinge nicht bedeutungsvoll
              deutlich schneller. Und --best wählt lediglich das Standardverhalten aus.
Brian Campbell
quelle
Wie alternativ können Sie Export verwenden? BZIP = -9
Pol Hallen
4
tar -cjf dir.tar.bz2 --options bzip2:compression-level=9 path/to/dir/
Steveayre
quelle
Auf meinem System (OSX El Capitan bsdtar 2.8.3) fehlt dies in der Manpage (obwohl gzip: Komprimierungsstufe und xz: Komprimierungsstufe aufgeführt sind), aber das Testen der Option funktioniert.
Steveayre
tar: unrecognized option '--options'
ZN13
2

bzip2 Blockgrößen

bzip2hat einige Blockgrößenoptionen. Von der Handbuchseite bzip2(1):

-1 (or --fast) to -9 (or --best)
       Set the block size to 100 k, 200 k ..  900 k when compressing.
       Has no effect when decompressing. See MEMORY MANAGEMENT below.
       The --fast and --best aliases are primarily for GNU gzip
       compatibility. In particular, --fast doesn't make things
       significantly faster. And --best merely selects the default
       behaviour.

Da Sie eine schnellere Komprimierung mit weniger Rücksicht auf das Komprimierungsverhältnis bzip2wünschen, möchten Sie anscheinend die Option -1(oder --fast).

Einstellen der bzip2Blockgröße bei Verwendungtar

Sie können die bzip2Blockgröße tarauf verschiedene Arten festlegen .

Der UNlX-Weg

Mein Lieblingsweg, der UNlX-Weg, ist einer, bei dem Sie jedes Werkzeug unabhängig verwenden und durch Rohre kombinieren.

$ tar --create [FILE...] | bzip2 -1 > [ARCHIVE].tar.bz2

Sie können dies als "create .tar with tar-> bzip it with bzip2-> write it to [ARCHIVE].tar.bz2" lesen .

Umgebungsvariable

Es ist auch möglich, bzip2Optionen über die Umgebungsvariable festzulegen BZIP2. Von der Handbuchseite bzip2(1):

bzip2 will read arguments from the environment variables BZIP2 and BZIP,
in that order, and will process them before any arguments read from the
command line. This gives a convenient way to supply default arguments.

Um dies zu verwenden, tarkönnten Sie zum Beispiel Folgendes tun:

$ BZIP2=-1 tar --create --bzip2 --file [ARCHIVE].tar.bz2 [FILE...]

Schnellere Alternativen

bzip2verwendet einen langsamen Komprimierungsalgorithmus. Wenn Sie sich Gedanken über die Geschwindigkeit machen, können Sie alternative Algorithmen untersuchen, wie sie beispielsweise von gzipoder verwendet werden lzop. Hier ist ein schöner Artikel zum Vergleichen von Komprimierungswerkzeugen: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/

aude
quelle
Es sieht so aus, als ob Sie das Wissen haben, hier eine gute Antwort zu geben, aber bitte lesen Sie. Wie schreibe ich eine gute Antwort? in unserer Hilfe und überarbeiten Sie dann die Antwort. Ihre Befehle / Codes / Einstellungen können technisch die Lösung sein, aber einige Erklärungen sind willkommen. Danke im Voraus.
HBruijn
1

Senden Sie die tarAusgabe an stdoutund leiten Sie sie dann bzip2separat durch :

% tar cvf - _file_ | bzip2 _opts_ > output.tar.bz2
Alnitak
quelle
0

Es ist noch einfacher:

% tar -cvf dir.tar path/to/dir/ && bzip2 -9 dir.tar
Andreas Spindler
quelle
3
Wenn Sie eine temporäre Datei verwenden, benötigen Sie genügend Festplattenspeicher sowie Bandbreite, damit tar schreiben und bzip2 lesen kann. Dies mag für kleine Datenmengen trivial erscheinen, aber wenn das betreffende Verzeichnis mehrere hundert Gigabyte hat, kann es zu einem echten Problem werden.
Ansgar Esztermann
Ja dank. Ich kenne den tieferen Grund , warum gelernt tarhat -zund -j. Diese Optionen schienen mir ziemlich bequem zu sein. Aber sie können den Tag retten.
Andreas Spindler