solaris10  ソフトウエアRAID1(ミラーリング)の作成
solaris10で、ソフトウェアRAID1(ミラーリング)を行う。
なお、solaris9でも同様の手順となる。
■ solaris ボリュームマネージャの用語説明
solaris9および10のソフトウェアRAIDは、solarisボリュームマネージャというもので実現されている。
RAID-0(ストライプまたは連結)
RAID-0としては、ストライプボリューム、連結ボリューム、連結ストライプボリュームの3種類ある。
連結とは、複数のコンポーネント間でデータが順番に隣接して配置され、1 つの論理記憶ユニットを構成するボリュームのことである。
ストライプボリューム ・・・ たとえば3つのスライス(A、B、C)がある場合、データをA、B、Cの順番に書き込んでいく
連結ボリューム ・・・ たとえば3つのスライス(A、B、C)がある場合、データはAに対して書き込んでいき、AがいっぱいになるとBに書き込んでいく
連結ストライプボリューム ・・・ 複数のスライスをグループに分割し、グループ内ではストライプ、グループ間では連結を行う。
データは最初のグループの中でストライプにより書き込みを実施する。そのグループ内のスライスがデータで一杯になると、
次のグループへ書き込みを始める。
RAID-1(ミラー)
サブミラーと呼ばれる1つまたは複数のRAID-0ボリュームから構成される。
サブミラーは最大4つまで。
少なくとも1つのサブミラーが常時接続状態であれば、ほかのサブミラーをオフラインにすることができる。
サブミラーがオンラインに戻ると、SVMはオフライン中に書き込めなかったデータだけを書き込む(再同期)。
再同期は自動的に実行される。
インターレース値
ボリュームに書き込みをするデータサイズ
ストライプにおいては、インターレース幅のデータ単位で各スライスへ書き込みを行う
状態データベース
ボリュームマネージャ構成の状態に関する情報を格納するデータベースのこと
ボリュームマネージャは、構成または状態に変更があった場合は、自動的に状態データベースを更新する
状態データベースは、専用スライス上に作成する必要がある。 (もしくは、あとでボリュームの一部になるスライス上)


■ 作業中のサービスへの影響について
・ sshでサーバにログインをして作業をしたが、ssh切断はなかった。
・ 外部へのpingロス無し。(1秒間隔で実施)
・ CPU使用率は3%ほど下がった。
(データベース関係の影響確認は行っていないので不明)
■ 事前準備
・ Disk0には、solaris10がインストール済みでDisk0のみのシングル構成となっている。
・ Disk0には、状態データベースを保存する専用のスライスがある。
・ Disk1は、すでにDisk0と同じスライス構成、ファイルシステムの作成ができているものとする。
■ 今回作成するミラーリング構成


■ 手順詳細
 
1.状態データベースの作成
# metadb - 状態データベースの確認
metadb: solaris10: there are no existing databases 設定前なので無し
# metadb -i - 状態データベースの確認(詳細)
metadb: solaris10: there are no existing databases 設定前なので無し
# metastat - Solarisボリュームマネージャの状態を確認
metastat: solaris10: there are no existing databases 設定前なので無し
# metadb -a -f -c 3 c1t0d0s7 c1t1d0s7 - 状態データベースの作成
# [オプションの意味]
-a           状態データベースの作成
-f           強制的に実施
-c 3         状態データベースを3つ作る
c1t0d0s7 c1t1d0s7 状態データベースを格納するスライスを指定
# metadb
        flags           first blk       block count - 状態データベースの確認
     a        u         16              8192            /dev/dsk/c1t0d0s7 c1t0d0s7とc1t1d0s7に状態データベースが3つできていることを確認
     a        u         8208            8192            /dev/dsk/c1t0d0s7
     a        u         16400           8192            /dev/dsk/c1t0d0s7
     a        u         16              8192            /dev/dsk/c1t1d0s7
     a        u         8208            8192            /dev/dsk/c1t1d0s7
     a        u         16400           8192            /dev/dsk/c1t1d0s7
