「tarでバックアップ取る運用はやめろよ」という愚痴はおいといて、tarは速い方がいいですよね。
Environment
- CentOS Linux release 7.3.1611 (Core)
tarのzオプション
tarの zオプションは内部でgzipを呼んでいるだけだよね。
$ strace -f -e execve tar czf hoge.tgz ./apache-tomcat-9.0.14
execve("/bin/tar", ["tar", "czf", "hoge.tgz", "./apache-tomcat-9.0.14"], [/* 22 vars */]) = 0
Process 5717 attached
[pid 5717] execve("/usr/local/bin/gzip", ["gzip"], [/* 22 vars */]) = -1 ENOENT (No such file or directory)
[pid 5717] execve("/bin/gzip", ["gzip"], [/* 22 vars */]) = 0
[pid 5717] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=5717, si_status=0, si_utime=67, si_stime=2} ---
+++ exited with 0 +++
gzipの圧縮オプション
個人的な価値観では--best
より--fast
がいいです。
gzipのmanページによると、GZIP環境変数があるらしい。
This option can be set in the GZIP environment variable as in:
for sh: GZIP="-q" tar -xfz --block-compress /dev/rst0
for csh: (setenv GZIP -q; tar -xfz --block-compr /dev/rst0
tarにはgzipやbzip2の圧縮レベルオプションはないけど、この環境変数を使えばtarのzオプションで圧縮レベルを設定できるということですね。
$ time tar czf hoge1.tgz ./apache-tomcat-9.0.14
real 0m0.662s
user 0m0.647s
sys 0m0.043s
$ export GZIP=-1
$ time tar czf hoge2.tgz ./apache-tomcat-9.0.14
real 0m0.549s
user 0m0.536s
sys 0m0.031s
$ du -sh apache-tomcat-9.0.14 hoge1.tgz hoge2.tgz
16M apache-tomcat-9.0.14
10M hoge1.tgz
11M hoge2.tgz
アーカイブ作成時間は速くなっています。やりぃ。
圧縮率が少々ぬるいのはトレードオプなので仕方がないですね。
もっと速くしたい
もっと速くアーカイブを作りたいなら、gzipよりlzopですよね。
lzopのmanをみるとLZOPというオプションがあるようだ。
The environment variable LZOP can hold a set of default options for lzop. These options are interpreted first
and can be overwritten by explicit command line parameters. For example:
for sh/ksh/zsh: LZOP="-1v --name"; export LZOP
for csh/tcsh: setenv LZOP "-1v --name"
for DOS/Windows: set LZOP=-1v --name
CentOS7のtarのmanページはないけど、--use-compress-program
というオプションがあるようだ。
LZOP環境変数を設定して、lzopにてフィルタ圧縮をしてみる。
$ export LZOP="-1 --name"
$ time tar --use-compress-program=lzop -cf hoge-lzop.tar.lzo ./apache-tomcat-9.0.14
real 0m0.050s
user 0m0.028s
sys 0m0.024s
これは圧倒的な速さだ。
じゃあ、lz4でもいけるのかな、と思ったのだけど、lz4にはオプション設定する環境変数は見つからない。
とりあえずデフォルトモードで実行してみる。
$ time tar --use-compress-program=lz4 -cf hoge-lzop.tar.lz4 ./apache-tomcat-9.0.14
real 0m0.055s
user 0m0.037s
sys 0m0.019s
これも圧倒的な速さだ。
いろいろコマンドを組み合わせれるのは良いですね。