FreeBSD ハンドブック : バックアップ : バックアッププログラム : どのバックアッププログラムが最適でしょう?
Previous: 何もしない
Next: ディスク クォータ

8.3.7. どのバックアッププログラムが最適でしょう?

定期的に dump(8)しましょう. Elizabeth D. Zwicky はここで検討したプログラムすべてについて拷問的なテストを おこないました. すべてのデータと Unixファイルシステムの状態すべてを 保存するには明らかに dump(8)でしょう. Elizabethは大きく変化 に富んだ異常な状態 (いくつかはあまり異常でもない状態のものもあります) になっているファイルシステムで, それぞれのプログラムで ファイルシステムのバックアップとリストアを行ってテストしました. 特色のある状態には, ホールを持つファイル, ホールとヌルブロックを持つ ファイル, 奇妙な文字をファイル名に持つファイル, 読み出し不可, 書き込み不可のファイル, デバイスファイル, バックアップ中にファイルの サイズを変更する, バックアップ中にファイルの作成/削除をおこなうなどが あります. 彼女は1991年10月の LISA Vで結果の発表をしています. torture-testing Backup and Archive Programs を参照してください.

8.3.7.1. 緊急時のリストア手順

災難の起きる前に

起き得るどのような災難に対しても以下の 4ステップだけが必要な 準備です.

ステップ 1では, ファイルシステムテーブル(/etc/fstab) やブートメッセージで示されるすべてのディスクの disklabelをそれぞれ2コピー づつプリント (例えば disklabel sd0 | lpr を実行します) します.

ステップ 2では, boot と fixitフロッピーにそのシステムの すべてのデバイスドライバが含まれているか確認します. 最も簡単な確認の 方法は, フロッピーをドライブに入れてリブートし, ブートメッセージを 確認することです. あなたのシステムのデバイスがすべて含まれ, 機能していれば, step 3へ飛んでください.

そうでないなら, そのシステムのすべてのディスクをマウントでき, テープドライブにもアクセスできる 2種類のカスタムブート フロッピーディスクを作る必要があります. これらのフロッピーには fdisk(8), disklabel(8), newfs(8), mount(8), と利用したい バックアッププログラムが入っていなければなりません. これらのプログラム はスタティックリンクされたプログラムである必要があります. dump(8)を使うのであればフロッピーに restore(8)を 入れる必要があります.

ステップ 3では, 通常の方法でバックアップを作ります. 最新のバックアップの後でおこなわれた変更は回復することはできません. バックアップテープにライトプロテクトをしてください.

ステップ 4では, フロッピー (boot.flp と fixit.flp あるいは ステップ 2で作った2枚のカスタムブートフロッピーディスクです) と バックアップテープのテストをします. 手順のノートを作りましょう. このノートはブートフロッピーディスク, バックアップテープに入れておきプリントアウトしておきます. あなたが リストアをおこなうような時はおそらく錯乱状態でしょうからこのノートは バックアップを破壊してしまうようなことを防ぐのに役立つでしょう (どのようにして破壊するって? tar xvf /dev/rst0とする替りに偶然 tar cvf /dev/rst0 とタイプしてバックアップテープに上書きしてしまうかもしれません).

訳注: 上書きはライトプロテクトをしておけば防げますが, なんらかの原因で プロテクトがはずれているかもしれません. ちなみに訳者の経験から言えば上のようなミスタイプは結構起きます.

安全性を増すために, 毎回ブートフロッピーディスクを作り, 2巻のバックアップテープを取ります. 一方を離れた場所に保管します. 離れた場所は同じ建物の地下室ではいけません. 世界貿易センタービルに あった数多くの会社は苦い経験よりこの教訓を得ました. 離れた場所とはコンピュータやディスクドライブからかなり離れていて 物理的に分離されていなければなりません.

ブートフロッピーディスクを作るスクリプトの一例

 #!/bin/sh
 #
 # create a restore floppy	リストアフロッピーの作成
 # 
 # format the floppy		フロッピーのフォーマット
 #
 PATH=/bin:/sbin:/usr/sbin:/usr/bin

 fdformat -q fd0
 if [ $? -ne 0 ]
 then
         echo "Bad floppy, please use a new one"
         exit 1
 fi

 # place boot blocks on the floppy フロッピーにブートブロックを書く
 #
 disklabel -w -B -b /usr/mdec/fdboot -s /usr/mdec/bootfd /dev/rfd0c fd1440

 #
 # newfs the one and only partition	ただ1つのパーティションを newfs
 #
 newfs -t 2 -u 18 -l 1 -c 40 -i 5120 -m 5 -o space /dev/rfd0a

 #
 # mount the new floppy		新しいフロッピーをマウント
 #
 mount /dev/fd0a /mnt

 #
 # create required directories	必要なディレクトリの作成
 #
 mkdir /mnt/dev
 mkdir /mnt/bin
 mkdir /mnt/sbin
 mkdir /mnt/etc
 mkdir /mnt/root
 mkdir /mnt/mnt                 # for the root partition
 mkdir /mnt/tmp
 mkdir /mnt/var

 #
 # populate the directories
 #
 # 				MINIカーネルがない場合は作ります
 if [ ! -x /sys/compile/MINI/kernel ]
 then
         cat << EOM
 The MINI kernel does not exist, please create one.
 Here is an example config file:
 # 				MINIカーネルの config fileの例
 # MINI -- A kernel to get FreeBSD on onto a disk.
 #
 machine                "i386"
 cpu            "I486_CPU"
 ident          MINI
 maxusers       5

 options                INET                    # needed for _tcp _icmpstat _ip