# metadb -i - 状態データベースの確認(詳細)
        flags           first blk       block count 上との違いは、説明が表示されるぐらい
     a        u         16              8192            /dev/dsk/c1t0d0s7
     a        u         8208            8192            /dev/dsk/c1t0d0s7
     a        u         16400           8192            /dev/dsk/c1t0d0s7
     a        u         16              8192            /dev/dsk/c1t1d0s7
     a        u         8208            8192            /dev/dsk/c1t1d0s7
     a        u         16400           8192            /dev/dsk/c1t1d0s7
 r - 複製にはデバイス再配置情報がありません
 o - 複製は最後の mddb 構成変更の前までアクティブでした
 u - 複製は最新です
 l - この複製のロケータは無事読み込まれました
 c - 複製の場所は /etc/lvm/mddb.cf です
 p - 複製の場所はカーネルにパッチされました
 m - 複製はマスターです。この複製は入力として選択されています
 W - 複製にはデバイス書き込みエラーがあります
 a - 複製はアクティブです。確定操作はこの複製に対して行われます
 M - 複製はマスターブロックで問題を起こしました
 D - 複製はデータブロックで問題を起こしました
 F - 複製はフォーマット問題を起こしました
 S - 複製は現在のデータベースを入れるには小さすぎます
 R - 複製はデバイス読み込みエラーを起こしました
# metastat - Solarisボリュームマネージャの状態を確認
# 設定前なので無し
2.ミラーの作成
今回は、最初にルートスライスのミラー化を実施後、残りのスライスのミラー化を行っている。
再起動を1回で済ませたいのであれば、全てのスライスのミラー化を一度にやっても問題はない。
# metainit -f d11 1 1 c1t0d0s0 - サブミラーの状態データベースへの登録
d11: 連結/ストライプがセットアップされます c1t0d0s0をd11として状態データベースに登録  1:1で連結
# マウント中のでデバイスであれば、 -f をつける
(コマンド処理を強制的に実行する)
# metainit -f d12 1 1 c1t1d0s0 - サブミラーの状態データベースへの登録
d12: 連結/ストライプがセットアップされます c1t1d0s0をd12として状態データベースに登録  1:1で連結
# こちらはマウントしていないので実際には -f はなくても大丈夫
# metainit d10 -m d11 - ミラーメタデバイスの作成とサブミラーの登録
d10: ミラーがセットアップされます d10をミラーメタデバイスとして作成し、サブミラーのd11を
# 最初に登録する
# metastat - Solarisボリュームマネージャの状態を確認
d10: ミラー d10がミラーとして認識され、サブミラーとしてd11が登録されている
    サブミラー 0: d11 状態が正常であること(英語表記ではOkey)を確認
      状態: 正常
    パス: 1
    読み込みオプション: roundrobin (デフォルト)
    書き込みオプション: parallel (デフォルト)
    サイズ: 25044741 ブロック (11 GB)
d11: d10 のサブミラー
    状態: 正常
    サイズ: 25044741 ブロック (11 GB)
    ストライプ 0:
        デバイス   開始ブロック Dbase         状態 Reloc ホットスペア
        c1t0d0s0          0     No            正常   Yes
d12: Concat/Stripe
    サイズ: 25044741 ブロック (11 GB)
    ストライプ 0:
        デバイス   開始ブロック Dbase   Reloc
        c1t1d0s0          0     No      Yes
