Backup-mini-HOWTO version 0.05 (by 菊谷誠) このドキュメントの内容 主としてafioを使ったバックアップ技法について述べます。 Windows95のパーティ ションをバックアップする方法についても触れます。 なぜバックアップを取る? バックアップの重要性はみんな知っているとは思いますが、定期的に実施している 人は少ないと思います。 ハードディスクは壊れるものである という命題が真であると知りつつ、なぜバックアップをやらないか? 1. めんどくさい 2. めったにディスクは壊れんよ 3. ストリーマを持ってない 4. 適当なバックアップのツールがない というところが主な理由でしょうか。まあ1と2はわからんこともないのですが、筆 者の経験によると、バックアップに関してもマーフィーの法則は成立していて、 バックアップを取っていないときに限ってハードディスクは壊れる はかなり高い確率で真だと思います。 3の、バックアップに使う大容量メディアをどうするかは頭の痛い問題で、筆者も何 度か清水の舞台から飛び降りるつもりでストリーマ(DATでも8mmでもいいですが)を 買おうと思った時があるのですが、そのたびに思いとどまりました。だって高いく せに買って楽しい機械じゃないんだもの。しょうがないので今だにMOやPDを使って ます。最近の大容量化著しいハードディスクに対しては230MBや600MB程度のメディ アでは足りなくなることも多いのですが、マルチボリューム対応のバックアップツ ールを使うことでカバーします。 4の、ツールに関しては実はあります。 sunsiteの backupのディレクトリを探して みてください(日本のミラーではここら)。けっこうあるでしょう?筆者はこのうち tbackupを長いこと使ってました。また、taperもちょっと試してみたことがあり、 こちらのほうが洗練されたユーザインターフェースを持っています。この文書は「 mini-HOWTO」なので、これらのツールについては直接言及しませんが、真剣にバッ クアップを考えている人はこれらのツールを持ってきてドキュメントを読んで使い こなしましょう。 なぜafioか? 最初の予定では、バックアップ用コマンドとして ・ GNU tar ・ dump ・ cpio についても書く予定だったのですが、afioの一本に絞りました。 GNU tarはバック アップツールとしても意外に強力で、FDへのマルチボリューム・バックアップやイ ンクリメンタル・バックアップもできます(man tar してみましょう)。ただ後述の ように、gzipと組み合わせて圧縮バックアップを取るとき難点があるので却下しま した。dumpは筆者がよく理解していないのと、 DOS/Windowsパーティションが取れ ないのでここでは触れません(*)。cpioは、 afioがcpioの上位互換のようなものな のでわざわざ言及する必要もないだろうと。 (*) dumpに関してはJFドキュメントで、福島於修さんの「dump-restore-mini-HOWTO 」という詳細な説明がありますので、ぜひ参照してください。 なぜ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 のほうが安全なことは理解いただけましたね? 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 バックアップを取る 例として、全ファイルを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オプションで、取ったバックアップが正 しいかチェックしましょう。 バックアップをリストアする 戻すほうは簡単です。書きこむ場所に行って、 afio -ivZ -s 210m /mo/backup.afz としましょう。マルチボリュームで取ったやつは、ひとつのメディアが終われば自 動的にメディアの交換を要求されるでしょう。実際に戻す前に afio -tZ /mo/backup.afz で中身を確認しておいたほうがいいでしょうね。 インクリメンタル・バックアップを取る 本当はインクリメンタル・バックアップまでやろうとしたら、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を使ったほうがいいですけどね。 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'sNote) に固有の問題なのか 、知らないうちにディスクのジオメトリを変えられると Win95はこうなってしまう ものなのかは定かではありません。 もっとも、筆者はこの方法で完全にWindows95のパーティションのバックアップを取 れるかどうか自信があるわけではありません。今のところ支障なく動いているよう に見えますが、なにしろ筆者はWindows95はあまり使っていないので。こういうやり 方もある程度の話として聞いておいてください。 追記 その後、野首さんから次のような報告をいただきました。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 私も結構前からafioを使っています。しかし、リストア時に時々おかしなハードリ ンクが張られてしまったり、ファイルサイズが0のファイルが作られてしまったりと 、不審な挙動にあっています。 いろいろと調べてみたところ、次のような動作に原因があるようです。 1. afioが作成するアーカイブファイル中のi-node情報は、8^6分までしかない 2. afioがリストアをするとき、ハードリンクの復元はi-node情報を元に行う すなわち、たまたまunsigned short化されてしまったi-node番号が同じ値になる無 関係なファイルがあると、それらがハードリンクされていると誤認してしまうので す。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 野首さんが報告したおかげで、afioの作者が直す方向で動いてくれて、新バージョ ンは出ました。必ず新しいのを使いましょう。 以下、野首さんから別のコメントです(多謝!)。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. acctパッケージをいれている時は、acctonを引数無しで実行して記録を止めた方 が良い ほおっておくと、/var/account/pacctが巨大になることがあります。 2. MOを使う場合、フォーマットをせずに/dev/sd[a-h]を直接指定することもできる 。 私はこちらの方法をとっています。mkfsする必要がないのと、ディスクをまる まる使えるのでmkfsしたメディアよりもたくさん記録できるというメリットが あります。そのかわり、ディスクのあいた部分を使うようなことはできません 。 3. バックアップをとるときに-lを付けるとより安全になる。 -lを付けないと、afioはハードリンクされたファイルをバックアップする際に 、実体1つ分しかファイルに記録しないので、そこがやられるとハードリンクさ れたファイル全てが復元できなくなります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 免責 この文書は正確に書いたつもりですが、書き間違いや思い違いがあるかもしれませ ん。これら間違い等により、この文書の読者がバックアップに失敗したり、重要な データを失なうことになっても、この文書の筆者は一切責任を負いません。すべて 自己の責任において作業してください。ただし、間違いの指摘は歓迎します。 配布条件 Free Software Foundation の GNU General Public License version 2 に準拠する ものとします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ kikutani@sprintmail.com ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Last modified: 23-OCT-1998