ひとりごと

新しい記事:[2116]  古い記事:[2114] 表示単位 :

ついったー[おとなり日記] かがみさん Y.Kumagaiさん

2007/12/23 (日)

・ はじめての gmirror

うちのサーバのバックアップは「毎日同じディスクにdump」と「毎週別のPCにdump」の二種類行っています。ですのでポカミス(rm -rf /とか)やハードディスクがお亡くなりになった場合でも最長一週間前の状態で復元することは可能です。が、HDDが死亡したときに復元するのって Leopard と違って面倒なんですよ。パーティションの順番やサイズも覚えてません。

てなところで浮上してくる案がRAID。以前使っていたRAID箱はなかなか便利でしたがファンがうるさいのが問題でした。さらに最近ではパラレル→シリアル移行期で選定が非常に難しいという問題もあります。コストの問題もありますので、今回はソフトウェアRAIDを使ってみることにしました。

使用したものは gmirror という FreeBSD5.3 から標準で入っている(知らなかったけど^^)ソフトウェアで、下記のような特徴があります。

  1. ルートファイルシステムを含むドライブ全体をミラーできる
  2. FreeBSDに標準で入ってるのでカーネル読み込み直後から使える(カーネルモジュールの読み込みに/boot/loader.confへ追記が必要)
  3. カーネルがミラーデバイスを認識すると、以降は元のデバイス名(例:/dev/ad0)は使用できなくなる。これにより誤操作または意図しない設定が原因のファイルシステム崩壊を防ぐことができる
  4. 管理情報は装置の最終セクタに書き込まれ、設定ファイルの編集等は特に必要ない(ZFSの使い方に似ている)
  5. 160GBのHDDリビルドに1時間強となかなか高速(※)
  6. ミラー開始前後でデバイスのフォーマットが同じ。使用開始・中断の際に再フォーマット不要
  7. 2台のディスクを丸々ミラーリングした場合、BIOS設定でどちらから起動しても動作する。片方を物理的に取り外しても正常起動する(※)
※印は我が家での実験結果なので環境によって異なる可能性があります

元々うちのサーバは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
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
その後システムを停止してad0を差し込むと、次回起動時にad4を元にad0へのリビルドが自動的に行われました。どっちのデバイスから起動してもカーネルはad0→ad4の順番で認識しているので、ad4からad0のリビルドが自動的行われたってことは最終セクタに書いてある(時間?)情報を元に判断しているのでしょう。

私の知っているソフトウェアRAIDは肝心の障害発生時にエラー停止して長い呪文を唱えなければいけないものばっかりだったので、こんな風にHDDが死亡してもとりあえず起動してくれることにびっくりしました。サーバのBIOS設定でブート順をad4→ad0にしているので、片方が死んでもなんとか生き長らえることができるはずです。可能性としてはad4の/kernelや/bootあたりのセクタがリードエラーを起こしたまま再起動した場合は止まっちゃうことがあるでしょうが、その時は手動でad4を引っこ抜けば良いはず。

てことで、なんとかRAID1環境を構築することができました。なんでこの時期にRAID1環境をこしらえたかというと、来年 FreeBSD7 のインストールをしたかったから。RAID1はハードウェア故障時にも役立ちますが、個人的にはOSのアップグレードで問題が発生しても元に戻せるのが好き。完全なミラーが取れるからディスクを引っこ抜いてからならどんなに壮大な作業をして自爆しても引っこ抜いた方のディスクは安全なんですね。で、戻したかったらそっちだけ使って起動すれば良いと。

昨日はかなり長い時間サーバを停止したので遊びに来られた方にはご迷惑をおかけしました。来年も予告なく止まると思うのでよろしくお願い致します(^_^)。

[つっこみ]

新しい記事:[2116]  古い記事:[2114] 表示単位 :
※このページへのリンクは自由です。リンクの方法については[つっこみ]で表示されるページの最後をごらんください。
たかたに(takatani@mars.dti.ne.jp)