レンタルサーバ + Webシステム開発 = E-business

■レンタルサーバご利用参考資料
サーバご利用の参考にJF Project によるJF (Japanese FAQ)を掲載しています。

Linux JF(Japanese FAQ)Project.
JF は, Linux に関する解説文書・FAQ などを作成・収集・配布するプロジェクトです.

グリーンネット・トップページへ戻る


一覧に戻る
Backup-mini-HOWTO

菊谷誠

v0.05, 1998/10/23

主として afio を使ったバックアップ技法について述べます。 Windows95 のパ
ーティションをバックアップする方法についても触れます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

Table of Contents
1. このドキュメントの内容
2. なぜバックアップを取る?
3. なぜ afio か?
4. なぜ tar+gzip はよくないか?
5. afio でのバックアップ
   
    5.1. バックアップを取る
    5.2. バックアップをリストアする
    5.3. インクリメンタル・バックアップを取る
   
6. Windows95 のパーティションのバックアップ
7. 追記
8. 免責
9. 配布条件

1. このドキュメントの内容

主として afio を使ったバックアップ技法について述べます。 Windows95 のパ
ーティションをバックアップする方法についても触れます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

2. なぜバックアップを取る?

バックアップの重要性はみんな知っているとは思いますが、定期的に実施して
いる人は少ないと思います。

┌──────────────────────────────────┐
│                              Warning                               │
├──────────────────────────────────┤
│ハードディスクは壊れるものである                                    │
└──────────────────────────────────┘

という命題が真であると知りつつ、なぜバックアップをやらないか?

 1. めんどくさい
   
 2. めったにディスクは壊れんよ
   
 3. ストリーマを持ってない
   
 4. 適当なバックアップのツールがない
   
というところが主な理由でしょうか。まあ 1 と 2 はわからんこともないので
すが、筆者の経験によると、バックアップに関してもマーフィーの法則は成立
していて、

┌──────────────────────────────────┐
│                              Warning                               │
├──────────────────────────────────┤
│バックアップを取っていないときに限ってハードディスクは壊れる        │
└──────────────────────────────────┘

はかなり高い確率で真だと思います。

3 の、バックアップに使う大容量メディアをどうするかは頭の痛い問題で、筆
者も何度か清水の舞台から飛び降りるつもりでストリーマ ( DATでも 8mm でも
いいですが)を買おうと思った時があるのですが、そのたびに思いとどまりまし
た。だって高いくせに買って楽しい機械じゃないんだもの。しょうがないので
今だに MO や PD を使ってます。最近の大容量化著しいハードディスクに対し
ては 230MB や 600MB 程度のメディアでは足りなくなることも多いのですが、
マルチボリューム対応のバックアップツールを使うことでカバーします。

4 の、ツールに関しては実はあります。 sunsite の backup のディレクトリ
を探してみてください(日
本のミラーではここら )。
けっこうあるでしょう?筆者はこのうち tbackup を長いこと使ってました。ま
た、taper もちょっと試してみたことがあり、こちらのほうが洗練されたユー
ザインターフェースを持っています。この文書は「mini-HOWTO」なので、これ
らのツールについては直接言及しませんが、真剣にバックアップを考えている
人はこれらのツールを持ってきてドキュメントを読んで使いこなしましょう。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

3. なぜ afio か?

最初の予定では、バックアップ用コマンドとして

 1. GNU tar
   
 2. dump
   
 3. cpio
   
についても書く予定だったのですが、afio の一本に絞りました。 GNU tar は
バックアップツールとしても意外に強力で、FD へのマルチボリューム・バック
アップやインクリメンタル・バックアップもできます( man tar してみましょ
う)。ただ後述のように、gzip と組み合わせて圧縮バックアップを取るとき難
点があるので却下しました。dump は筆者がよく理解していないのと、DOS/
Windows パーティションが取れないのでここでは触れません [1] 。cpio は、
afio が cpio の上位互換のようなものなのでわざわざ言及する必要もないだろ
うと。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

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 のほうが安全なことは理解いただけ
ましたね?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5. afio でのバックアップ

afio のコマンドオプションはたくさんあって、man afio するとうんざりしま
すが実際に使うオプションは限られたものです。afio --help して出てくるも
ので十分でしょう。

% afio --help                                                                
                                                                             
Usage:  [filename generator] | afio -o [options] archive  : write archive    
        afio -i [options] archive  : install archive                         
        afio -t [options] archive  : list table-of-contents of archive       
        afio -r [options] archive  : verify archive against filesystem       
Frequently used options:                                                     
 General: -v : verbose        -Z : gzip files                                
 Tape:    -s [volsize]   : size of volume, can have suffix k or m            
          -b [blocksize] : block size (default is 5120)                      
          -c [count]     : buffer count blocks between doing I/O             
 Floppy:  -F : device is a floppy drive, -s required    -K : verify floppies 
 Install: -n : protect newer files  -k : skip corrupt data at beginning      
 Select:  -y [pattern] : only process files matching pattern                 
          -Y [pattern] : do not process files matching pattern               
Version 2.4.2 dated 21 Jan 1996                                              

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.1. バックアップを取る

