サーバーのHDがクラッシュしてしまったら、あなたはどのように復旧するだろうか。一から構築しなおすだろうか? e-ueda も経験がある。以前、このコンテンツを提供しているサーバーがクラッシュしてしまったとき、一から構築した。RedHat Linux 7.3 で運用していたサーバーが壊れ「ええい、この際 Debian でいてまえ」と、3~4時間で作り直した。その時は、構築時の設定ファイルをWindowsマシン側に保存していたので、すぐに構築しなおせたわけだ。それでも RedHat と Debian の違いに少々苦しんだことは、正直に告白しよう。
しかし、やはり構築し直しは不安だらけで心臓に悪い。いつも絶対に数時間で構築しなおせる保障などないし、第一効率も悪い。
理想を言えば、ホットスワップ対応のRAIDユニットを搭載したサーバーがあればいいのだが、そんな金銭的な余裕もない。であれば、せめて、故障したときに何も考えず、一番効率の良い方法でリカバリーできる手法があれば、障害時の復旧も不安なく効率的に行なえる。
そこで、選んだ手法が「Mondo Rescue」だ。Mondo Rescue は、CDにシステムのイメージを焼くことができ、部分的な復旧も、システム全体の復旧もできる。製品でいえば NetJapan の Deploy Center や Norton の Gohst のようなものだ。
先日、実際に Mondo Rescue によるバックアップ作業をしてみたので、その作業メモをアップしておく。
● 必要なパッケージのインストール
下記のパッケージが必要となる。入っていなかったら、あらかじめインストールしておく。
# apt-get install afio buffer bzip2 lzop liblzo1
CD に焼くので、下記のパッケージも必要となる。
# apt-get install mkisofs cdrecord
cdrecord をインストールする際、SUID で動作させるか聞かれる。普通はデフォルトのNoでいいだろう。
● Mondo Rescue のインストール
では Mondo Rescue のパッケージをインストールしてみよう。
# apt-get install mindi mondo
mindi というのは、Mondo Rescue で作成するイメージCDを、ブート可能にするために必要なパッケージだ。
● デバイスの準備
CD-R(W) ドライブが必要なのは言うまでもないが、これを cdredord で使用するには、SCSI接続の CD-R(W) ドライブか、ATAPI で接続されたCD-R(W) ドライブを、SCSI エミュレートで設定されたドライブが必要となる。(カーネル 2.6 では、もっとスマートにできるらしいが、ここでは触れない)
環境によって違うが、まずは下記のコマンドを打ってみる。
# cat /proc/scsi/scsi
ここで何も CD-R(W) ドライブが表示されなければ、手動で設定する必要がある。(認識され、設定されている方は、この部分を飛ばして構わない)まず dmesg コマンドの出力で、CD-Rドライブがどのデバイスで認識されているか確認する。もし hdc で認識されていれば、/etc/lilo.conf のデフォルトでロードされるカーネルの image セクションに次のように追記する。普通 hdc は IDE デバイスとして認識されてしまうので、これをSCSIサブシステムの管理下に置かなければならない。
append="hdc=ide-scsi"
そして、/dev 下にある cdrom を、SCSIデバイス名にリンクしてしまう。
# cd /dev # ln -sf scd0 cdrom
次に、/etc/modutiles/aliases に、SCSI 関連のドライバをロードするように記述する。
alias scsi_hostadapter ide-scsi alias scd0 sr_mod options ide-cd ignore=hdc
scd0 というのは SCSI CD のデバイス名だ。編集・保存したら、下記のコマンドで設定を有効にする。
# update-modules
以上が済んだら再起動する。
再起動後、設定がうまくいっていれば、
# cat /proc/scsi/scsi Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: MITSUMI Model: CR-4804TE Rev: 2.4C Type: CD-ROM ANSI SCSI revision: 02
のように認識しているだろう。
ここまでできていれば、cdrecord からも、CD ドライブが認識される。
# cdrecord -scanbus
Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 J g Schilling
Linux sg driver version: 3.1.25
Using libscg version 'schily-0.5'
scsibus0:
0,0,0 0) 'MITSUMI ' 'CR-4804TE ' '2.4C' Removable CD-ROM
0,1,0 1) *
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *
ちょっと古いがタイプだが、e-ueda のサーバーについているCD-R ドライブだ。(中古市場では、書き込み速度が遅くてかまわなければ CD-RW ドライブが2000円ほどで手に入る)ここまでくれば、イメージCD作成の準備はすべてできたことになる。
● システムのバックアップ
まず、直接システムをCDに焼くのではなく、2台目のハードディスクに iso イメージを作成してみよう。これは cron などで設定すれば、夜中にでも iso イメージを定期的に作成できるメリットがある。iso イメージを作成してしまえば、CD に焼く作業はいつでも都合の良いときにできる。
2台目のハードディスクは、HARD OFF などの中古ショップで 4GB の HD が2000 ~ 3000円ほどで売られているので、こういう安価なものをバックアップ用の HDにすればよい。
では早速 iso イメージを作成してみよう。下記は2台目の HD を取り付けて、 /bk1 としてマウントしたところに、iso イメージを作成している例である。
# mondoarchive -O -i -L -d /bk1 -E "/bk1 /bk2 /mnt" -l LILO -f /dev/hda
-k FAILSAFE -s 640m -F (→実際には一行)
オプション -O は、バックアップを作成すること、-i は ISO イメージを HD に保存すること、-L は lzo 形式で圧縮することを指示する。-d はバックアップ先の指定。-E はバックアップ対象からはずす場所を指定する。当然バックアップファイルの作成先は除外しなければならない。複数指定する場合は空白で区切る。-l では、ブートローダーを、-f ではマスターブートレコードがインストールされているデバイスを明示する。-k でカーネルイメージへのパスを指定するが、Debian ではここを FAILSAFE としないと、CDブートに失敗するようだ。-s のあとにはisoイメージファイルの上限を指定する。
● ISO ファイルを CD に焼く
では、上記のイメージを CD に焼いてみる。 cdrecord -scanbus コマンドの出力結果にあわせて、次のように
# cdrecord -v speed=4 dev=0,0,0 -data 1.iso
いきなり焼くのが不安なら、オプション -dummy でエラーが出ないことを確認してから焼けばよいだろう。サイズに応じて 2.iso、3.iso ・・・とファイルができるので、順次焼いてほしい。
後は作った CD でブートしリカバリー作業をするだけだ。本当に元通りになるのか、検証結果は後日ここで報告するつもりだ。
Posted by e-ueda at 2004年04月19日 08:50