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

これで片方が死んでも片肺運転が可能になる。

ホットスワップ

OpenSolarisSATAバイスでもホットスワップは可能。というかこれができないとiSCSIストレージにできないわけです。実験したら思ったより手順はそんなに難しくなかった。以下を参考にしました。

SATAの規格として2.0でAHCI(Advanced Host Controller Interface)が策定されて、NCQやホットスワップが可能になったわけだけど、ホットスワップを行うにはBIOSIDE互換モードではなく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のデバイスの場合新規デバイスと交換する時はミラーの設定が必要かな?今度試してみよう。