それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

tar cvzf xxx.tgz が遅いのでpigz で圧縮を高速化する

tar cvzf xxx.tgz が遅い。

SSDに変えたら、gzipボトルネックになる。

ボトルネックgzipであれば、gzip を変えればいい。pigzというちょうどいいコマンドがある。

tar コマンドとパイプを見直して、gzip の箇所をpigzに置き換えていきたい。

2通りの方法

選択肢は2つある。

  • パイプを使う場合
  • パイプを使わない場合 (tar オプションで解決する)

最初はパイプを見ていく。よく使われるtar とパイプの組み合わせ tar xxx | commpression

次に、tar オプションで、 --use-compress-program="pigz -9" を使ってパイプを使わない方法を見ておく。

よく使われるtar

最初にtar のコマンドを確認しておく

むかしから使われるtar コマンドは、次のとおりだと思う。

私が初心者の頃からよく見かけたtarコマンドが次の通り。

通常のtar (gzip コマンド)

mnt フォルダをファイルに保存。

tar cvzf out.tar.gz ./mnt

パイプつきの通常のtar

tar cvzf - ./mnt | cat - > out.tar.gz

圧縮有・無圧縮

tar cvzf out.tar.gz ./mnt
tar cvf out.tar ./mnt

パイプで圧縮

tar cvf - ./mnt | gzip - | cat - > out.tar.gz

pigz で圧縮を高速に

pigz がマルチプロセスで動作するので少し早い。gzipをpigzに変えてあげればいい

tar cvf - ./mnt | pigz - | cat - > out.tar.gz

verboseも外す

verboseすると、ファイル一覧が出力されて描画と一覧の転送である。SSH経由でSSHが遅いと、ファイル出力が終わっているのに表示終了を待って次のコマンドに移れない。

tar cf - ./mnt | pigz - | cat - > out.tar.gz

代わりにpv しておけば、残り容量がわかる。

# フォルダ使用量を確認
du -cksh ./mnt 
# pv しながら状況を見ておく
tar cf - ./mnt| pv | pigz - | cat - > out.tar.gz

最終手段

面倒を考えるのが辛くなったら、 /usr/bin/gzip 自体を書き換えてしまえばいい。

mv /usr/bin/gzip /usr/bin/gzip.orig
ln -s /usr/bin/pigz /usr/bin/gzip

これは、最終手段です。普段遣いLinuxデスクトップでやるには最速・最強の最終手段だと思います。

設定を忘れてパニックにならないように。自分だけの環境に留めておけば最速で単純で良いと思います。

最終手段もパイプも使わないで済むオプション

例えば次のようにすることで、パイプを使わずに済む

sudo tar -cvf  out.tar.gz \
  --use-compress-program="pigz -9"  
  --one-file-system \
  /var/www/html

--use-compress-program="pigz -9" で pigz を指定する。

--one-file-system はマウントを無視する

2024-08-27

use-compress-program のオプションについて言及。

ポエム

世の中すべてがpigz になればいいのに。。。

圧縮処理は「効率」を考えて使いますが、「効率」とはなんですか。

「効率」とは「ディスク消費量」のことだけではなく、「作業時間効率」でもあり、「CPU使用率」のこともあると思います。無人で圧縮するのならともかく、ディスクのバックアップなどダウンタイムを極力少なくしたいときには、「時間効率」もまた重要な要因だと思います。

人間の時間がいちばん高コストであり、一番貴重なのです。ある程度の圧縮率でCPUマルチスレッドを使い切って時間効率を追い求めてもいいのではないでしょうか。

use-compress-program は bzipが登場したあたり、2007年以降にサポートされて、2010 年頃にはすべてのディストリビューションGNU tarコマンドで使えるようになったと思う。しかし、パイプで解決するのとgzipで事足りるのと、書籍やサンプルなどで紹介されてなかったりする。なのでgzipをpigzを書き換えてしまうのもありだと思う次第です。