Come si imposta la dimensione del blocco bzip2 quando si utilizza tar?


9

Sto usando tarper il backup di un server Linux su nastro. Sto usando l' -jopzione per comprimere il file bzip2, tuttavia non riesco a vedere un modo per regolare le opzioni di dimensione del blocco per bzip2 da tar. La dimensione del blocco predefinita è 900.000 byte, che offre la migliore compressione ma è la più lenta. Non mi preoccupo molto del rapporto di compressione, quindi sto cercando di far funzionare bzip2 più velocemente con blocchi di dimensioni inferiori.


1
Sidenote: Ultimamente ho quasi rinunciato a bzip2. Uso lzma (dal pacchetto lzma, lzma-utils o lzma-sdk, il nome dipende dalla tua distribuzione.) Di solito comprime lo stesso o meglio di bzip2 dato lo stesso tempo di CPU - e quando si tratta di decompressione fa semplicemente saltare bzip2 lontano.
Mihai Limbăşan,

Risposte:


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

O convoglia l'output di tara bzip2.

Tuttavia, dovresti notare dalla pagina man di bzip2:

    Da -1 (o --fast) a -9 (o --best)
              Impostare la dimensione del blocco su 100 k, 200 k .. 900 k durante la compressione.
              Non ha alcun effetto durante la decompressione. Vedi GESTIONE DELLA MEMORIA di seguito.
              Gli alias --fast e --best sono principalmente per GNU gzip compat-
              bilità. In particolare, --fast non rende le cose significative
              decisamente più veloce. E --best seleziona semplicemente il comportamento predefinito.

come alternativa puoi usare export BZIP = -9
Pol Hallen,

4
tar -cjf dir.tar.bz2 --options bzip2:compression-level=9 path/to/dir/

Sul mio sistema (OSX El Capitan bsdtar 2.8.3) questo manca nella pagina man (sebbene siano elencati gzip: livello di compressione e xz: livello di compressione), ma testandolo l'opzione funziona.
Steveayre

tar: unrecognized option '--options'
ZN13,

2

bzip2 dimensioni del blocco

bzip2ha alcune opzioni per la dimensione del blocco. Dalla pagina del manuale 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.

Poiché desideri una compressione più rapida con meno rispetto al rapporto di compressione, utilizzando bzip2, sembra che tu voglia l' opzione -1(o --fast).

Impostazione della bzip2dimensione del blocco durante l'utilizzotar

È possibile impostare la bzip2dimensione del blocco quando si utilizza tarin un paio di modi.

Il modo UNlX

Il mio modo preferito, il modo UNlX, è quello in cui usi tutti gli strumenti in modo indipendente e li combini attraverso i tubi.

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

Puoi leggerlo come "crea .tar con tar-> decomprimilo con bzip2-> scrivilo su [ARCHIVE].tar.bz2".

Variabile d'ambiente

È anche possibile impostare bzip2opzioni tramite la variabile di ambiente BZIP2. Dalla pagina del manuale 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.

Quindi, per usarlo con tar, potresti ad esempio fare:

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

Alternative più veloci

bzip2utilizza un algoritmo di compressione lenta. Se sei preoccupato per la velocità, potresti studiare algoritmi alternativi, come quelli usati da gzipo lzop. Ecco un bell'articolo che confronta gli strumenti di compressione: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/


Sembra che tu possa avere le conoscenze per fornire una buona risposta qui, ma per favore considera di leggere Come posso scrivere una buona risposta? nel nostro centro assistenza e quindi rivedi la risposta. I tuoi comandi / codice / impostazioni potrebbero essere tecnicamente la soluzione, ma alcune spiegazioni sono benvenute. Grazie in anticipo.
HBruijn,

1

Invia l' taroutput a stdoute quindi esegui il pipe bzip2separatamente:

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

0

È ancora più semplice:

% tar -cvf dir.tar path/to/dir/ && bzip2 -9 dir.tar

3
L'uso di un file temporaneo significa che è necessario spazio su disco rigido sufficiente, più larghezza di banda per tar per scrivere e bzip2 per leggerlo. Questo può sembrare banale per piccole quantità di dati, ma quando la directory in questione ha diverse centinaia di gigabyte, può diventare un vero problema.
Ansgar Esztermann,

Sì grazie. So imparato la ragione più profonda per cui tarha -ze -j. Queste opzioni mi sono sembrate piuttosto convenienti. Ma possono salvare la giornata.
Andreas Spindler,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.