うちのサーバのバックアップは「毎日同じディスクにdump」と「毎週別のPCにdump」の二種類行っています。ですのでポカミス(rm -rf /とか)やハードディスクがお亡くなりになった場合でも最長一週間前の状態で復元することは可能です。が、HDDが死亡したときに復元するのって Leopard と違って面倒なんですよ。パーティションの順番やサイズも覚えてません。
てなところで浮上してくる案がRAID。以前使っていたRAID箱はなかなか便利でしたがファンがうるさいのが問題でした。さらに最近ではパラレル→シリアル移行期で選定が非常に難しいという問題もあります。コストの問題もありますので、今回はソフトウェアRAIDを使ってみることにしました。
使用したものは gmirror という FreeBSD5.3 から標準で入っている(知らなかったけど^^)ソフトウェアで、下記のような特徴があります。
元々うちのサーバは160GBのドライブにMPEG4保存用HDDとして160GBを追加した2台構成でしたが、MPEG4用にはMacBookProから取り外した2.5インチディスクを割り当てて2台の160GB-HDDをミラーリングしてみました。ミラー作成に際してはこちらのページが大変参考になりました。ただ、FIXITでの操作はうまくいかなかったので、今回は2.5インチディスクの一部にFreeBSDをインストールして起動し、'gmirror label'と /etc/fstab の編集を行いました。対象ディスク以外から起動できる環境があるならミラー開始やディスク追加の操作自体はかなり簡単です。リビルド中はディスクアクセスが遅くなりますが、1時間ほどで終わるのは良いです(前に使ったことのあるRAID1箱は120GBで半日かかりました)。
さて、実際に使用した感想はというと・・・
違いが感じられませんRAID1は理屈の上ではREADは速くなる可能性があり、WRITEは同じか遅くなるのですが、実使用では違いが感じられませんでした。毎日のレベル0ダンプの時間も同じぐらい。まぁRAID1の目的からすれば同じというのは褒め言葉なんでしょう(^^)。
続いて障害発生シミュレーション。元々/dev/ad0で使ってたディスクに/dev/ad4を追加してリビルドしました。で、システムを停止してad0の電源を引っこ抜きad4から起動してみました。
無事に起動しましたこのときのコンソール表示は下記のような感じ。
Root mount waiting for: GMIRRORその後システムを停止してad0を差し込むと、次回起動時にad4を元にad0へのリビルドが自動的に行われました。どっちのデバイスから起動してもカーネルはad0→ad4の順番で認識しているので、ad4からad0のリビルドが自動的行われたってことは最終セクタに書いてある(時間?)情報を元に判断しているのでしょう。
GEOM_MIRROR: Force device gm0 start due to timeout.
GEOM_MIRROR: Device gm0: provider ad4 activated.
GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
Trying to mount root from ufs:/dev/mirror/gm0s1a
私の知っているソフトウェアRAIDは肝心の障害発生時にエラー停止して長い呪文を唱えなければいけないものばっかりだったので、こんな風にHDDが死亡してもとりあえず起動してくれることにびっくりしました。サーバのBIOS設定でブート順をad4→ad0にしているので、片方が死んでもなんとか生き長らえることができるはずです。可能性としてはad4の/kernelや/bootあたりのセクタがリードエラーを起こしたまま再起動した場合は止まっちゃうことがあるでしょうが、その時は手動でad4を引っこ抜けば良いはず。
てことで、なんとかRAID1環境を構築することができました。なんでこの時期にRAID1環境をこしらえたかというと、来年 FreeBSD7 のインストールをしたかったから。RAID1はハードウェア故障時にも役立ちますが、個人的にはOSのアップグレードで問題が発生しても元に戻せるのが好き。完全なミラーが取れるからディスクを引っこ抜いてからならどんなに壮大な作業をして自爆しても引っこ抜いた方のディスクは安全なんですね。で、戻したかったらそっちだけ使って起動すれば良いと。
昨日はかなり長い時間サーバを停止したので遊びに来られた方にはご迷惑をおかけしました。来年も予告なく止まると思うのでよろしくお願い致します(^_^)。