tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

SVM によるミラーの作成 SPARC 版

自分用メモ。SPARC マシンでは完全なログをとってなかったので。

See Also:

今回の対象マシン

Sun Fire V120(34GB SCSIディスクx2)

ディスク バイス
ディスク1 c0t0d0
ディスク2 c0t1d0
状態データベース用のパーティションの確認

まず、状態データベースに利用するパーティションを確認します。
format コマンドか prtvtoc を使います。

マウントしているパーティションに format コマンドを使うと警告が出るので、ここでは prtvtoc を利用します。

# prtvtoc /dev/rdsk/c0t0d0s2
** /dev/rdsk/c0t0d0s2 partition map
*
** Dimensions:
**     512 bytes/sector
**     107 sectors/track
**      27 tracks/cylinder
**    2889 sectors/cylinder
**   24622 cylinders
**   24620 accessible cylinders
*
** Flags:
**   1: unmountable
**  10: read-only
*
**                          First     Sector    Last
** Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
       0      2    00          0  66406554  66406553   /
       1      3    01   66406554   4194828  70601381
       2      5    00          0  71127180  71127179
       7      0    00   70601382    525798  71127179

パーティション7(約256M)を状態データベースに使います。ホントはこんなに容量とらなくても大丈夫

もう一方のディスクも確認します。以前にセットアップしたパーティション情報が残っているのが分かります。

# prtvtoc /dev/rdsk/c0t1d0s2
** /dev/rdsk/c0t1d0s2 partition map
*
** Dimensions:
**     512 bytes/sector
**     107 sectors/track
**      27 tracks/cylinder
**    2889 sectors/cylinder
**   24622 cylinders
**   24620 accessible cylinders
*
** Flags:
**   1: unmountable
**  10: read-only
*
**                          First     Sector    Last
** Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
       0      2    00          0    525798    525797
       1      3    01     525798   4194828   4720625
       2      5    01          0  71127180  71127179
       3      0    00   71098290     28890  71127179
       4      0    00    4720626   4194828   8915453
       5      7    00    8915454   8389656  17305109
       6      4    00   17305110   8389656  25694765
       7      8    00   25694766  45403524  71098289
パーティション情報のコピー

パーティション情報をコピーします。

# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2

コピーしたパーティションを確認します。

# prtvtoc /dev/rdsk/c0t1d0s2
** /dev/rdsk/c0t1d0s2 partition map
*
** Dimensions:
**     512 bytes/sector
**     107 sectors/track
**      27 tracks/cylinder
**    2889 sectors/cylinder
**   24622 cylinders
**   24620 accessible cylinders
*
** Flags:
**   1: unmountable
**  10: read-only
*
**                          First     Sector    Last
** Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
       0      2    00          0  66406554  66406553   /
       1      3    01   66406554   4194828  70601381
       2      5    00          0  71127180  71127179
       7      0    00   70601382    525798  71127179

c0t0d0 と同じパーティション構成になりました。

状態データベースの作成

それぞれのディスクに 2 個ずつ状態データベースを作成します。

# metadb -af -c 2 /dev/dsk/c0t0d0s7
# metadb -af -c 2 /dev/dsk/c0t1d0s7

作成した状態データベースを確認します

# metadb
        flags           first blk       block count
     a        u         16              8192            /dev/dsk/c0t0d0s7
     a        u         8208            8192            /dev/dsk/c0t0d0s7
     a        u         16              8192            /dev/dsk/c0t1d0s7
     a        u         8208            8192            /dev/dsk/c0t1d0s7
ミラー構成の概要

下記のような構成でミラーを作成します。

バイス 物理デバイス 説明
d0 - / のミラー(本体)
d10 /dev/dsk/c0t0d0s0 / のサブミラー
d20 /dev/dsk/c0t1d0s0 / のサブミラー
バイス 物理デバイス 説明
d1 - スワップのミラー(本体)
d11 /dev/dsk/c0t0d0s1 スワップのサブミラー
d21 /dev/dsk/c0t1d0s1 スワップのサブミラー
1面ミラーの作成(ルートデバイス)

まず片面を SVM の管理下に入れます。d0 の下に d10 が入ります。また、d20 も作成します。(d0 の配下にはまだ入れない)

まず、d10 を作成します。

# metainit -f d10 1 1 /dev/dsk/c0t0d0s0
d10: Concat/Stripe is setup

同様に d20 を作成します

# metainit -f d20 1 1 /dev/dsk/c0t1d0s0
d20: Concat/Stripe is setup

d10 を d0 のサブミラーとして設定します。

# metainit -f d0 -m d10
d0: Mirror is setup
1面ミラーの作成(swapデバイス)

swap も SVM の管理下に入れます。d1 の下に d11 が入ります。d21 の作成も行います(d1 の配下にはまだ入れない)

# metainit -f d11 1 1 /dev/dsk/c0t0d0s1
d11: Concat/Stripe is setup
# metainit -f d21 1 1 /dev/dsk/c0t1d0s1
d21: Concat/Stripe is setup
# metainit -f d1 -m d11
d1: Mirror is setup
metaroot の実施

metaroot コマンドを実行します。これでメタデバイスからブートできるようになります。

# metaroot d0

確認すると、「/」がメタデバイス経由になっていることが分かります。

# cat /etc/vfstab
#device         device          mount           FS      fsck    mount   mount
#to mount       to fsck         point           type    pass    at boot options
#
fd      -       /dev/fd fd      -       no      -
/proc   -       /proc   proc    -       no      -
/dev/dsk/c0t0d0s1       -       -       swap    -       no      -
/dev/md/dsk/d0  /dev/md/rdsk/d0 /       ufs     1       no      -
/devices        -       /devices        devfs   -       no      -
ctfs    -       /system/contract        ctfs    -       no      -
objfs   -       /system/object  objfs   -       no      -
swap    -       /tmp    tmpfs   -       yes     -
確認