例として、全ファイルを 230MB の MO にバックアップすることを考えます。
MO は /mo にマウントされています。MO のファイルシステムはなんでもいいの
ですが、ext2 よりはオーバヘッドの少ない minix や DOS がいいかもしれませ
ん。

cd /                                                                   
find . | egrep -v '^\./proc/|^\./mo/' | \                              
afio -ovZ -s 210m -L /mo/backup.log /mo/backup.afz \                   
2>&1 | tee /mo/backup.lis                                              

find の後の egrep は、稼働中のシステムの /proc 以下が取られてしまうのを
防ぐことと、MO 自体が取られてしまうことを防ぐためです。この「取らない部
分」に lost+found も含めたほうがいいとは思うのですが、実際にはあまり必
要ないみたいですね。

afio のオプションの説明です。o はバックアップを書く意。v はリスティング
を取るモード。 Z は gzip 圧縮。L はログを書く。

s は指定した容量 (この場合 210MB ) でのマルチボリューム・バックアップを
指示。230MB の MO であっても、ここの値は小さめにしといたほうがいいです
。ここで指定した容量以上を書こうとするとメディアの交換を要求してきます
ので、別の端末で /mo を umount し、別の MO を入れて mount してから afio
に続行を指示します。afio のマルチボリュームはサイズで見てるだけなので単
純なのですが、単純さ故の利点もあります。メディアの種類によらずに使える
ことです。

最後の tee の部分はなくてもいいのですが、リスティングを画面とファイルの
両方に出したいためです。ファイルのリスティングは終わった後圧縮しといた
ほうがいいかも。

本当に重要なバックアップでは、afio の -r オプションで、取ったバックアッ
プが正しいかチェックしましょう。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.2. バックアップをリストアする

戻すほうは簡単です。書きこむ場所に行って、

afio -ivZ -s 210m /mo/backup.afz                                       

としましょう。マルチボリュームで取ったやつは、ひとつのメディアが終われ
ば自動的にメディアの交換を要求されるでしょう。実際に戻す前に

afio -tZ /mo/backup.afz                                                

で中身を確認しておいたほうがいいでしょうね。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

5.3. インクリメンタル・バックアップを取る

本当はインクリメンタル・バックアップまでやろうとしたら、tbackup などの
ツールを使ってシステマティックに管理したほうがいいです。でもコマンドだ
けでもできないことはないので一応書いておきます。インクリメンタル・バッ
クアップとは、要は前回のバックアップ (フル、インクリメンタルを問わず)以
後に変更されたファイルをバックアップとることですよね。そこで、上のよう
に -L /mo/backup.log でログを残す習慣にしておけば、

cd /                                                                   
find . -cnewer /mo/backup.log | \                                      
afio -ovZ -L /mo/incback1.log /mo/incback1.afz                         

というふうにし、その次のインクリメンタルでは

cd /                                                                   
find . -cnewer /mo/incback1.log | \                                    
afio -ovZ -L /mo/incback2.log /mo/incback2.afz                         

という要領で取って行けばいいのです(ここでは egrep によるフィルタは省略)
。ただし、.log の日付けが変わってしまわないよう注意しましょう。厳密にや
るなら .log の最後の「Sun Mar 22 11:36:29 1998」などを、touch の理解す
る「MMDDhhmmCCYY」の形式に変換し、touch でその日付の生成ファイルを作り
、find からはそのファイルを -cnewer で指定するようにします。まあそこま
でめんどくさいことやるなら、tbackup や taper を使ったほうがいいですけど
ね。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

6. Windows95 のパーティションのバックアップ

さて、ここで少し話が変わります。ご存知のように、Linux では Windows95 の
パーティションを読めますので、一見 tar や afio を使って Windows95 のバ
ックアップが取れると思うでしょう?これができれば、Windows95 に付属して
いる役立たずのバックアップツールよりよほど便利なはず。しかし、実際にや
ってみると問題が出ます。日本語 Windows95 で頻繁に使われている「日本語の
ファイル名」でひっかかるのです。バックアップを取るときは一応取れている
みたいなのですが、戻すときエラーになります。

くっそー MS め、日本語ファイル名なんか使うなよなー、とぼやいていたとこ
ろいいモノを見つけました。川口浩さんのページ にある「 VFAT を日本
語ファイル名に対応させるパッチ」です。小柳雅明さんと川口さんが作られた
パッチです(多謝!)。このパッチをあてたカーネルを使うと、上の問題は起き
ないのですね。「半角カナを全角カタカナに変換する」する機能は、バックア
ップの用途ではオフにしといたほうがいいようです。