stat
                                         #            _udpstat _tcpstat _udb
 options                FFS                     #Berkeley Fast File System
 options                FAT_CURSOR              #block cursor in syscons or pcc
ons
 options                SCSI_DELAY=15           #Be pessimistic about Joe SCSI
device
 options                NCONS=2                 #1 virtual consoles
 options                USERCONFIG              #Allow user configuration with
-c XXX

 config         kernel  root on sd0 swap on sd0 and sd1 dumps on sd0

 controller     isa0
 controller     pci0

 controller     fdc0    at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr
 disk           fd0     at fdc0 drive 0

 controller     ncr0

 controller     scbus0

 device         sc0     at isa? port "IO_KBD" tty irq 1 vector scintr
 device         npx0    at isa? port "IO_NPX" irq 13 vector npxintr

 device         sd0
 device         sd1
 device         sd2

 device         st0

 pseudo-device  loop            # required by INET
 pseudo-device  gzip            # Exec gzipped a.out's
 EOM
         exit 1
 fi

 cp -f /sys/compile/MINI/kernel /mnt

 gzip -c -best /sbin/init > /mnt/sbin/init
 gzip -c -best /sbin/fsck > /mnt/sbin/fsck
 gzip -c -best /sbin/mount > /mnt/sbin/mount
 gzip -c -best /sbin/halt > /mnt/sbin/halt
 gzip -c -best /sbin/restore > /mnt/sbin/restore

 gzip -c -best /bin/sh > /mnt/bin/sh
 gzip -c -best /bin/sync > /mnt/bin/sync

 cp /root/.profile /mnt/root

 cp -f /dev/MAKEDEV /mnt/dev
 chmod 755 /mnt/dev/MAKEDEV

 chmod 500 /mnt/sbin/init
 chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt
 chmod 555 /mnt/bin/sh /mnt/bin/sync
 chmod 6555 /mnt/sbin/restore

 #
 # create the devices nodes	デバイスノードを作る
 #
 cd /mnt/dev
 ./MAKEDEV std
 ./MAKEDEV sd0
 ./MAKEDEV sd1
 ./MAKEDEV sd2
 ./MAKEDEV st0
 ./MAKEDEV pty0
 cd /

 #
 # create minimum filesystem table  最小限のファイルシステムテーブル
 #
 cat > /mnt/etc/fstab <<EOM
 /dev/fd0a      /       ufs     rw 1 1
 EOM

 #
 # create minimum passwd file	最小限のパスワードファイル
 #
 cat > /mnt/etc/passwd <<EOM
 root:*:0:0:Charlie &:/root:/bin/sh
 EOM

 cat > /mnt/etc/master.passwd <<EOM
 root::0:0::0:0:Charlie &:/root:/bin/sh
 EOM

 chmod 600 /mnt/etc/master.passwd
 chmod 644 /mnt/etc/passwd
 /usr/sbin/pwd_mkdb -d/mnt/etc /mnt/etc/master.passwd

 #
 # umount the floppy and inform the user	フロッピーを unmount
 #
 /sbin/umount /mnt

8.3.7.2. 災難の後に

重要な問題は, ハードウェアが生き残ったかどうかです. 定期的なバックアップを取っていればソフトウェアについて心配する必要はあ りません.

ハードウェアがダメージを受けていたら, 最初にそのダメージを 受けた部品を交換してください.

ハードウェアに問題がなければ, フロッピーをチェックしてくださ い.カスタムブートフロッピーディスクを使っているのであればシングルユーザ ("boot:"プロンプトの出た時に "-s" とタイプしてください) でブートしてくださ い. それから次の「ファイルシステムを1つずつ回復する」を読んでください.

boot.flp と fixit.flp を使っているのであればこのまま読み続けてくださ い. boot.flp を入れてブートしてください. 本来のインストールメニューが表 示されるはずです. (ここで) "fixit XXX"オプションを選びます. 指示の通り fixit.flp を入れてください. restoreとその他の必要なプログラムは /mnt2/standに置かれています.

ファイルシステムを一つずつ回復する

最初のディスクのrootパーティションをmount(8) (例えば mount /dev/sd0a /mntのように) マウントして見てください. ディスクラベルが 破壊されている場合は disklabel(8)を使ってあらかじめプリントし ておいた通りにパーティションを作り直しラベルをつけてセーブしてください. newfs(8)を使いファイルシステムを作り直します. ルー トパーティションを読み書き可能にマウント ("mount -u -o rw /mnt") しなおします. バックアッププログラムとバックアップテープを 使ってこのファイルシステムのデータを回復します (例えば restore vrf /dev/st0とします). ファイルシステムをアンマウント (umount /mntなど) して, 障害を受けたファイルシステムそれぞれについて繰り返 してください.

システムが動き出したら, 新しいテープにデータをバックアップ してください. どのような理由で再び事故が起きたりデータが失われるかはわか りません. これに時間を費す事で, 後々の災難から救われる事になります.

8.3.7.3. * 災難対策をしていませんでした. どうしたらいいでしょう?


FreeBSD ハンドブック : バックアップ : バックアッププログラム : どのバックアッププログラムが最適でしょう?
Previous: 何もしない
Next: ディスク クォータ