LoginSignup
1
2

More than 5 years have passed since last update.

tarの圧縮は速いほうがいいよね

Posted at

「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

これも圧倒的な速さだ。

いろいろコマンドを組み合わせれるのは良いですね。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2