Device Relocation Information:
Device   Reloc  Device ID
c1t1d0   はい   id1,sd@SFUJITSU_MAP3367N_SUN36G_00N03DD9____
c1t0d0   はい   id1,sd@SFUJITSU_MAP3367N_SUN36G_00N03L9K____
#
# cp -pi /etc/vfstab /etc/_vfstab.org - /etc/systemのバックアップ
metaroot実行前に、念のためバックアップをしておく
# ls -l /etc/*vfstab* また、ミラー化を解除する際、バックアップファイルは役に立つ。
-rw-r--r--   1 root     sys          627  7月  5日  20:58 /etc/_vfstab.org
-rw-r--r--   1 root     sys          627  7月  5日  20:58 /etc/vfstab
# metaroot d10 - metarootコマンドの実行
# ルートファイルシステム (/) が適切なメタデバイス上に設定された
状態でシステムを起動できるように、/etc/vfstab ファイルと 
/etc/system ファイルを編集してくれるコマンド。
# cat /etc/vfstab - 確認
#device         device          mount           FS      fsck    mount   mount /etc/vfstabをみると、/の行のデバイス名が変わっている
#to mount       to fsck         point           type    pass    at boot options
#
fd      -       /dev/fd fd      -       no      -
/proc   -       /proc   proc    -       no      -
/dev/dsk/c1t0d0s1       -       -       swap    -       no      -
/dev/md/dsk/d10 /dev/md/rdsk/d10        /       ufs     1       no      -
/dev/dsk/c1t0d0s3       /dev/rdsk/c1t0d0s3      /usr    ufs     1       no      -
/dev/dsk/c1t0d0s6       /dev/rdsk/c1t0d0s6      /var    ufs     1       no      -
/dev/dsk/c1t0d0s5       /dev/rdsk/c1t0d0s5      /export/home    ufs     2       yes     -
/dev/dsk/c1t0d0s4       /dev/rdsk/c1t0d0s4      /opt    ufs     2       yes     -
/devices        -       /devices        devfs   -       no      -
sharefs -       /etc/dfs/sharetab       sharefs -       no      -
ctfs    -       /system/contract        ctfs    -       no      -
objfs   -       /system/object  objfs   -       no      -
swap    -       /tmp    tmpfs   -       yes     -
#
# shutdown -y -i6 -g0 - 再起動の実施
正常に起動するか確認のため、再起動
metattach d10 d12 - サブミラーの登録
d10: サブミラー d12 is attached もう一つのサブミラーd12をd10に登録する。
# 同時に、データの同期が自動的に始まる。
# metastat - Solarisボリュームマネージャの状態を確認
d10: ミラー d12が登録され、同期中であることを確認する
    サブミラー 0: d11
      状態: 正常
    サブミラー 1: d12
      状態: 再同期中
    再同期実行中: 4 % 完了
    パス: 1
    読み込みオプション: roundrobin (デフォルト)
    書き込みオプション: parallel (デフォルト)
    サイズ: 25044741 ブロック (11 GB)
d11: d10 のサブミラー
    状態: 正常
    サイズ: 25044741 ブロック (11 GB)
    ストライプ 0:
        デバイス   開始ブロック Dbase         状態 Reloc ホットスペア
        c1t0d0s0          0     No            正常   Yes
d12: d10 のサブミラー
    状態: 再同期中
    サイズ: 25044741 ブロック (11 GB)
    ストライプ 0:
        デバイス   開始ブロック Dbase         状態 Reloc ホットスペア
        c1t1d0s0          0     No            正常   Yes
Device Relocation Information:
Device   Reloc  Device ID
c1t1d0   はい   id1,sd@SFUJITSU_MAP3367N_SUN36G_00N03DD9____
c1t0d0   はい   id1,sd@SFUJITSU_MAP3367N_SUN36G_00N03L9K____
#
# metastat こちらは同期完了後の状態
d10: ミラー
    サブミラー 0: d11
      状態: 正常
    サブミラー 1: d12
      状態: 正常
    パス: 1
    読み込みオプション: roundrobin (デフォルト)
    書き込みオプション: parallel (デフォルト)
    サイズ: 25044741 ブロック (11 GB)
d11: d10 のサブミラー
    状態: 正常
    サイズ: 25044741 ブロック (11 GB)
    ストライプ 0:
        デバイス   開始ブロック Dbase         状態 Reloc ホットスペア
        c1t0d0s0          0     No            正常   Yes
d12: d10 のサブミラー
    状態: 正常
    サイズ: 25044741 ブロック (11 GB)
    ストライプ 0:
        デバイス   開始ブロック Dbase         状態 Reloc ホットスペア
        c1t1d0s0          0     No            正常   Yes
