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