2011.03.02
スライス単位でのgmirror・・・(FreeBSD)
以前に250GBのHDD2台を用いてgmirrorの構成をとろうとした時、最初にFreeBSDをインストールしたHDDより、ミラーの構成を組もうとする2台目のHDDの方が、数セクター小さく、ミラーに組み込もうとしたときに拒絶された。そこで、再度容量の小さい方のHDDにインストールし直す羽目に陥ってしまった。
しかし、今日FreeBSDのMLで、詳しい人からスライス単位でもgmirrorが構成できることを教えてもらい、VMwareを用いて実験したので、以下にその方法を記述しておくことにした。
要点は、HDD2台でミラーを組むとき、最初にFreeBSDをインストールするHDDのfdiskによるパーティションを2台目のHDDのボリューム全体容量より、少し小さく設定しておくことが肝要である。
なお、HDDの容量を正確につかむには、diskinfoコマンドを使用する。
# diskinfo -v ad4 ・・・・ad4を調べる場合
1. 準備とFreeBSDインストール
VMwareでad0(20GB)とad2(15GB)の2つの仮想HDDを確保し(ad0 > ad2に注意)、fdiskでad0に12GBの領域(パーティション)を確保してFreeBSD 8.1のCDを 用いてad0にインストールを行った。
2. Livefs CDを用いてgmirrorを設定
(#Fixitのブロンプトを出すまでは、FreeBSDでRAID1(mirror)の設定を参照)
以下のように設定する。gm0s1、ad0s1とスライスで指定するのが、ボリューム全体のミラーと異なる。
なお、Livefs CDを用いない方法でも試みたがうまくgmirrorを構成できなかった。
Fixit# chroot /dist Fixit# kldload geom_mirror ← gmirrorのload Fixit# exit Fixit# gmirror label -b round-robin gm0s1 ad0s1 ← round-robinでスライスレベルでmirrorを構成
Statusを表示してみると、下記のように表示され、スライスレベルでmirror機能が出来ている。
Fixit# gmirror status Name Status Components mirror/gm0s1 COMPLETE ad0s1
3. /etc/rc.conf、/etc/fstab、/boot/loader.confの修正
(1) /etc/rc.confにswapoff=”YES”の1行を追加
(2) /etc/fstabをviで開き、ad0 → mirror/gm0に変更
例)/dev/ad0s1a → /dev/mirror/gm0s1a
/dev/ad0s1d → /dev/mirror/gmos1d
vi でfstabを開いて
:%s/ad0/mirror\/gmo/ として一括して変更して保存するのが便利である。
(3) /boot/loaderconfにgeom_mirror_load=”YES” の1行を追加する。そして、shutdownして、HDDから普通に起動。
4. 起動
起動したらsysinstallで configure → fdiskでad2を選び、ボリューム全体(少なくともad0s1で確保したより大きく)をfreebsdパーティションとして確保する。今回の実験ではad2にはボリューム全体の15GBを割り付けた。確保したら、”w”キーを押してスライス情報を書き込む。
5. ad2s1の追加
# gmirror insert gm0s1 ad2s1
これで、同期化が始まる、statusを見ると、
# gmirror status Name Status Components mirror/gm0s1 DEGRADED ad0s1 ad2s1(2%)
しばらくして、gmirrorの同期が完了する。
swapinfoコマンドでswap領域を見ると、これも無事確保されている。
# swapinfo Device 1K-blocks Used Avail Capacity /dev/mirror/gm0s1b 490304 0 490304 0%
完了の後、ad0を取り除いてad2だけでも無事起動することを確認した。