ソフトウェアRAID1(ミラーリング)をするためのアプリケーションです。 5.3-RELEASE では vinum は kernel panic を起こしましたが、 gmirror ならうまく動くようです。 disklabel をいじらなくてもいいので、設定も vinum より簡単です。
ここでは、個人用のホームディレクトリバックアップ用のディスクを ミラーすることを考えます。 ブートできるディスクをミラーするときは、 そのうちの一つが起動中のときは設定をできないので、 フロッピーブートをしてから設定するなどの工夫をする必要があります。
参考サイト
2台のハードディスクがあって、 デバイス名が /dev/da0 と /dev/da1 となっているとします。 これらはすでに Fdisk,disklabel,newfs などを済ませてあるとします。 そして、パーティション /dev/da0c と /dev/da1c をミラーリングするための 設定をしましょう。
- モジュールを起動する
-v は詳細表示のためのオプション。 起動時に自動的にモジュールを起動したい場合は、/boot/loader.conf に
# gmirror load -v
Module available
Done
と書いておく。再起動時も panic しない!(重要)
geom_mirror_load="YES"
- モジュールの確認
geom_mirror.ko が動いていればOK。
# kldstat Id Refs Address Size Name 1 6 0xc0400000 5dde24 kernel 2 1 0xc09de000 128c8 geom_mirror.ko
- ミラーで参照するデバイスを作る
-b split は読み込み時にディスクを分けて読み込むオプションです。
# gmirror label -v -b split mrr /dev/da0c
Metadata value stored on /dev/da0c.
Done
赤字で書いてあるところは 好きに変更してください。今の場合は、ミラーで作ったデバイス名は /dev/mirror/mrr となります。注意 ここで指定したデバイス(今は da0c)がミラーのマスターになり、 他のミラーディスクと同期するときは、 マスターから他のディスクへとデータが流れます。 なお、ミラーに参加させたディスクは元のデバイス名 (da0c)ではマウントできなくなります。
- ミラーのもう一面のディスクを追加する
これで設定は終了です。 バックグラウンドで同期をやっているので様子を見てみましょう。
# gmirror insert -v mrr /dev/da1c
- 状態を確認する
DEGRADED や 0%となっているのは、同期がまだ 0% ということです。 時間の経過と共に数字が上がって来ます。 より詳しい情報は、list で見ます。
# gmirror status Name Status Components mirror/mrr DEGRADED da0c da1c (0%)da1c の方が Flags: DIRTY, SYNCHRONIZING とあるのは、 同期中だからです。
# gmirror list Geom name: mrr State: DEGRADED Components: 2 Balance: split Slice: 4096 Flags: NONE GenID: 0 SyncID: 1 ID: 2881096526 Providers: 1. Name: mirror/mrr Mediasize: 62914559488 (59G) Sectorsize: 512 Mode: r1w0e0 Consumers: 1. Name: da0c Mediasize: 62914560000 (59G) Sectorsize: 512 Mode: r1w1e1 State: ACTIVE Priority: 0 Flags: NONE GenID: 0 SyncID: 1 ID: 3747294674 2. Name: da1c Mediasize: 62914560000 (59G) Sectorsize: 512 Mode: r1w1e1 State: SYNCHRONIZING Priority: 0 Flags: DIRTY, SYNCHRONIZING GenID: 0 SyncID: 1 Synchronized: 0% ID: 3152481466
- マウントしてみる
同期が完了してなくてもマウントはできます。これで /mnt にアクセスすると、2台のハードディスクが同時に反応します。
# mount /dev/mirror/mrr /mnt
- 同期が完了したら
# gmirror status Name Status Components mirror/mrr COMPLETE da0c da1c
gmirror にはいろいろなサブコマンドがあります。 下で name と書いてあるのはミラーの名前(上の例では mrr)で、 prov とあるのはディスクのデバイス名です。 オンラインマニュアルの書き方に則りました。 デバイス名では /dev/da0 などを省略して da0 と書いても構いません。なお、providers とはミラー(上の例では mrr)のことで、 consumers とはミラーに参加しているディスク/パーティションのことです。 上では prov でディスクを表すと言ってるのにややこしいです。
なお、サブコマンド共通オプションとして詳細な情報を表示するための -v があります。
サブコマンド 説明 status ミラーの状態を見る。 label name prov ミラーを作成する。オプションあり。 新しい insert name prov ミラーにディスクを追加する。オプションあり。 list providersとconsumersの情報を出す。 stop name name を止める。 activate name prov name prov を動かす。 deactivate name prov name prov を止める。 forget name name に参加してるが接続されてない prov を無視する。 rebuild name prov name prov をミラーに同期させる clear prov prov に関する metadata を消去する。 remove name prov name prov に関する metadata を消去する。 stop でミラーを止めれば /dev/da0c や /dev/da1c は通常通りマウントできます。
片肺が壊れても、残りの片肺からデータを吸い上げるのは簡単ですね。 再びミラーを動かすときは、activate して、 どちらかを(例えば da1c を da0cに)同期させたいときは rebuild します。
# gmirror stop mrr
# mount /dev/da0c /mnt
# gmirror activate mrr da0c
# gmirror activate mrr da1c
# gmirror rebuild mrr da1c
例えば、da0c と da1c のうち、da1c が壊れたとしましょう。 このときは、forget コマンドで壊れたディスクのことを一旦忘れさせて、 新しいディスクを認識、format した上で新たにミラーに組み込んでやります。
# gmirror forget mrr
(壊れたディスクと新しいディスクを交換)
(新しいディスクをフォーマット)
(新しいディスクが再び da1c となっていれば)
# gmirror insert mrr da1c