Backup-With-MSDOS mini-HOWTO Christopher Neufeld, neufeld@physics.utoronto.ca Aug 5, 1997 伊佐冶 哲, isaji@mxu.meshnet.or.jp 5 Jan 1998 このHOWTOはMS-DOSマシンにインストールされたLinux互換のテープドライブ をLinuxのファイルシステムバックアップに利用する方法について解説してい ます。 ______________________________________________________________________ 目次 1. 序文/イントロダクション 2. テクニック 3. メモ 4. 著作権 ______________________________________________________________________ 1. 序文/イントロダクション 以前ネット上に「MS-DOSマシン上のColorado Jumbo 250テープにLinuxをバッ クアップする方法は?」という質問を投稿しました。メールの返事から、どう もこれはよく考えるべき問題(frequently pondered problem)だとわかってき ました。もしHOWTOドキュメントにメッセージを送りたいなら著者まで知らせ て下さい。またJim Nance氏(jlnance@isscad.com)には「MS-DOSマシンは常 にMS-DOSマシンである必要はない」ということを指摘していただきました。こ こに感謝いたします。この方法は ftapeモジュール(訳注:「Ftape-HOWTO」を 参照)でサポートされているテープドライブや適当に変更したSCSIテープドラ イブ(例えば/dev/ftapeの代わりに /dev/st0 )ならどれでも適用できます。 基準として、できるだけ安全かつシンプルでMS-DOSマシンのハードディスクに スペースがないといったことを考慮します。Linuxファイルシステムをリスト アしなければいけないような最悪になったシステムを復旧する(さらにハード ディスクを喰わない)ことができるものにすべきです。 IP#が振り分けられた マシンが必要です。またここで述べる方法ではMS-DOSマシンのハードディスク は使いません。3枚の空のフロッピーディスク(1.44MB)を用意しておいて下さ い。 2. テクニック この文書中で2台のマシンをそれぞれ``msdos''、``linux''と呼びま す。``msdos''はMS-DOSの走っているテープドライブの接続されたマシン名 で、``linux''はテープドライブにバックアップ/リストアを行いたい方のマシ ン名です。簡単にするためにLinuxでブート、稼働させるときでも1台目のマ シンを``msdos''と呼びます。さらにこのドキュメント中のパス名もシステム のどこかにマウントされたSearch-And-Rescue (SAR)ディスクとLinuxマシンに つながりがあるように書きます。例えば、これは/etc/passwdはLinuxマシンの ハードドライブ用のパスワードファイルであることを意味しま す。/tape144/etc/passwdはフロッピーディスク上のものに相当するファイル です。 (訳注:SARディスクツールについて LSM) Begin3 Title: SAR: a Search And Rescue set (SAR 検索、レスキューセット) Version: 2.21 Entered-date: 01dec94 Description: (SARはSearch And Rescueフロッピーセットを作るためのスクリプト です。ハードディスクが不幸なクラッシュをしたときに使います。 フロッピーはあなた自身でアップデートされたカーネルと ユーティリティセットが使われます。設定ファイルはSARセットの 生成をカスタマイズします。SARは 1枚か2枚のフロッピーレスキューセット "holecp"ユーティリティによってコピーされたファイル Kiss "simple shell" を含んでいます。広範囲にわたるドキュメントとユーティリティ プログラムがついています)。 Keywords: backup rescue SAR search first-aid Author: Karel Kubat (karel@icce.rug.nl) Maintained-by: see Author Primary-site: ftp.icce.rug.nl:/pub/unix/SAR-X.YY.tar.gz (X.YY is version) Alternate-site: sunsite.unc.edu, tsx-11.mit.edu Original-site: -- Platforms: Linux systems Copying-policy: PostcardWare (if you like it, send me a postcard) MegaHard (who wants a Microsoft) but really: GPL, but inform me if you want to make changes End 著者はKarel Kubat氏のバックアップスクリプトversion 1.03を使っていま す。 から入手できます。以下このドキュメントでbackup-1.03.tar.gz中のスクリプ トを単に ``バックアップスクリプト''と呼びます。テープへのバックアップ 用にこれらのスクリプトを使わないで下さい。圧縮ファイルからファイルを展 開するためのafio(訳注:アーカイブプログラム) としてつかいます。リスト ア中メディアの読み込みエラーがあった場合そのほうが安全です。Karel氏は もうbackupをサポートしておらず、'tob'(tape oriented backup)を製作され ています。著者も新しいパッケージを試していないのでここで述べる手順との 重要な違いについてはコメントできません。 まず始めにftapeモジュールを入手します。これは現在のカーネルの一部と なっていますが、古いカーネルを使っている場合は から入手しておいて下さい。次にSlackwareブートディスク(著者はnetディス クを使いますがそれほど違いはありません)とtape144ルートディス ク(を3"1/2フロッピーにイメージを書き込んだディスク)を用意します。 ftapeモジュールは、実行しているカーネルに組み込まれている場合のみ動作 します。tape144ルートディスク上でftape.oモジュールと動作させることはで きません。モジュールがシンボルの削除(stripped)をしていて組み込めないか らだと思います。そこでネットワークとftapeをサポートするカーネルを再構 築する必要があります( また古いカーネルを使っている場合は新し いftape.oモジュールをサポートするようにします)。ここでftapeアーカイブ を作るための文書を読んでおいて下さい。コンパイルするカーネル はLinux、MS-DOSマシン両方でイーサネットカードをサポートすることを忘れ ないで下さい。 新しいカーネルイメージをnetブートディスクにコピーします。/bin/cp コマ ンドを使って下さい。起動可能なカーネルイメージを作るために``dd'' コマ ンドは使いません。ラベルはSAR#1とします。ブートディスクをライトプロテ クトしておくのを忘れないで下さい。 さて次にtape144ルートディスクをマウントします。マウントポイントはファ イル名と混同しないように/tape144とします。スペースを空ける必要があるの で以下のファイルを削除します。 /tape144/bin/dialog /tape144/bin/elvis /tape144/bin/vi /tape144/boot/ftape.o つぎに新しいファイルを作ります。 /tape144/etc/exports このファイルは以下の行を含んでいます。 /mnt msdos(ro) ここで``msdos''は、テープドライブがインストールされているMS-DOS マシン 名かIP#に置き換えて下さい。 (マシン名は)ネームサーバに依存しないようにします。Linux と MS-DOSマシ ンの名前とIPアドレスを/tape144/etc/hostsに以下のように追加します。 128.100.75.114 caliban.physics.utoronto.ca caliban caliban.physics 128.100.75.111 ariel.physics.utoronto.ca ariel ariel.physics inetd設定でちょっと問題があります。rshデーモンのフルパス名を書かなくて はなりません。/tape144/etc/inetd.confの19行目を変更します。 (訳注:コ メント文を表示させないでcatするにはgrep ^[^#] inetd.conf などとして下 さい)。 shell stream tcp nowait root /usr/etc/tcpd /usr/etc/in.rshd MS-DOSマシンがネットワークを使えるように/tape144/etc/rc.d/rc.inet1 に ローカルネットルーチンの情報を追加します。このフォーマットは各自のネッ トワーク設定に依るので、Linuxマシンの/etc/rc.d/rc.inet1から適当なフォ ーマットをコピーします。著者のネットワークでは以下のような行を追加しま した。 /etc/ifconfig eth0 128.100.75.111 broadcast 128.100.75.0 netmask 255.255.255.0 /etc/route add -net 128.100.75.0 netmask 255.255.255.0 ifconfigエントリーのIP#は MS-DOSマシンのものにして下さい。 このファイルを/tape144/etc/rc.d/rc.inet1-lにコピーします。 MS-DOSマシ ンよりもLinuxマシンの設定を反映させるために新しいファイルの IP#を変更 します。 /tape144/etc/rc.localファイルの3〜11行をコメントアウト(clip out) しま す。ここはrc.inet*ファイルを実行するためのif分岐です。ブートアップ中は これが起こらないようにします。 /tape144/root/.rhostsファイルを作ります。 linux root という行が含まれています。ここで``linux''はドメイン名も含んだマシン名 かIP#に置き換えておいて下さい。 バックアップを取っている間、MS-DOSマシンにログインする人がいないように rootログイン用の/tape144/etc/passwdのパスワードフィールドを満たしてお きます。Linuxマシンの/etc/passwd fileから適当なフィールドをコピーすれ ばよいです。 /usr/bin/rshを/tape144/usr/binにコピーします。 /usr/etcから以下のファイルを/tape144/usr/etcにコピーします。 (訳 注:/usr/etcでなく/etcの環境の場合は/etcからコピーして下さい) in.rshd rpc.mountd rpc.nfsd rpc.portmap services tcpd 新しいスクリプト/tape144/bin/tapesetupを作ります。以下の文をそのファイ ルに書き込んで下さい。 #! /bin/sh /bin/sh /etc/rc.d/rc.inet1 /bin/sh /etc/rc.d/rc.inet2 /bin/mount linux:/nfs /mnt /bin/insmod /mnt/ftape.o ここで``linux''はLinuxマシン名にします。新しいカーネルではinsmodの行は いりません。 次に以下のようなスクリプト/tape144/bin/msdossetも作っておきます。 #! /bin/sh /bin/sh /etc/rc.d/rc.inet1 /bin/sh /etc/rc.d/rc.inet2 mount linux:/mnt /mnt /bin/insmod /mnt/ftape.o ここで``linux''はLinuxマシン名にします。同様に新しいカーネルで はinsmodの行はいりません。 説明のためのファイル/tape144/root/notesも作っておきます。これは復旧の 時の手順情報を書いておきます。 --------------------- ここから ----------------------------------- ハードディスクが壊れた時修復させるために、SAR(Search-And-Rescue、復旧) ディスク#1と#2を使ってLinuxをブートします。そして以下のように実行します。 /bin/sh /etc/rc.d/rc.inet1-l /bin/sh /etc/rc.d/rc.inet2 /usr/etc/rpc.portmap /usr/etc/rpc.mountd /usr/etc/rpc.nfsd つぎにSARディスク#3を入れて、 mount /dev/fd0 /mnt とします。新しいマウントポイントを作ります。 mkdir /mnt2 ここにLinuxハードディスクのパーティションをマウントして下さい。 はじめにパーティションをフォーマットしておかなくてはならないかも しれません。その時はLinux Installation HOWTOを参考にします。 SARディスクは再フォーマットするのに必要な全ファイルがあります。 最後にSAR#1、SAR#2ディスクを使ってMS-DOSマシンをブートアップしこのマシンから /bin/msdossetスクリプトを実行して下さい。フロッピードライブからNFSファイルを getしているので実行には1分位かかるかもしれません。しばらくお待ち下さい。 以上でテープからLinuxマシンの /mnt2 に復旧されました。 --------------------- ここまで ----------------------------------- もしバックアップスクリプトを使っているなら'afio'コマンドを /tape144/local/binサブディレクトリにコピーしておきます。復旧ディスクに バックアップスクリプトの残りを入れておく必要はありません。アーカイブ は'afio'と'gzip'だけで復旧できます。 著者はバックアップスクリプトをそれがちゃんと動作するように使えていませ ん。テープアーカイブはきれいに作られているように見えるのですが、復旧で きません。ブロックサイズの削除とスクリプト中の書き換えをすることでバグ をとりました。以下その``netbackup''スクリプトのパッチを書きました。こ のパッチを、 SARディスクへのコピーと同様に'netbackup'のLinuxマシンのハ ードディスクコピーにも当てておきます。 *** netbackup.orig Mon Jan 9 17:22:32 1995 --- netbackup Mon Jan 9 17:23:25 1995 *************** *** 35,41 **** "'mknod", devname, "p'"); exec ("su -", USERNAME, "-c", "'rsh ", REMOTE_HOST, ! "\"dd", "of=" REMOTE_DEVICE, "obs=20k", "conv=sync\"", "<", devname, "'&" ); --- 35,41 ---- "'mknod", devname, "p'"); exec ("su -", USERNAME, "-c", "'rsh ", REMOTE_HOST, ! "\"dd", "of=" REMOTE_DEVICE, "\"", "<", devname, "'&" ); *************** *** 50,56 **** "'mknod", devname, "p'"); exec ("su", USERNAME, "-c", "'rsh ", REMOTE_HOST, ! "\"dd", "if=" REMOTE_DEVICE, "ibs=20k", "conv=sync\"", ">", devname, "'&" ); --- 50,56 ---- "'mknod", devname, "p'"); exec ("su", USERNAME, "-c", "'rsh ", REMOTE_HOST, ! "\"dd", "if=" REMOTE_DEVICE, "\"", ">", devname, "'&" ); これでSARディスク#2が出来上がりました。ライトプロテクトしておいて下さ い。 つぎに空のフォーマットされたディスクをマウントします(フォーマットは fdformat、mkfsコマンドを使って行って下さい)。 ftape.oファイルをその ディスクにコピーして、ディスクラベルは SAR#3としておきます。いくつか理 由があり、このディスクをライトプロテクトすると不都合が生じます。書き込 み可能にしておいて下さい。 Linuxマシン上で、NFSファイル保存用ディレクトリを作ります。 /nfs ここにftape.o(unstripped, 500KB強)を置きます。Linuxの /etc/exportsファ イルに /nfs msdos(ro) と書き込みます。 NFSディレクトリの全ファイルとそのサブディレクトリは安 全ではないことに注意して下さい。誰かがブートディスクを使ってLinuxか らMS-DOSマシンをブートして、このディレクトリをマウントすることができる のです。NFSサブディレクトリには重要なファイルは置かないようにして下さ い。 NFSデーモン(rpc.mountd と rpc.nfsdを使って)を再スタートしま す。SIGHUPで再び開始するのはどうもよくないので、killして再度実行しま す。もし/etc/rc.d/rc.inet2でこれらのデーモンをアクティブにしていないの なら今のうちに設定しておきましょう。 さあ、バックアップと復旧の設定は終りました。Linuxマシンのフルバック アップをとるために、SAR#1ディスクを使ってMS-DOSマシンをブートします。 2枚目のディスクのプロンプトが出たらrootとしてログインし て/bin/tapesetup スクリプトを実行します。終ったらMS-DOSマシンからログ アウトします。 もしバックアップスクリプトを使っているなら、ここでnetbackupコマンドが 使えます。またGNU tar, cpio, mtコマンドに ``-f msdos:/dev/ftape''ス イッチを付けられます。バックアッププログラムがあるならローカルファイル に書き込むこともできます。それには以下のようにします。バックアッププロ グラムを``localbackup''とします。コマンドラインの引数にファイルを書き ます。 mknod /tmp/tapepipe p rsh msdos dd of=/dev/ftape < /tmp/tapepipe & localbackup /tmp/tapepipe 実行したら/tmp/tapepipeを削除しておいて下さい。 Linuxマシンの復旧: netbackupスクリプト、tar, cpio等は特別な操作をしなくても動作します。も しファイルから復旧するローカルプログラムがあるなら、 mknod /tmp/tapepipe p rsh -n msdos dd if=/dev/ftape >> /tmp/tapepipe & localrecovery /tmp/tapepipe とします。同様に実行したら/tmp/tapepipeを削除しておいて下さい。 著者はMS-DOSマシンへのrootログインに 'rsh'を使っています。これは正確 な.rhostsエントリーが必要です。'tape144'ディスクの設定はrootでrshを使 えるようにしますが、telnetや rloginはrootで使えません。またログインは コンソールにのみ制限されますが、これはセキュリティ上良いことです。 root .rhost ファイルについて心配だったら、SAR#2の新しいユーザ ``tapeuser''を作っておくこともできます。パーミッションはテープドライブ は操作できてディスク操作はできないといったものにします(新しいグループ を作ってそのグループにtapeuserをおきます。そして chown と chmod コマン ドで /dev/rft* 、 /dev/nrft*ファイルのオーナー、グループを変更しておき ます)。 バックプログラムではrootとしてよりもユーザー名でrshを使わなければなり ません。もちろんSAR#2ディスクの~tapeuserに .rhostsファイルを置いていま す。著者の場合はrootの.rhosts よりもこちらを選んでいます。 最後にクラッシュしたハードディスクの復旧をしてみます。ここでLinux パー ティションは完全に回復できないと仮定しましょう。必要なら「Linux Installation HOWTO」に従ってパーティションを再フォーマットしておきま す。SARディスク#1を使ってLinuxマシンをブートします。プロンプトが表示さ れたらSARディスク#2を入れます。ここで/root/notesファイルに書いたメモに 従って作業をすすめて下さい(Linuxマシンにマウントされているならこれ は/tape144/root/notesです)。いったん両方のマシンがブートされたら、必要 な復旧ルーチンを実行します。バックアップスクリプトを実行するなら以下の ようにすすめていきます。 1. ディレクトリを復旧したいハードディスクパーティションにマウントする 箇所に変更します。 2. もしマウントされたボリュームがバックアップ上で、それを復旧したい場 合はハードディスクパーティションにマウントポイントを作りボリューム をそこへマウントします。 3. コマンドの入力: rsh -n msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 - あるいは rsh -n -l tapeuser msdos dd if=/dev/ftape | afio -i -v -Z -c 1024 - あるいは mknod /tmp/backpipe p rsh -n msdos dd if=/dev/ftape >> /tmp/backpipe & afio -i -v -Z -c 1024 /tmp/backpipe afioがピックアップしたリモートマシン上のテープを読み、標準出力へその結 果が表示されます。'-i'スイッチを使うとカレントディレクトリ (ハードディ スクパーティションのroot)に関係したファイルの復旧について教えてくれま す。'-v'はverboseで復旧したファイルのリストを表示します。教えます。'-c 1024'は5 MBストリーム(streaming buffer:通信)バッファをテープの巻き戻 しを防ぐために使っています。 3. メモ /tape144/root/notesファイルにリストしたコマンドはスクリプトから実行さ れます。試したところ、rpcセットアップエラーが出ました。コマンドがあま りにも速く実行されたかポートマップがちゃんとインストールされていないた めだと思います。うまく動作するように手動でシーケンスを入力すればよいこ とに気づきました。ぜひ試してみて下さい。 ここで述べた設定は安全であると思いますが、もし作業を始める前に誰かがテ ープやテープドライバそのものを外してしまったら、だれでもあなたのファイ ルに (テープそのものを読んで)アクセスできてしまいます。機密データを扱 う場合にはアーカイバから送られる(stream)データを暗号化しておきたいと思 うかもしれません。 アーカイバから標準出力をデータを送らせ、その出力を暗号化プログラムにパ イプで送り、暗号化プログラムの出力を先に説明した名前付きパイプ /tmp/tapepipeにリダイレクトで追加します。 アーカイブ全体がDESによって暗号化された一つのデータになるので、もしア ーカイブからデータを取り出す作業の途中でエラーが生じると、それ以降の全 データが取り出せなくなってしまうので注意してください。 afio のオプション指定によっては、最初にそれぞれのファイルを gzip でア ーカイブにして、それから DES のような暗号化プログラムに送ることもでき ます。しかし、最初に圧縮する方法は暗号解読プログラム(code braker=コー ド破り)が動作するのに既知の十分な量のベタテキストを生成してしまうの で、大量のテープを使ってでも gzip での圧縮は飛ばして単に DES で暗号化 する方が良いと思われます。言うまでもありませんが、DES で暗号化された ファイルは圧縮されていません。 rc.inet1ではローカルネットワークの通信のみ許可していてゲートウェイから のものは許可されません。 ハードディスクを復旧している間、SARディスク#3は NFSを通してMS-DOSマシ ンにftape.oモジュールを与えます。これは ftape.oモジュールの古いバー ジョンではフロッピードライブにマウントしたディスクがある場合、テープド ライブをコントロールできないものがあるからです。新しいカーネルで はNFSが行うことは全て省略されます。 これは大変重要です。 SAR復旧の手順は必ず***テストして下さい***。ここで は復旧はしましたが必ずしもできるとは限りません。SARディスクを使ってテ ープから少なくとも1ファイルの修復がLinuxマシンでできることを確認して おいて下さい(ただしハードディスクのマウントはしないで)。もし適当なユー ザーからLinuxマシンをリブートできない場合はSARディスクのセットアップ情 報を変更します。まず``linux'' アイデンティティの箇所を何か他のMS-DOSマ シンに指定して、Linuxで全てが動作することを確認するためにMS-DOSマシン をブートします。最後に``linux'' アイデンティティをもとに戻してやれ ばSARディスクが使えるようになります。 4. 著作権 Copyright Jan 10, 1995 by Christopher Neufeld (neufeld@physics.utoronto.ca) Modified Feb 6, 1996. Modified Aug 5, 1997. [(日本語訳) 伊佐治 哲, isaji@mxu.meshnet.or.jp (校正) 藤原 輝嘉さん , fujiwara@linux.or.jp ]