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」 という詳細な説明がありますので、ぜひ 参照してください。