Bagaimana Anda mengatur ukuran blok bzip2 saat menggunakan tar?


9

Saya menggunakan taruntuk membuat cadangan server linux ke tape. Saya menggunakan -jopsi untuk mengompres file bzip2, namun saya tidak bisa melihat cara untuk menyesuaikan opsi ukuran blok untuk bzip2 dari tar. Ukuran blok default adalah 900.000 byte yang memberikan kompresi terbaik tetapi paling lambat. Saya tidak terlalu peduli dengan rasio kompresi, jadi saya ingin membuat bzip2 berjalan lebih cepat dengan ukuran blok yang lebih kecil.


1
Sidenote: Akhir-akhir ini saya sudah menyerah pada bzip2. Saya menggunakan lzma (dari paket lzma, lzma-utils, atau lzma-sdk, nama tergantung pada distribusi Anda.) Biasanya kompres yang sama atau lebih baik dari bzip2 diberikan waktu CPU yang sama - dan ketika datang ke dekompresi itu hanya meniup bzip2 jauh.
Mihai Limbăşan

Jawaban:


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

Atau pipa output tarke bzip2.

Meskipun Anda harus mencatat dari halaman manual bzip2:

    -1 (atau --fast) hingga -9 (atau --best)
              Atur ukuran blok menjadi 100 k, 200 k .. 900 k saat mengompresi.
              Tidak berpengaruh saat dekompresi. Lihat MANAJEMEN MEMORY di bawah ini.
              Alias ​​--fast dan --best terutama untuk perbandingan GNU gzip
              ibility. Secara khusus, --fast tidak membuat hal-hal signifikan
              lebih cepat. Dan --best hanya memilih perilaku default.

bagaimana alternatif Anda dapat menggunakan ekspor BZIP = -9
Pol Hallen

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

Pada sistem saya (OSX El Capitan bsdtar 2.8.3) ini tidak ada pada halaman manual (walaupun gzip: level-kompresi dan xz: level-kompresi terdaftar), tetapi mengujinya, opsi ini tidak berfungsi.
steveayre

tar: unrecognized option '--options'
ZN13

2

bzip2 ukuran blok

bzip2memiliki beberapa opsi ukuran blok. Dari halaman manual 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.

Karena Anda ingin kompresi yang lebih cepat dengan kurang memperhatikan rasio kompresi, menggunakan bzip2, Anda sepertinya menginginkan opsi -1(atau --fast).

Mengatur bzip2ukuran blok saat menggunakantar

Anda dapat mengatur bzip2ukuran blok saat menggunakan tardalam beberapa cara.

Cara UNlX

Cara favorit saya, cara UNX, adalah cara di mana Anda menggunakan setiap alat secara mandiri, dan menggabungkannya melalui pipa.

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

Anda dapat membacanya sebagai "buat .tar dengan tar-> bzip dengan bzip2-> tulis ke [ARCHIVE].tar.bz2".

Variabel lingkungan

Dimungkinkan juga untuk mengatur bzip2opsi melalui variabel lingkungan BZIP2. Dari halaman manual 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.

Jadi untuk menggunakannya tar, Anda bisa misalnya melakukan:

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

Alternatif lebih cepat

bzip2menggunakan algoritma kompresi yang lambat. Jika Anda khawatir tentang kecepatan, Anda dapat menyelidiki algoritma alternatif, seperti yang digunakan oleh gzipatau lzop. Berikut ini adalah artikel yang bagus yang membandingkan alat kompresi: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/


Sepertinya Anda mungkin memiliki pengetahuan untuk memberikan Jawaban yang baik di sini, tetapi harap pertimbangkan membaca Bagaimana cara saya menulis Jawaban yang baik? di pusat bantuan kami dan kemudian merevisi Jawabannya. Perintah / Kode / Pengaturan Anda mungkin secara teknis menjadi solusi tetapi beberapa penjelasan diterima. Terima kasih sebelumnya.
HBruijn

1

Kirim taroutput ke stdoutdan kemudian pipa melalui bzip2secara terpisah:

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

0

Ini bahkan lebih mudah:

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

3
Menggunakan file sementara berarti Anda membutuhkan ruang hard disk yang cukup, ditambah bandwidth untuk tar untuk menulis dan bzip2 untuk membacanya. Ini mungkin tampak sepele untuk sejumlah kecil data, tetapi ketika direktori tersebut memiliki beberapa ratus gigabytes, itu mungkin menjadi masalah nyata.
Ansgar Esztermann

Ya terima kasih. Saya tahu mempelajari alasan yang lebih dalam mengapa tarharus -zdan -j. Opsi-opsi ini terasa nyaman bagi saya. Tapi mereka bisa menyelamatkan hari.
Andreas Spindler
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.