Solaris RAIDめも


※この設定は間違っています。正確なのは下に。
slice c0t0d0 c0t1d0 mirrordev mountpoint
0 d00 d01 d0 /
1 d10 d11 d1 swap
4 d40 d41 d4 /var
5 d50 d51 d5 /export/home
6 d60 d61 d6 /usr
metaclear メタデバイスを解除(削除) ex. metaclear d61
※/usr:6番目のスライスからミラーを設定する(/とswapは若干特殊なので最後に)
# metainit -f d60 1 1 c0t0d0s6 1台目HDD6番目スライスをメタデバイスd60にセット(-fはforce)
# metainit d6 -m d60 メタデバイスd60をd6のsub-mirror化
# metainit d61 1 1 c0t1d0s6 2台目HDD6番スライスをメタデバイスd61にセット
※2台目のHDDをくっつける(metattach)は上記の内容が全部のスライス分終わって再起動した後に行う。
ルートのスライスをメタデバイス化しようとして
# metainit -f d00 1 1 c0t0d0s0としたら
metainit: hoge: d00: No such file or directory
とか言われたよ?
# metainit -f d99 1 1 c0t0d0s0 だと普通にできるのになんでだろー
※hataの話だとd00とd01はダメらしい。d0-d127までしか使えないようだ。ひどぃ。がしかしここを見るとd00とd01も使ってる模様。どうなってるのさ!
とか言って/dev/md/dskとか/dev/md/rdskを見ると確かにd0からd127までしかないな。うむ。
まぁどうしようもないので以下のように変更する

slice c0t0d0 c0t1d0 mirrordev mountpoint
0 d10 d11 d1 /
1 d20 d21 d2 swap
4 d50 d51 d5 /var
5 d60 d61 d6 /export/home
6 d70 d71 d7 /usr
ミラー化する前の段階の # metastat

bash-2.05# metastat
d7: Mirror
Submirror 0: d70
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 16388336 blocks (7.8 GB)

d70: Submirror of d7
State: Okay
Size: 16388336 blocks (7.8 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c0t0d0s6 0 No Okay Yes


d6: Mirror
Submirror 0: d60
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 12486800 blocks (6.0 GB)

d60: Submirror of d6
State: Okay
Size: 12486800 blocks (6.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c0t0d0s5 0 No Okay Yes


d5: Mirror
Submirror 0: d50
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 4198392 blocks (2.0 GB)

d50: Submirror of d5
State: Okay
Size: 4198392 blocks (2.0 GB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c0t0d0s4 0 No Okay Yes


d2: Mirror
Submirror 0: d20
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 1050776 blocks (513 MB)

d20: Submirror of d2
State: Okay
Size: 1050776 blocks (513 MB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c0t0d0s1 0 No Okay Yes


d1: Mirror
Submirror 0: d10
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 1220408 blocks (595 MB)

d10: Submirror of d1
State: Okay
Size: 1220408 blocks (595 MB)
Stripe 0:
Device Start Block Dbase State Reloc Hot Spare
c0t0d0s0 0 No Okay Yes


d71: Concat/Stripe
Size: 16388336 blocks (7.8 GB)
Stripe 0:
Device Start Block Dbase Reloc
c0t1d0s6 0 No Yes

d61: Concat/Stripe
Size: 12486800 blocks (6.0 GB)
Stripe 0:
Device Start Block Dbase Reloc
c0t1d0s5 0 No Yes

d51: Concat/Stripe
Size: 4198392 blocks (2.0 GB)
Stripe 0:
Device Start Block Dbase Reloc
c0t1d0s4 0 No Yes

d21: Concat/Stripe
Size: 1050776 blocks (513 MB)
Stripe 0:
Device Start Block Dbase Reloc
c0t1d0s1 0 No Yes

d11: Concat/Stripe
Size: 1220408 blocks (595 MB)
Stripe 0:
Device Start Block Dbase Reloc
c0t1d0s0 0 No Yes

Device Relocation Information:
Device Reloc Device ID
c0t1d0 Yes id1,sd@SSEAGATE_ST318404LSUN18G_3BT0PNVS00002052CJZF
c0t0d0 Yes id1,sd@SSEAGATE_ST318404LSUN18G_3BT0RKDN0000210378EC
bash-2.05#


# metaroot d1
したら/etc/vfstabの中身を・・・なんか勝手に書き換わってるっぽい。便利なのかどうかよくわからず。
metarootを実行すると、/etc/vfstabの中身が以下のように勝手に書き換わっている(Solaris9の場合)

/dev/dsk/c0t0d0s0 /dev/rdsk/c0t0d0s0 / ufs 1 no -

/dev/md/dsk/d1 /dev/md/rdsk/d1 / ufs 1 no -
そしてreboot後に、

# metattach d1 d11
する事によりディスクの内容を同期開始。HDDのLEDがガチガチしてるはず。metastat等で見ると

d1: Mirror
Submirror 0: d10
State: Okay
Submirror 1: d11
State: Resyncing
Resync in progress: 53 % done
とかなってる。
続いてswapのミラー化だが、基本的にはあまり変わらない。
/etc/vfstab を編集し(これは手動で)

/dev/dsk/c0t0d0s1 - - swap - no - (修正前)

/dev/md/dsk/d2 - - swap - no -  (修正後)
ここらへんの内容はLinuxでソフトRAID作った経験があるならば別に問題無いと思う。そして、

# reboot
再起動後
# metattach d2 d21
これで完了。残りのスライスに関しては同じように/etc/vfstabの中を書き換えた後、

metattach dX dYY
としてやるだけ。念のために/etc/vfstabを。

fd - /dev/fd fd - no -
/proc - /proc proc - no -
/dev/md/dsk/d1 /dev/md/rdsk/d1 / ufs 1 no -
/dev/md/dsk/d2 - - swap - no -
/dev/md/dsk/d5 /dev/md/rdsk/d5 /var ufs 1 no -
/dev/md/dsk/d6 /dev/md/rdsk/d6 /export/home ufs 2 yes -
/dev/md/dsk/d7 /dev/md/rdsk/d7 /usr ufs 1 no -
swap - /tmp tmpfs - yes -
#/dev/dsk/c0t0d0s0 / ufs 1 no -
#/dev/dsk/c0t0d0s1 - - swap - no -
#/dev/dsk/c0t0d0s6 /dev/rdsk/c0t0d0s6 /usr ufs 1 no
-
#/dev/dsk/c0t0d0s4 /dev/rdsk/c0t0d0s4 /var ufs 1 no
-
#/dev/dsk/c0t0d0s5 /dev/rdsk/c0t0d0s5 /export/home ufs 2
yes -
※コメント行は変更前の物
あとは同じようにmetastatで見てやればどんどんResync in progressが進んでるはず。