それマグで!

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

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

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

tar cvzf xxx.tgz が遅い。

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

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

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

よく使われるtar

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

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

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

通常のtar ()

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デスクトップでやるには最速・最強の最終手段だと思います。

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

ポエム

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

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

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

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