そう奥村先生がおっしゃるなら、というわけで試してみた。

gzipの代わりにxzを使おう | Okumura's Blog
これからは gzip と打つ代わりに xz と打とう。キーストローク数が半減するだけでなく,ディスク資源が半減し,地球温暖化も半減する。

下準備

具体的には、xzコマンドとGnu Tar 1.22以降を用意することになる。gzやbz2と違って、gnu tar も xz はパイプ経由で扱っているので、gnu tar だけインストールしても

% gnutar Jcvf perl-5.10.0.tar.xz perl-5.10.0
perl-5.10.0/
perl-5.10.0/apollo/
perl-5.10.0/apollo/netinet/
perl-5.10.0/apollo/netinet/in.h
perl-5.10.0/Artistic
perl-5.10.0/AUTHORS
tar (child): xz: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
Broken pipe

という羽目になる。

Mac OS X

MacPorts経由で。

% sudo port selfupdate
% sudo port install gnutar xz-devel

ちなみにデフォルトでインストールされている/usr/bin/gnutarのバージョンは、Leopardでは1.15.1だった。

FreeBSD

gtarlzmautils-develを最新のportsより。コマンド名とport名が異なる点に注意。

% su -m
# portupgrade -NPp lzmautils-devel gtar

Ubuntu 8.10

今なおtarの最新版は1.20.1。ちなみにUbuntu 9.04でない理由は、VMWare toolsがまだ対応していないから。

結果

結論だけまとめると、「圧縮率も高いが、コストも高い」ということになる。キーストローク数とディスク容量はさておき、地球温暖化が半減するかは実に微妙である。

まずは圧縮率。ここでは FreeBSD-7-stable の /usr/srcを圧縮してみた。

% du -s /usr/src
502974	/usr/src
% du stable-src.tar.*
85168	stable-src.tar.bz2
108224	stable-src.tar.gz
71584	stable-src.tar.xz

売りだけあって、素晴らしい。

それでは、圧縮速度はどうか。なかなかのorzぶりである。

/usr/bin/time -l gtar zcvf ~/stable-src.tar.gz src
       87.42 real        54.90 user         5.51 sys
      1296  maximum resident set size
        53  average shared memory size
       683  average unshared data size
       128  average unshared stack size
       334  page reclaims
         0  page faults
         0  swaps
     39799  block input operations
       845  block output operations
         0  messages sent
         0  messages received
         0  signals received
     91099  voluntary context switches
    185081  involuntary context switches
/usr/bin/time -l gtar jcvf ~/stable-src.tar.bz2 src
      180.93 real       174.53 user         5.02 sys
      8108  maximum resident set size
        31  average shared memory size
       705  average unshared data size
       128  average unshared stack size
      2091  page reclaims
         0  page faults
         0  swaps
         1  block input operations
       665  block output operations
         0  messages sent
         0  messages received
         0  signals received
     64540  voluntary context switches
    110077  involuntary context switches
/usr/bin/time -l gtar Jcvf ~/stable-src.tar.xz src
      581.79 real       570.85 user         7.70 sys
     96344  maximum resident set size
        35  average shared memory size
       701  average unshared data size
       128  average unshared stack size
     24082  page reclaims
         0  page faults
         0  swaps
         2  block input operations
       559  block output operations
         0  messages sent
         0  messages received
         0  signals received
     74128  voluntary context switches
    134298  involuntary context switches

圧縮時間6.65倍、メモリー消費74.3倍というのは、むしろ地球温暖化を促進しそうではある。

とはいえ、bzip2を超える圧縮率というのは、実に魅力的でもあるし、解凍に必要なリソースはここまで差が出ないので、GNU coreutils のように何百万回とダウンロードされるようなファイルには確かによさそうだ。

Dan the XZ Newbie