お手軽software raid(ミラー) [FreeBSD gmirror]

Posted on 2007年12月01日 | Comment (0) | TrackBack (0)

ディスクは消耗品です。と分かってはいても、なかなか追加投資することができず。。自宅サーバー(このサイトを運営しているサーバー)もRAID化せずにずるずると。
そして今日、古いディスクを調達してようやくミラー化したので、記念にそれを記します^^

低価格なハードウェアRAIDがいいことは分かっていても、4万円くらいしますからねぇ。ソフトウェアRAIDはコストパフォーマンス抜群です。同じことができるんだし。^^

どこまでできるのか?

かつてはよくatacontrol を使ってソフトウェアRAIDを作ってました(FreeBSD専用ね)。ミラーです。
ディスクがぶっとんでも電源を落とさずにディスク交換やリビルドができ、非常に助かっていました。

今回もatacontrolでいいかなと思ったのですが、最近の流行はGEOMなんだそうです。atacontrolでミラー作るのよりもさらに簡単でした。
atacontrol はIDEハードディスクだけでしたが、GEOMはVFSとファイルシステムの間でごにょごにょしてくれるのだそうで、IDEとscsiを混在させることもできるようです。
なかなかいいフレームワークですね。

atacontrol も GEOM mirror(gmirror) も、こんな特徴があります。

  • 起動ドライブもミラー化できます。

  • 特定ハードウェアに依存しないので、どんなマシンでも使えます。移動自由。
    特殊なドライバがないと使えないものより安心。

  • 障害時にも電源を落とすことなく、ディスク交換,ミラーのリビルドが行えます。

  • インストール済みのシステムを簡単にミラー化できます。

既存の起動ドライブをGEOMでミラー化する

gmirrorはディスクのケツの部分に何か管理用のデータを書き込むそうな。
そしてこれだけで、既存のディスクがgmirrorディスクに早変わりです。

まずは2台目のディスクを物理的に接続します。IDEの場合は同一バスにつないではいけません。こうやってしまうと障害時に無停止で交換することができなくなります。

ちなみにこうなりました。
ad0 がもともとの起動ディスク。ad2 が追加したディスクです。今回はたまたま起動ディスクと同じサイズのディスクを増設しましたが、より大きいものであればなんでも大丈夫です。IDEじゃなくてもいし。

inu# atacontrol list
ATA channel 0:
    Master:  ad0  ATA/ATAPI revision 7
    Slave:       no device present
ATA channel 1:
    Master:  ad2  ATA/ATAPI revision 7
    Slave:       no device present

それから、この処理は既にマウントされたドライブに対しては行えないため、インストールCDなどで起動してやる必要があります。
僕はたまたま一番先に目に止まったので、FreeNASのインストールCDでやりました。

CDから起動させたらshellが使える状態にして、

> gmirror load
> gmirror label -b round-robin gm0 ad0
っとやると、ad0がgmirror(/dev/mirror/gm0)なドライブとして使えるよう、ケツの部分に何かが書き込まれます。データへのアクセス方法はいくらか選択肢があって、今回はラウンドロビンを指定してあります。何がいいかは用途次第ですね。

次に、既存システムがad0をgmirrorなドライブだと認識するように設定します。

  • 起動時にgmirrorをロードするように設定。
    /boot/loader.conf に geom_mirror_load="YES" を追加。

  • fstabを編集して、ad0でマウントしていたのをgm0でマウントするようにする。
    /dev/ad0s1a ⇒ /dev/mirror/gm0s1a など。

CDから起動すると使い慣れたエディタが使えないので、予めやっておくのがいいかもしれない...。

ここまでできたら通常通り再起動 :) 手際よくやれば15分くらいの停止で済みます。

2台目のディスクを追加

無事に起動できると、ディスク1台構成のgmirrorで上がってきます。
1台じゃgmirrorしてる意味がないので、2台目を追加します。最初にやってしまってもいいんだけど、それだけ停止時間が長くなるので、後からやる方がいいですね。

> gmirror insert gm0 ad2

あとはリビルドが終わるのを待つだけです。放置でOKです。普通にサービスを提供しながら、裏でビルドしてくれます。
> gmirror list
> gmirror status
なんかで確認すべし。

inu# gmirror list
Geom name: gm0
State: COMPLETE
Components: 2
Balance: round-robin
Slice: 4096
Flags: NONE
GenID: 0
SyncID: 1
ID: 476227944
Providers:
1. Name: mirror/gm0
   Mediasize: 81964301824 (76G)
   Sectorsize: 512
   Mode: r2w2e2
Consumers:
1. Name: ad0
   Mediasize: 81964302336 (76G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 418770585
2. Name: ad2
   Mediasize: 81964302336 (76G)
   Sectorsize: 512
   Mode: r1w1e1
   State: ACTIVE
   Priority: 0
   Flags: NONE
   GenID: 0
   SyncID: 1
   ID: 2587817517

障害を検知せよ

ありがちなんだけど、ミラー化したってディスクに障害が起きていることに気が付かなければ意味がありません。ハードウェアRAIDと違ってLEDやブザーで警告してくれるわけではないので、何か仕掛けを用意します。
1日1回、gmirror status の状態を拾って、異常だったらメールで通知するとか、そんなものがいいでしょうか。

障害が起きたときの対処についてはまた今度^^

2008-4-19追記

実際にディスクが壊れました。リビルドの記録はこちらをどうぞ :)

トピック

トラックバック

このエントリーのトラックバックURL:

コメント

コメントフォームに記入し投稿してください

初コメントのときは、このてらかどの承認が必要になります。承認されるまでコメントは表示されません。そのときはしばらく待ってください :)





Recent Entries
Archives
Feed
Search

Powered by

Valid CSS!