« | Home | »

2010.12.07

FreeBSDでRAID1(mirror)をLivefs CDなしで設置

既にLivefs CDを使って、gmirrorの設定を行う方法を書いた。このLivefs CDを使う方法が正当な方法と思える。
しかし、Livefs CDを使うことなく設定する方法をNetで見つけ、試したところ無事設定出来たので、ここに書いておくことにした。
前提条件として、FreeBSDがインストールされているHDDは/dev/ad4で、設定終了後にHDDを追加してミラー化するものとする。また、gmirrorで設定するのはgm0の設定名とし、サーバーは通常に起動して動作中であるものとする。

注:

ATAインターフェイスのチャネル(ATA0, ATA1, ATA2・・・)単位でFreeBSDでは、attach/detachできるので、ミラー化するドライブ(ここでは、ad4とad6)は、HDD故障時の交換を考え、ATAインターフェイスのチャネルが異なるドライブの組み合わせにするのが望ましい。(例:ATA2 ← ad4, ATA3 ← ad6) (atacontrolで故障HDDの交換 を参照)

(1) /boot/loader.confに gmirrorの読み込みを設定する。

# vi /boot/loader.conf
geom_mirror_load="YES"   ← この行を追加

(2) /etc/fstabを編集する

# vi /etc/fstab
# Device                Mountpoint      FStype  Options        Dump    Pass#
/dev/ad4s1b              none             swap    sw                  0       0
/dev/ad4s1a              /                     ufs       rw                 1       1
/dev/ad4s1d              /backup          ufs     rw                   2       2
/dev/ad4s1e              /tmp               ufs     rw                   2       2
/dev/ad4s1f               /usr                 ufs     rw                   2       2
/dev/ad4s1g              /var                 ufs     rw                   2       2
/dev/ad4s1h              /web               ufs     rw                   2       2
/dev/acd0                 /cdrom            cd9660  ro,noauto    0       0

viで開いた画面で、
:%s/ad4/mirror/gm0/
と、入力する。画面が次のように変わる。

# Device                          Mountpoint      FStype  Options       Dump    Pass#
/dev/mirror/gm0s1b              none            swap    sw                 0       0
/dev/mirror/gm0s1a              /                   ufs     rw                   1       1
/dev/mirror/gm0s1d              /backup        ufs     rw                   2       2
/dev/mirror/gm0s1e              /tmp             ufs     rw                   2       2
/dev/mirror/gm0s1f              /usr                ufs     rw                   2       2
/dev/mirror/gm0s1g              /var               ufs     rw                   2       2
/dev/mirror/gm0s1h              /web             ufs     rw                   2       2
/dev/acd0                             /cdrom          cd9660  ro,noauto    0       0

この内容を保存する。

(3) /etc/rc.confにswapoff=”YES”を追加する。

# echo 'swapoff="YES"' >> /etc/rc.conf

(4) kern.geom.debugflagsに16を書きこむ

# sysctl kern.geom.debugflags=16

この操作で、ブートしたHDDにメタデータが書き込めるようになる。

(5) gmirrorモジュールをload

# kldload geom_mirror

(6) /dev/ad4をmirror登録し、rebootする。

# gmirror label -b round-robin gm0 ad4
# reboot  ← そして、reboot

(7) 無事起動したらloginしてgmirrorのstatusを確認する。下記のようになれば成功である。

# gmirror status
Name    Status  Components
mirror/gm0  COMPLETE  ad4

(8) /dev/ad6が実装されているものとすると、これを追加してミラーを構成する。

# gmirror insert gm0 ad6

これで、同期化が始まる、statusを見ると、進行状態が%で示される。

# gmirror status
   Name     Status  Components
  mirror/gm0  DEGRADED    ad4
                  ad6(2%)

HDDの容量にもよるが、1時間程度でCOMPLETEDになり構成は完了する。

(9) ミラーの状態を毎日メールで知らせてもらうように設定

/etc/defaults/periodic.confをみると、下記のようにDaily check項目の406番が”NO”になっている。

# 406.status-gmirror
daily_status_gmirror_enable="NO"                # Check gmirror(8)

“NO”を”YES”に直しても良いのだが、/etc/defaults/rc.confの内容は直接には書き換えず、/etc/rc.confを作成して修正したい箇所のみを指定するのと同様に/etc/periodic.confを作って記述すべきとコメントでご指摘いただいた。

# cd /etc
# vi periodic.conf
daily_status_gmirror_enable="YES"
: wq

注意) もしmirrorの構成に失敗したら、このときはLivefs CDを使って元の状態に戻し、
   やり直す必要があるので、やはりLivefs CDは用意しておくべきであろう。

コメント

>/etc/defaults/periodic.confを編集して
そこはイジラずに /etc/periodic.conf に設定を書くのがいいですよ。

otsunaさん
コメント有難うございます。
otsunaさんとは、FreeBSDの版数が違うのでしょうか。
/etcにはperiodicというディレクトリーはありますが、periodic.confというファイルはありません。
やはり、/etc/defaults内のperiodic.confを編集でよいのではないでしょうか。

/etc/defaults/periodic.conf の最初の方や man 5 periodic.conf にも書いてありますが
# What files override these defaults ?
periodic_conf_files=”/etc/periodic.conf /etc/periodic.conf.local”
のファイルを作ってoverrideしろということですね。
(通常は /etc/periodic.conf に書いて、ホストlocalなのは*.localに書く)

otsuneさん
ご指摘ありがとうございます。
/etc/defaults/periodic.confの始めの説明に、ちゃんと書いてありますね。
説明も読まずに、設定していた不明を恥じるばかりです。

コメントフィードを購読する

コメント投稿





コメント本文に次の(X)HTMLタグを使えます:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*