Device Relocation Information:
Device   Reloc  Device ID
c1t1d0   はい   id1,sd@SFUJITSU_MAP3367N_SUN36G_00N03DD9____
c1t0d0   はい   id1,sd@SFUJITSU_MAP3367N_SUN36G_00N03L9K____
#
# metainit -f d21 1 1 c1t0d0s1 - 残りのスライスのミラー化の実施
d21: 連結/ストライプがセットアップされます 手順は上記と同じだが、metarootの代わりに/etc/vfstabを
# metainit -f d22 1 1 c1t1d0s1 手動で変更する。
d22: 連結/ストライプがセットアップされます
# metainit d20 -m d21 まずはサブミラーの登録とミラーメタデバイスの作成
d20: ミラーがセットアップされます
#
# metainit -f d31 1 1 c1t0d0s3
d31: 連結/ストライプがセットアップされます
# metainit -f d32 1 1 c1t1d0s3
d32: 連結/ストライプがセットアップされます
# metainit d30 -m d31
d30: ミラーがセットアップされます
#
# metainit -f d41 1 1 c1t0d0s4
d41: 連結/ストライプがセットアップされます
# metainit -f d42 1 1 c1t1d0s4
d42: 連結/ストライプがセットアップされます
# metainit d40 -m d41
d40: ミラーがセットアップされます
#
# metainit -f d51 1 1 c1t0d0s5
d51: 連結/ストライプがセットアップされます
# metainit -f d52 1 1 c1t1d0s5
d52: 連結/ストライプがセットアップされます
# metainit d50 -m d51
d50: ミラーがセットアップされます
#
# metainit -f d61 1 1 c1t0d0s6
d61: 連結/ストライプがセットアップされます
# metainit -f d62 1 1 c1t1d0s6
d62: 連結/ストライプがセットアップされます
# metainit d60 -m d61
d60: ミラーがセットアップされます
#
# metastat 確認
(省略)
# export TERM=vt100
# export EDITOR=vi
# vi /etc/vfstab /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/md/dsk/d20 /dev/md/rdsk/d20        -       -       swap    -       no      -
/dev/md/dsk/d10 /dev/md/rdsk/d10        /       ufs     1       no      -
/dev/md/dsk/d30 /dev/md/rdsk/d30        /usr    ufs     1       no      -
/dev/md/dsk/d60 /dev/md/rdsk/d60        /var    ufs     1       no      -
/dev/md/dsk/d50 /dev/md/rdsk/d50        /export/home    ufs     2       yes     -
/dev/md/dsk/d40 /dev/md/rdsk/d40        /opt    ufs     2       yes     -
/devices        -       /devices        devfs   -       no      -
sharefs -       /etc/dfs/sharetab       sharefs -       no      -
ctfs    -       /system/contract        ctfs    -       no      -
objfs   -       /system/object  objfs   -       no      -
swap    -       /tmp    tmpfs   -       yes     -
# diff /etc/vfstab /etc/_vfstab.org 作業前後の違いは左記のとおり。
6,11c6,11
< /dev/md/dsk/d20       /dev/md/rdsk/d20        -       -       swap    -       no      -
< /dev/md/dsk/d10       /dev/md/rdsk/d10        /       ufs     1       no      -
< /dev/md/dsk/d30       /dev/md/rdsk/d30        /usr    ufs     1       no      -
< /dev/md/dsk/d60       /dev/md/rdsk/d60        /var    ufs     1       no      -
< /dev/md/dsk/d50       /dev/md/rdsk/d50        /export/home    ufs     2       yes     -
< /dev/md/dsk/d40       /dev/md/rdsk/d40        /opt    ufs     2       yes     -
---
> /dev/dsk/c1t0d0s1     -       -       swap    -       no      -
> /dev/dsk/c1t0d0s0     /dev/rdsk/c1t0d0s0      /       ufs     1       no      -
> /dev/dsk/c1t0d0s3     /dev/rdsk/c1t0d0s3      /usr    ufs     1       no      -
> /dev/dsk/c1t0d0s6     /dev/rdsk/c1t0d0s6      /var    ufs     1       no      -
> /dev/dsk/c1t0d0s5     /dev/rdsk/c1t0d0s5      /export/home    ufs     2       yes     -
> /dev/dsk/c1t0d0s4     /dev/rdsk/c1t0d0s4      /opt    ufs     2       yes     -
#
# shutdown -y -i6 -g0 再起動
# metattach d20 d22 もう片方のサブミラーをそれぞれのミラーに登録
d20: サブミラー d22 is attached 登録後、自動的に再同期が始まる。
# metattach d30 d32
d30: サブミラー d32 is attached
# metattach d40 d42
d40: サブミラー d42 is attached
# metattach d50 d52
d50: サブミラー d52 is attached
# metattach d60 d62
d60: サブミラー d62 is attached
#
# metastat - Solarisボリュームマネージャの状態を確認
(省略)
# metastat -c
d60              m  4.0GB d62 d61 metastat -c のほうが簡潔で分かりやすい
    d62          s  4.0GB c1t1d0s6 (左記は同期完了後の状態)
    d61          s  4.0GB c1t0d0s6
