tar cvzf xxx.tgz が遅い。
ボトルネックが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マルチスレッドを使い切って時間効率を追い求めてもいいのではないでしょうか。