web-dev-qa-db-ja.com

デフォルトで並列bzip2とgzipを使用する最良の方法は何ですか?

Bzip2とgzipは1つのコアのみを使用しますが、多くのコンピューターには複数のコアがあります。ただし、lbzip2、pbzip2、pigsなどのプログラムがあり、利用可能なすべてのコアを使用し、bzip2およびgzipとの互換性が保証されています。

tar cfa file.tar.bz2 directoryがbzip2ではなくlbzip2/pbzip2を使用するように、これらのプログラムをデフォルトで使用する最良の方法は何ですか?もちろん、私は何も壊したくありません。

40
elmicha

Bzip2、bunzip2、bzcatをlbzip2に、gzip、gunzip、gzcat、zcatをpigzにシンボリックリンクできます。

Sudo apt-get install lbzip2 pigz
cd /usr/local/bin
ln -s /usr/bin/lbzip2 bzip2
ln -s /usr/bin/lbzip2 bunzip2
ln -s /usr/bin/lbzip2 bzcat
ln -s /usr/bin/pigz gzip
ln -s /usr/bin/pigz gunzip
ln -s /usr/bin/pigz gzcat
ln -s /usr/bin/pigz zcat

/usr/share/doc/lbzip2/README.gzは/usr/share/doc/pbzip2/README.gzよりも「見栄えが良い」ので、pbzip2ではなくlbzip2を選択しました。また、tarマニュアル lbzip2について話す

編集:

precise Pangolinに含まれているpigz-2.1.6は、不明なサフィックス(たとえば、initramfs-*。img)を持つファイルの解凍を拒否します。これは、Quantalに同梱されているpigz-2.2.4で修正されています。そのため、Quantalまで待つか、 Quantalパッケージ を手動でインストールするか、gunzip/gzcat/zcatをまだリンクしないでください。

31
elmicha

シンボリックリンクのアイデアは本当に素晴らしいです。
別の有効な解決策は、エイリアスtar

alias tar='tar --use-compress-program=pbzip2'

またはそれぞれ

alias tar='tar --use-compress-program=pigz'

別の種類のデフォルトが作成されます。

31
Bastian Ebeling

シンボリックリンクの答えは本当に間違っています。システム全体のデフォルトのgzip(またはbzip2)をpigz(またはpbzip2)に置き換えます。並列実装は単一プロセスバージョンと非常に似ていますが、コマンドラインオプションの微妙な違いは、それらの違いに依存するコアシステムプロセスを破壊する可能性があります。

「--use-compress-program」オプションの方がはるかに良い選択です。 2番目のオプション(エイリアスによく似ています)は、GNU tarでサポートされるTAR_OPTIONS環境変数を設定することです。

 $ export TAR_OPTIONS = "-use-compress-program = pbzip2" 
 $ tar czf myfile.tar.bz2 mysubdir /
13
user154053

魅力的なオプションの1つは、デフォルトでマルチスレッドを使用するようにtarを再コンパイルすることです。 このstackoverflowの答え からコピー

置換による再コンパイル

ソースからtarをビルドする場合は、パラメーターを使用して再コンパイルできます

--with-gzip=pigz
--with-bzip2=lbzip2
--with-lzip=plzip

これらのオプションを使用してtarを再コンパイルした後、tarのヘルプの出力を確認できます。

$ tar --help | grep "lbzip2\|plzip\|pigz"
  -j, --bzip2                filter the archive through lbzip2
      --lzip                 filter the archive through plzip
  -z, --gzip, --gunzip, --ungzip   filter the archive through pigz
3
Tom Koch