web-dev-qa-db-ja.com

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

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

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

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

Bzip2のmanページから注意する必要がありますが:

-1(または--fast)から-9(または--best)
圧縮時にブロックサイズを100 k、200 k .. 900kに設定します。
解凍しても効果はありません。以下のメモリ管理を参照してください。
-fastおよび--bestエイリアスは、主にGNU gzip compat-
の可能性のためのものです。特に、-fastはありません。 t物事を大幅に高速化-
大幅に高速化し、-bestは単にデフォルトの動作を選択するだけです。
9
Brian Campbell
tar -cjf dir.tar.bz2 --options bzip2:compression-level=9 path/to/dir/
4
steveayre

_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_)オプションが必要なようです。

tarを使用する場合の_bzip2_ブロックサイズの設定

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

UNlXの方法

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

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

これは、「tarで.tarを作成-> _bzip2_でbzip-> _[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_は、低速圧縮アルゴリズムを使用します。速度が気になる場合は、gziplzopで使用されるアルゴリズムなど、別のアルゴリズムを調査できます。これが圧縮ツールを比較する素晴らしい記事です: https://aliver.wordpress.com/2010/06/22/huge-unix-file-compresser-shootout-with-tons-of-datagraphs/

2
aude

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

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

さらに簡単です:

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