Solaris8のSun DiskSuiteでシステムディスクをミラーリングする
Solaris8には標準でソフトウェアRAIDを行なうソフトウェアが含まれています。
この機能を使って、システムディスクをミラーリングしてみます。
標準ではインストールされないので、あらかじめSoftware 2/2のCD-ROMからインストールしておきます。
concatenation, striping, mirroringなどが構成できます。
詳細はmetainit(1M)のmanを参照すると詳しくかかれています。
ミラーリングする先のディスクはあらかじめ同じパーテーションを切っておき
ます。
状態データベース用に20MB程度の領域を確保しておきます。
Part Tag Flag Cylinders Size Blocks
0 root wm 223 - 1119 2.02GB (897/0/0) 4226664
1 swap wu 0 - 204 471.66MB (205/0/0) 965960
2 backup wm 0 - 7505 16.86GB (7506/0/0) 35368272
3 unassigned wm 0 0 (0/0/0) 0
4 unassigned wm 205 - 222 41.41MB (18/0/0) 84816
5 unassigned wm 0 0 (0/0/0) 0
6 usr wm 1120 - 7505 14.35GB (6386/0/0) 30090832
7 unassigned wm 0 0 (0/0/0) 0
例ではswapを削ってパーテーション4にデータベース用の領域を取っています。
まずmetadbコマンドで状態データベースをつくります。
障害時metadbの正当性を判断するために多数決アルゴリズムを使用するためmetadbは最低3つ以上必要です。
2つの領域に2つづつ、計4つのデータベースを作成した。
例ではc0t0d0をc0t1d0にミラーします。
# metadb -a -f -c 2 c0t0d0s4 c0t1d0s4
# metadb
flags first blk block count
a u 16 1034 /dev/dsk/c0t0d0s4
a u 1050 1034 /dev/dsk/c0t0d0s4
a u 16 1034 /dev/dsk/c0t1d0s4
a u 1050 1034 /dev/dsk/c0t1d0s4
metainitコマンドを用いメタデバイスを作成します。
# metainit -f d10 1 1 c0t0d0s0
d10: Concat/Stripe is setup
# metainit d20 1 1 c0t0d0s6
d20: Concat/Stripe is setup
# metainit d11 1 1 c0t1d0s0
d11: Concat/Stripe is setup
# metainit d21 1 1 c0t1d0s6
d21: Concat/Stripe is setup
ミラーリングの設定をします。metainitでマスター側を宣言し、metattachでミラー先をattachします。
# metainit d1 -m d10
d1: Mirror is setup
# metainit d2 -m d20
d2: Mirror is setup
# metattach d1 d11
d1: submirror d11 is attached
# metattach d2 d21
d2: submirror d21 is attached
# metaroot d1
metastatコマンドで設定と、同期を始めている様子を確認する。
# metastat
d1: Mirror
Submirror 0: d10
State: Okay
Submirror 1: d11
State: Resyncing
Resync in progress: 41 % done
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 4226664 blocks
d10: Submirror of d1
State: Okay
Size: 4226664 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c0t0d0s0 0 No Okay
d11: Submirror of d1
State: Resyncing
Size: 4226664 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c0t1d0s0 0 No Okay
d2: Mirror
Submirror 0: d20
State: Okay
Submirror 1: d21
State: Resyncing
Resync in progress: 33 % done
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 30090832 blocks
d20: Submirror of d2
State: Okay
Size: 30090832 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c0t0d0s6 0 No Okay
d21: Submirror of d2
State: Resyncing
Size: 30090832 blocks
Stripe 0:
Device Start Block Dbase State Hot Spare
c0t1d0s6 0 No Okay
/etc/vfstabをメタデバイスをマウントするように書き換える。
/proc - /proc proc - no -
/dev/dsk/c0t0d0s1 - - swap - no -
/dev/dsk/c0t1d0s1 - - swap - no -
/dev/md/dsk/d1 /dev/md/rdsk/d1 / ufs 1 no -
/dev/md/dsk/d2 /dev/md/rdsk/d2 /usr ufs 1 no -
swap - /tmp tmpfs - yes -
リブートするとこのとおり。
# df
/ (/dev/md/dsk/d1 ): 3221614 blocks 318505 files
/usr (/dev/md/dsk/d2 ):27546674 blocks 1762022 files
/proc (/proc ): 0 blocks 3858 files
/dev/fd (fd ): 0 blocks 0 files
/etc/mnttab (mnttab ): 0 blocks 0 files
/var/run (swap ): 1310640 blocks 26207 files
/tmp (swap ): 1310640 blocks 26207 files
swapデバイスはミラーしてもしょうがないので、swap -aで追加のswap領域にします。
# swap -a /dev/dsk/c0t1d0s1
# swap -l
swapfile dev swaplo blocks free
/dev/dsk/c0t0d0s1 32,1 16 965936 965936
/dev/dsk/c0t1d0s1 32,9 16 965936 965936