今この文書を書いてるノート PC は先日ディスクの換装を行なったのですが、
そのとき、この方法を試してみました。以下手順です。

 1. Windows95 から Win95 のブートフロッピーを作っておきます。そのフロッ
    ピーに fdisk.exe をコピーしておきます。念のため format.com と
    sys.com もコピー。
   
 2. VFAT パッチをあてた Linux カーネルを立ち上げ、Windows95 のパーティ
    ションを afio + gzip でバックアップを取ります。筆者はバックアップ・
    メディアとして携帯用の PD を使いました。もちろん Linux のほうも同時
    に取っておきます。
   
 3. ディスクを換装する。
   
 4. Windows95 のパーティションを切る。作っておいた Win95 のブートフロッ
    ピーで立ちあげ、fdisk でパーティションを切り、format.com でフォーマ
    ットする... のが普通にやりかたでしょうが、筆者は DOS/Win の fdisk
    を信頼していないので、Linux でやってしまいました。ただし、Windows95
    で拡張パーティションを使うときは Windows95 の fdisk で切らないとだ
    めかもしれません。
   
 5. Linux のほうでパーティションを切るときは、fdisk と mkdosfs の入った
    boot/root フロッピーで立ち上げてから (Linux の) fdisk でパーティシ
    ョンを切ったのち、mkdosfs で FAT のフォーマットをします(これは
    FAT16 だよね)。
   
 6. どっちの OS でパーティションを切ったにせよ、バックアップデータをリ
    ストアするときは、VFAT パッチをあてたカーネル入りの boot/root フロ
    ッピーを使って Linux を起動します。このフロッピーは PCMCIA の SCSI
    カードや afio を使えるようにしてあります。Windows95 パーティション
    を vfat でマウントし、afio で PD から Windows95 データを戻します(も
    ちろん Linux のほうも)。
   
 7. これだけでは Windows95 はブートしないので、作っておいた Win95 のブ
    ートフロッピーで立ち上げ、「fdisk/mbr 」を実行します。
   
 8. 立ち上げなおすと、こんどは Windows95 がブートします。
   
立ち上げのとき「 c:\windows\system\ddem.dll が修復される必要がある」と
いうメッセージが出ますが、無視して OK を押して行くと無事立ち上がります
。実用上問題ないのですが、このメッセージはときどき出るようになったので
、念のため Windows95 の修復インストールをすると出なくなりました。この現
象が、上記のバックアップの方法によるものなのか、私のノート PC (Let's
Note) に固有の問題なのか、知らないうちにディスクのジオメトリを変えられ
ると Win95 はこうなってしまうものなのかは定かではありません。

もっとも、筆者はこの方法で完全に Windows95 のパーティションのバックアッ
プを取れるかどうか自信があるわけではありません。今のところ支障なく動い
ているように見えますが、なにしろ筆者は Windows95 はあまり使っていないの
で。こういうやり方もある程度の話として聞いておいてください。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

7. 追記

その後、野首さんから次のような報告をいただきました。

    私も結構前から afio を使っています。しかし、リストア時に時々おかし
    なハードリンクが張られてしまったり、ファイルサイズが 0 のファイルが
    作られてしまったりと、不審な挙動にあっています。
   
いろいろと調べてみたところ、次のような動作に原因があるようです。

 1. afio が作成するアーカイブファイル中の i-node 情報は、8^6分までしか
    ない
   
 2. afio がリストアをするとき、ハードリンクの復元は i-node 情報を元に行
    う
   
すなわち、たまたま unsigned short 化されてしまった i-node 番号が同じ値
になる無関係なファイルがあると、それらがハードリンクされていると誤認し
てしまうのです。

野首さんが報告したおかげで、afio の作者が直す方向で動いてくれて、新バー
ジョンは出ました。必ず新しいのを使いましょう。

以下、野首さんから別のコメントです(多謝!)。

     1. acct パッケージをいれている時は、accton を引数無しで実行して記
        録を止めた方が良い
       
     2. ほおっておくと、/var/account/pacct が巨大になることがあります。
       
     3. MO を使う場合、フォーマットをせずに /dev/sd[a-h] を直接指定する
        こともできる。
       
        私はこちらの方法をとっています。mkfs する必要がないのと、ディス
        クをまるまる使えるので mkfs したメディアよりもたくさん記録でき
        るというメリットがあります。そのかわり、ディスクのあいた部分を
        使うようなことはできません。
       
     4. バックアップをとるときに -l を付けるとより安全になる。
       
        -l を付けないと、afio はハードリンクされたファイルをバックアッ
        プする際に、実体 1 つ分しかファイルに記録しないので、そこがやら
        れるとハードリンクされたファイル全てが復元できなくなります。
       
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

8. 免責

この文書は正確に書いたつもりですが、書き間違いや思い違いがあるかもしれ
ません。これら間違い等により、この文書の読者がバックアップに失敗したり
、重要なデータを失なうことになっても、この文書の筆者は一切責任を負いま
せん。すべて自己の責任において作業してください。ただし、間違いの指摘は
歓迎します。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 

9. 配布条件

Free Software Foundation の GNU General Public License version 2 に準拠
するものとします。

kikutani@sprintmail.com

Last modified: Mon Feb 12 01:01:09 JST 2001

(SGML conversion: yuji senda)

Notes

[1] dump に関しては JF ドキュメントで、福島於修さんの「                
    dump-restore-mini-HOWTO」  という詳細な説明がありますので、ぜひ 
    参照してください。                                                 

一覧に戻る
グリーンネット・トップページへ戻る

http://www.green.ne.jp/