d40              m  4.0GB d42 d41
    d42          s  4.0GB c1t1d0s4
    d41          s  4.0GB c1t0d0s4
d30              m  7.0GB d32 d31
    d32          s  7.0GB c1t1d0s3
    d31          s  7.0GB c1t0d0s3
d20              m  1.0GB d22 d21
    d22          s  1.0GB c1t1d0s1
    d21          s  1.0GB c1t0d0s1
d10              m   11GB d12 d11
    d12          s   11GB c1t1d0s0
    d11          s   11GB c1t0d0s0
d50              m  6.0GB d52 d51
    d52          s  6.0GB c1t1d0s5
    d51          s  6.0GB c1t0d0s5
#
# df -h - ディスクの状況確認
ファイルシステム     サイズ 使用済み 使用可能 容量      マウント先 ファイルシステムがミラーメタデバイス名に変わっている
/dev/md/dsk/d10         12G   442M    11G     4%    /
/devices                 0K     0K     0K     0%    /devices
ctfs                     0K     0K     0K     0%    /system/contract
proc                     0K     0K     0K     0%    /proc
mnttab                   0K     0K     0K     0%    /etc/mnttab
swap                   556M   1.5M   554M     1%    /etc/svc/volatile
objfs                    0K     0K     0K     0%    /system/object
sharefs                  0K     0K     0K     0%    /etc/dfs/sharetab
/dev/md/dsk/d30        5.0G   3.6G   1.3G    73%    /usr
fd                       0K     0K     0K     0%    /dev/fd
/dev/md/dsk/d60        7.9G    78M   7.7G     1%    /var
swap                   554M    32K   554M     1%    /tmp
swap                   554M    32K   554M     1%    /var/run
/dev/md/dsk/d40        3.9G   526M   3.4G    14%    /opt
/dev/md/dsk/d50        3.0G   3.0M   2.9G     1%    /export/home
#
# format - formatコマンドによるディスク確認
: Disk0(c1t0d0)とDisk1(c1t1d0)の両方が、SVMになっている。
selecting c1t0d0
[disk formatted]
/dev/dsk/c1t0d0s0 is part of SVM volume stripe:d11. Please see metaclear(1M).
/dev/dsk/c1t0d0s1 is part of SVM volume stripe:d21. Please see metaclear(1M).
/dev/dsk/c1t0d0s3 is part of SVM volume stripe:d31. Please see metaclear(1M).
/dev/dsk/c1t0d0s4 is part of SVM volume stripe:d41. Please see metaclear(1M).
/dev/dsk/c1t0d0s5 is part of SVM volume stripe:d51. Please see metaclear(1M).
/dev/dsk/c1t0d0s6 is part of SVM volume stripe:d61. Please see metaclear(1M).
/dev/dsk/c1t0d0s7 contains an SVM mdb. Please see metadb(1M).
selecting c1t1d0
[disk formatted]
/dev/dsk/c1t1d0s0 is part of SVM volume stripe:d12. Please see metaclear(1M).
/dev/dsk/c1t1d0s1 is part of SVM volume stripe:d22. Please see metaclear(1M).
/dev/dsk/c1t1d0s3 is part of SVM volume stripe:d32. Please see metaclear(1M).
/dev/dsk/c1t1d0s4 is part of SVM volume stripe:d42. Please see metaclear(1M).
/dev/dsk/c1t1d0s5 is part of SVM volume stripe:d52. Please see metaclear(1M).
/dev/dsk/c1t1d0s6 is part of SVM volume stripe:d62. Please see metaclear(1M).
/dev/dsk/c1t1d0s7 contains an SVM mdb. Please see metadb(1M).
[参考:ミラー構成で無い時のDisk1]
selecting c1t0d0
[disk formatted]
Warning: Current Disk has mounted partitions.
/dev/dsk/c1t0d0s0 is currently mounted on /. Please see umount(1M).
/dev/dsk/c1t0d0s1 is currently used by swap. Please see swap(1M).
/dev/dsk/c1t0d0s3 is currently mounted on /usr. Please see umount(1M).
/dev/dsk/c1t0d0s4 is currently mounted on /opt. Please see umount(1M).
/dev/dsk/c1t0d0s5 is currently mounted on /export/home. Please see umount(1M).
/dev/dsk/c1t0d0s6 is currently mounted on /var. Please see umount(1M).