OpenSolarisでrpoolをミラー構成にして、ホットスワップを試す
OpensSolarisは現時点(2009.06版)ではインストール時にディスクの構成をあれこれいじることができない。やり方があるのかもしれないけど、少なくともオーソドックスなGUIインストールではできない。デフォルトのシステムストレージプールであるrpoolはディスク全部かスライスかしか選べないんだけど、これではストレージとして運用するには心もとないので、RAIDでミラー構成にしたい、ということで挑戦した。
当然こういう要求はあるわけで、以下のサイトを参考にして試してみた。
参考にしたサイト
rpoolのミラー化
まずデバイスについて調べる。今回の環境は以下の通り。
# format Searching for disks...done AVAILABLE DISK SELECTIONS: 0. c7t0d0/pci@0,0/pci1002,4391@11/disk@0,0 1. c7t1d0 /pci@0,0/pci1002,4391@11/disk@1,0
c7t0d0にrpoolが構成されており、これをc7t1d0にミラーリングする。
ディスクのスライス設定する。format→fdiskでsolarisパーティションの作成。ディスクのサイズが同じなので、100%すべて割り当てる。
次にラベルの付与。format -e c7t1d0を実行し、label→0と実行してSMIラベルの付与。通常デフォルトでSMIラベルになっているのかな。
次にc7t1d0のスライスの設定を行う。formatコマンドから手動で設定してもいいんだけど、これはコマンド一発で行える。便利\(^-^)/
# prtvtoc /dev/rdsk/c7t0d0s0 | fmthard -s - /dev/rdsk/c7t1d0s0
ここまできたら後は簡単。rpoolに追加する。
# zpool attach -f rpool c7t0d0s0 c7t1d0s0
EFIがどうとかいうエラーがでてうまくいかない場合は一度再起動してみるとOK。
最後にgrubのインストール。
# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c7t1d0s0
自動で同期がとられるのでステータスで確認する。以下は同期中の様子。
zpool status rpool pool: rpool state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress for 0h23m, 70.08% done, 0h10m to go config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 mirror ONLINE 0 0 0 c7t0d0s0 ONLINE 0 0 0 c7t1d0s0 ONLINE 0 0 0 3.48G resilvered errors: No known data errors
これで片方が死んでも片肺運転が可能になる。
ホットスワップ
OpenSolarisでSATAデバイスでもホットスワップは可能。というかこれができないとiSCSIストレージにできないわけです。実験したら思ったより手順はそんなに難しくなかった。以下を参考にしました。
SATAの規格として2.0でAHCI(Advanced Host Controller Interface)が策定されて、NCQやホットスワップが可能になったわけだけど、ホットスワップを行うにはBIOSでIDE互換モードではなくAHCIモードで動かさなければならない。以下の手順はIDE互換モードだとできないので注意。
今回は、rpoolのデバイスc7t1d0をオンライン状態でc7t2d0につなぎ変えるテストを実行。
まずはデバイスの状態を確認。
# cfgadm Ap_Id Type Receptacle Occupant Condition sata1/0::dsk/c7t0d0 disk connected configured ok sata1/1::dsk/c7t1d0 disk connected configured ok sata1/2 sata-port empty unconfigured ok sata1/3 sata-port empty unconfigured ok sata1/4 sata-port empty unconfigured ok sata1/5 sata-port empty unconfigured ok
ここでAHCIモードになっていないとSATAの一覧が出てこないのでこの時点で無理になる。
ストレージプールで使用されているデバイスはこのままでは切り離せないので一度offlineにする。
# zpool offline rpool c7t1d0
そしてデバイスを切り離す。
# cfgadm -c unconfigure sata1/1::dsk/c7t1d0 # cfgadm Ap_Id Type Receptacle Occupant Condition sata1/0::dsk/c7t0d0 disk connected configured ok sata1/1 disk connected unconfigured ok sata1/2 sata-port empty unconfigured ok sata1/3 sata-port empty unconfigured ok sata1/4 sata-port empty unconfigured ok sata1/5 sata-port empty unconfigured ok
ここでsata1/1がunconfiguredになっていることに注目。そしてデバイスを取り替えると
# cfgadm Ap_Id Type Receptacle Occupant Condition sata1/0::dsk/c7t0d0 disk connected configured ok sata1/1 sata-port empty unconfigured ok sata1/2 disk connected unconfigured unknown sata1/3 sata-port empty unconfigured ok sata1/4 sata-port empty unconfigured ok sata1/5 sata-port empty unconfigured ok
となる。unconfigured unknownになっている。
あとはコマンドでディスクを再認識させてあげればよい。
# cfgadm -c configure sata1/2 # cfgadm Ap_Id Type Receptacle Occupant Condition sata1/0::dsk/c7t0d0 disk connected configured ok sata1/1 sata-port empty unconfigured ok sata1/2::dsk/c7t2d0 disk connected configured ok sata1/3 sata-port empty unconfigured ok sata1/4 sata-port empty unconfigured ok sata1/5 sata-port empty unconfigured ok
今回はSATAポートを移動させただけなのでこの時点で勝手に同期も始まった。手間がなかったが、rpoolのデバイスの場合新規デバイスと交換する時はミラーの設定が必要かな?今度試してみよう。