  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マシンのハードディスク
  は使いません。３枚の空のフロッピーディスク(1.44MB)を用意しておいて下さ
  い。

  2.  テクニック

  この文書中で２台のマシンをそれぞれ``msdos''、``linux''と呼びま
  す。``msdos''はMS-DOSの走っているテープドライブの接続されたマシン名
  で、``linux''はテープドライブにバックアップ/リストアを行いたい方のマシ
  ン名です。簡単にするためにLinuxでブート、稼働させるときでも１台目のマ
  シンを``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は
                          １枚か２枚のフロッピーレスキューセット
                          "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しているので実行には１分位かかるかもしれません。しばらくお待ち下さい。
       以上でテープから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マシンをブートします。
  ２枚目のディスクのプロンプトが出たら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ディスクを使ってテ
  ープから少なくとも１ファイルの修復が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 ]

