次のページ 前のページ 目次へ

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を使っています。
ftp://sunsite.enc.edu:/pub/Linux/system/Backup/backup-1.03.tar.gz
から入手できます。 以下このドキュメントでbackup-1.03.tar.gz中のスクリプトを単に ``バックアップスクリプト''と呼びます。テープへのバックアップ用に これらのスクリプトを使わないで下さい。 圧縮ファイルからファイルを展開するためのafio(訳注:アーカイブプログラム) としてつかいます。リストア中メディアの読み込みエラーがあった場合そのほうが 安全です。Karel氏はもうbackupをサポートしておらず、'tob'(tape oriented backup)を製作されています。著者も新しいパッケージを試していないのでここで 述べる手順との重要な違いについてはコメントできません。

まず始めにftapeモジュールを入手します。これは現在のカーネルの一部となっています が、古いカーネルを使っている場合は

ftp://sunsite.unc.edu/pub/Linux/kernel/tapes/ftape-2.05.tar.gz
から入手しておいて下さい。 次に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が出来上がりました。ライトプロテクトしておいて下さい。

つぎに空のフォーマットされたディスクをマウントします(フォーマットは fdformatmkfsコマンドを使って行って下さい)。 ftape.oファイルをそのディスクにコピーして、ディスクラベルは SAR#3としておきます。いくつか理由があり、このディスクをライトプロテクト すると不都合が生じます。書き込み可能にしておいて下さい。

Linuxマシン上で、NFSファイル保存用ディレクトリを作ります。

/nfs
ここにftape.o(unstripped, 500KB強)を置きます。Linuxの /etc/exportsファイルに
/nfs    msdos(ro)
と書き込みます。 NFSディレクトリの全ファイルとそのサブディレクトリは安全ではないことに注意 して下さい。誰かがブートディスクを使ってLinuxからMS-DOSマシンをブート して、このディレクトリをマウントすることができるのです。NFSサブディレクトリに は重要なファイルは置かないようにして下さい。

NFSデーモン(rpc.mountdrpc.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を使えるようにしますが、telnetrloginはrootで使えません。またログインはコンソールにのみ制限されます が、これはセキュリティ上良いことです。

root .rhost ファイルについて心配だったら、SAR#2の新しいユーザ ``tapeuser''を作っておくこともできます。パーミッションはテープ ドライブは操作できてディスク操作はできないといったものにします(新しい グループを作ってそのグループにtapeuserをおきます。そして chownchmod コマンドで /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で復旧したファイルのリストを表示します。 '-Z'はafioにそれぞれ圧縮されたファイルのアーカイブであることを 教えます。'-c 1024'は5 MBストリーム(streaming buffer:通信)バッファ をテープの巻き戻しを防ぐために使っています。
次のページ 前のページ 目次へ