metastat コマンドで、ミラーとサブミラーがきちんと作成されていることを確認します。

# metastat
d1: Mirror
    Submirror 0: d11
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 4194828 blocks (2.0 GB)

d11: Submirror of d1
    State: Okay
    Size: 4194828 blocks (2.0 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s1          0     No            Okay   Yes

d0: Mirror
    Submirror 0: d10
      State: Okay
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 66406554 blocks (31 GB)

d10: Submirror of d0
    State: Okay
    Size: 66406554 blocks (31 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s0          0     No            Okay   Yes

d21: Concat/Stripe
    Size: 4194828 blocks (2.0 GB)
    Stripe 0:
        Device     Start Block  Dbase   Reloc
        c0t1d0s1          0     No      Yes

d20: Concat/Stripe
    Size: 66406554 blocks (31 GB)
    Stripe 0:
        Device     Start Block  Dbase   Reloc
        c0t1d0s0          0     No      Yes

Device Relocation Information:
Device   Reloc  Device ID
c0t1d0   Yes    id1,sd@SSEAGATE_ST336607LSUN36G_3JA0DPAY0000731870AE
c0t0d0   Yes    id1,sd@SSEAGATE_ST336607LSUN36G_3JA0CSXE00002318X0QE
スワップのメタデバイス

先ほどの vfstab の内容では、swap は引き続き c0t0d0s1 を使っています。これも d1 を使うように変更します。

# vi /etc/vfstab

#device         device          mount           FS      fsck    mount   mount
#to mount       to fsck         point           type    pass    at boot options
#
fd      -       /dev/fd fd      -       no      -
/proc   -       /proc   proc    -       no      -
#/dev/dsk/c0t0d0s1      -       -       swap    -       no      -
dev/md/dsk/d1  -       -       swap    -       no      -
/dev/md/dsk/d0  /dev/md/rdsk/d0 /       ufs     1       no      -
/devices        -       /devices        devfs   -       no      -
ctfs    -       /system/contract        ctfs    -       no      -
objfs   -       /system/object  objfs   -       no      -
swap    -       /tmp    tmpfs   -       yes     -
再起動

作成したメタデバイスから起動するため、再起動します。

# init 6
2 面ミラーの作成

もう片方のディスクもミラーに組み込みます。metattach コマンドを使います。

まず、d20 を d0 の配下に入れます。

# metattach d0 d20
d0: submirror d20 is attached

次に、d21 を d1 の配下に入れます。

# metattach d1 d21
d1: submirror d21 is attached

metastat コマンドで確認します。

# metastat
d1: Mirror
    Submirror 0: d11
      State: Okay
    Submirror 1: d21
      State: Resyncing
    Resync in progress: 0 % done
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 4194828 blocks (2.0 GB)

d11: Submirror of d1
    State: Okay
    Size: 4194828 blocks (2.0 GB)
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s1          0     No            Okay   Yes

d21: Submirror of d1
    State: Resyncing
    Size: 4194828 blocks (2.0 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t1d0s1          0     No            Okay   Yes

d0: Mirror
    Submirror 0: d10
      State: Okay
    Submirror 1: d20
      State: Resyncing
    Resync in progress: 0 % done
    Pass: 1
    Read option: roundrobin (default)
    Write option: parallel (default)
    Size: 66406554 blocks (31 GB)

d10: Submirror of d0
    State: Okay
    Size: 66406554 blocks (31 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t0d0s0          0     No            Okay   Yes

 d20: Submirror of d0
    State: Resyncing
    Size: 66406554 blocks (31 GB)
    Stripe 0:
        Device     Start Block  Dbase        State Reloc Hot Spare
        c0t1d0s0          0     No            Okay   Yes

Device Relocation Information:
Device   Reloc  Device ID
c0t1d0   Yes    id1,sd@SSEAGATE_ST336607LSUN36G_3JA0DPAY0000731870AE
c0t0d0   Yes    id1,sd@SSEAGATE_ST336607LSUN36G_3JA0CSXE00002318X0QE

先ほど管理下に入れた d21, d20 の 「Submirror」 の「State」が Resyncing になっています。Resync が終わると、「State」が「Okay」になり、「Resync in progress: XX % done」が表示されなくなります。

OBP の ブートデバイス追加

現状では OBP のブートデバイスは「disk net」となっているので、ディスク2 からブートできません。ディスク2 を OBP に追加します。

まず、disk2 の物理デバイス名を確認します。

# ls -l /dev/dsk/c0t1d0s0
lrwxrwxrwx   1 root     root          44 Oct 23 11:54 /dev/dsk/c0t1d0s0 -> ../../devices/pci@1f,0/pci@1/scsi@8/sd@1,0:a

この結果から得られたデバイス名の sd を disk に置き換えます。つまり、
/pci@1f,0/pci@1/scsi@8/disk@1,0:a
となります。(「:a」はあっても無くても可)

このデバイス名を OBP に登録します。まず、PROM モードに入ります。

init 0
...
ok

nvalias コマンドで先ほどのデバイス名を登録します。名前は disk2 とします。

ok nvalias disk2 /pci@1f,0/pci@1/scsi@8/disk@1,0:a

disk2 も boot-device に加えます。

ok setenv boot-device disk disk2 net

disk2 で起動してみて、起動できるか確認します。

ok boot disk2
...

起動できれば問題ありません。念のため、起動したら再起動して、disk1 から起動します。

# init 6