4. なぜ tar+gzip はよくないか?

afio は cpio に似たコマンドです。Debian などの Linux の主要 なディストリビューションには afio のパッケージがあると思い ますが、ない場合は ソース (日本のミラーでは こっち) を持ってきて make しましょう。いや、 すでにパッケージがあっても、2.4.4 より古いのだと、後述のハードリンクの bug が あるので、最新を使いましょう。

afio の特長は「gzip と組み合わせて、圧縮してバックアップを 取れる」という点です。メディアのほうで圧縮をサポートしていない限り、dump は これができませんよね。

「まてまて、tar だって gzip で圧縮バックアップできるじゃないか」 という声は当然予期されます。筆者は tar+gzip でのバックアップはお勧めしません。 以下実例をあげて理由を書きます。

% cd /usr/X11R6/lib/X11
% tar cf - app-defaults | gzip -c > ~/app-defaults.tar.gz

などとして、/usr/X11R6/lib/X11/app-defaults のバックアップを取るとします ( GNU tarなら「z」オプションを付けるだけですが、ここでは普通 の tar での使い方です)。さて、何らかの理由で、バックアップ・メディアが損傷を 受け、上の app-defaults.tar.gz の一部が壊れたとしましょう。実験なので、 バイナリエディタの beav で 200 バイトめを「00」に書き換えてしまいます。

% beav ~/app-defaults.tar.gz    壊す!
% cd ~/tmp
% zcat ~/app-defaults.tar.gz | tar xvf - 
app-defaults/ 
app-defaults/Beforelight
app-defaults/Bitmap
tar: Skipping to next file header

zcat: /home/kikutani/app-defaults.tar.gz: invalid compressed data--crc error

御愁傷様です。.tar.gz の途中のデータが壊れると、それ以後の部分もすべてお陀仏に なります。さて、筆者の勧める afio + gzip だとどうでしょう?

% cd /usr/X11R6/lib/X11
% find app-defaults | afio -oZ ~/app-defaults.afz
% beav ~/app-defaults.afz       壊す!
% cd ~/tmp
% afio -ivZ ~/app-defaults.afz
app-defaults -- okay
app-defaults/Beforelight -- okay

gzip: stdin: invalid compressed data--crc error
afio: "inentry xwait()": Exit 1
app-defaults/Bitmap -- uncompressed
app-defaults/Bitmap-color -- uncompressed
app-defaults/Chooser -- uncompressed
app-defaults/Editres -- uncompressed
(以下略)

さすがに壊した部分のファイルは戻りませんが、そこ以外は問題なくリストア されます。tar + gzip より afio + gzip のほうが安全なことは理解いただけました ね?