tarを使用する場合、bzip2ブロックサイズをどのように設定しますか?


9

tarLinuxサーバーをテープにバックアップするために使用しています。で-jファイルを圧縮するオプションを使用していますがbzip2、tarからbzip2のブロックサイズオプションを調整する方法がわかりません。デフォルトのブロックサイズは900,000バイトです。これにより、最高の圧縮率が得られますが、速度は最も遅くなります。私は圧縮率についてそれほど気にしていないので、小さいブロックサイズでbzip2をより高速に実行することを目指しています。


1
補足:最近私はbzip2をあきらめています。私はlzmaを使用します(lzma、lzma-utils、またはlzma-sdkパッケージから、名前はディストリビューションによって異なります)。通常、同じCPU時間でbzip2と同じかそれ以上に圧縮されます。離れて。
MihaiLimbăşan2009年

回答:


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

またはの出力をtarにパイプしますbzip2

ただし、bzip2のmanページから注意する必要があります。

    -1(または--fast)〜-9(または--best)
              圧縮時にブロックサイズを100 k、200 k .. 900 kに設定します。
              解凍時に効果はありません。下記のメモリ管理を参照してください。
              --fastおよび--bestエイリアスは、主にGNU gzip互換用です
              可能性。特に、-fastは意味をなさない-
              かなり速くなります。そして--bestは単にデフォルトの動作を選択します。

BZIP = -9のエクスポートを使用する代替方法
Pol Hallen

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

私のシステム(OSX El Capitan bsdtar 2.8.3)では、manページにはありません(gzip:compression-levelとxz:compression-levelがリストされています)が、それをテストするとオプションは機能します。
steveayre 2016

tar: unrecognized option '--options'
ZN13 2018

2

bzip2 ブロックサイズ

bzip2いくつかのブロックサイズオプションがあります。マニュアルページから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.

圧縮率を考慮せずに高速の圧縮が必要な場合は、を使用しbzip2-1(または--fast)オプションが必要なようです。

bzip2使用時のブロックサイズの設定tar

いくつかの方法でbzip2使用tarする場合、ブロックサイズを設定できます。

UNlXの方法

私のお気に入りの方法であるUNlXの方法は、すべてのツールを個別に使用し、パイプを介してそれらを組み合わせる方法です。

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

これは、「tar->で.tarを作成する->でbzipするbzip2->に書き込む」と読むことができます[ARCHIVE].tar.bz2

環境変数

bzip2環境変数を使用してオプションを設定することもできますBZIP2。マニュアルページから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.

したがって、それをで使用するにはtar、たとえば次のようにします。

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

より速い代替案

bzip2遅い圧縮アルゴリズムを使用します。速度が気になる場合は、gzipまたはで使用されるアルゴリズムなど、別のアルゴリズムを調査できますlzop。以下は、圧縮ツールを比較する素晴らしい記事です:https : //aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/


ここには良い答えを提供する知識があるようですが、良い答えを書くにはどうすればよいですかを読んでみてくださいヘルプセンターで回答を修正してください。あなたのコマンド/コード/設定は技術的には解決策かもしれませんが、いくつかの説明は歓迎されます。前もって感謝します。
HBruijn、

1

tar出力をに送信し、個別にstdoutパイプしますbzip2

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

0

さらに簡単です:

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

3
一時ファイルを使用することは、十分なハードディスク容量に加えて、tarが書き込み、bzip2が読み取るための帯域幅が必要であることを意味します。これは、少量のデータでは取るに足らないことのように思えるかもしれませんが、問題のディレクトリに数百ギガバイトがある場合、それは実際の問題になる可能性があります。
Ansgar Esztermann、2013年

はい、ありがとう。私はなぜ深い理由を学んだ知っtarている-zとします-j。これらのオプションは私にはかなり便利に思えました。しかし、彼らはその日を救うことができます。
Andreas Spindler 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.