DiskSuite 資料一覧
ミラーディスクの片系障害時の復旧方法
2007/9/12更新
対応バージョン: 4.2.1
前提条件
2つの内蔵ディスクで/(ルート)とswapをミラーリングしている状態で片系ディスクに障害が発生した場合の対応方法を示す。
ミラーの構成は以下のとおりとする。
/(ルート)
ミラー
d0
d0のサブミラー1
d10(/dev/dsk/c0t0d0s0)
d0のサブミラー2
d20(/dev/dsk/c0t1d0s0)
swap
ミラー
d1
d1のサブミラー1
d11(/dev/dsk/c0t0d0s1)
d1のサブミラー2
d21(/dev/dsk/c0t1d0s1)
障害状況の把握
まずmetastatを用いて障害の状況を確認する。
% metastat d0: Mirror Submirror 0: d10 State: Needs maintenance ← (1) Submirror 1: d20 State: Okay ← (2) Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 141192000 blocks d10: Submirror of d0 State: Needs maintenance Invoke: metareplace d0 c0t0d0s0 <new device> ← (3) Size: 141192000 blocks Stripe 0: Device Start Block Dbase State Hot Spare c0t0d0s0 0 No Maintenance ← (4) d20: Submirror of d0 State: Okay Size: 141192000 blocks Stripe 0: Device Start Block Dbase State Hot Spare c0t1d0s0 0 No Okay : (d1も同様)
すると、(1)と(4)でサブミラーd10に障害が発生していることが確認できる。(2)のサブミラーd20は正常に動作している。
また、(3)ではmetareplaceを用いてサブミラーのリプレースを要求している。
障害対応
ディスク交換
システムを止められない状況で、かつディスクがホットスワップ可能であればOSが動作中にディスクを交換する。
ディスクがホットスワップ可能でない、あるいはホッとスワップ可能であってもシステムを止められる状況ならいったんOSをシャットダウンしてディスクを交換する。
以降は後者を選択したものとして説明する。
パーティション設定
OKプロンプトから通常通りブートするが、メタDBの半数以上が障害のためシングルユーザモードで起動する。
ok boot Resetting ... : metainit: host_a: stale databases Insufficient metadevice database replicas located. Use metadb to delete databases which are broken. Ignore any "Read-only file system" error messages. Reboot the system when finished to reload the metadevice database. After reboot, repair any broken database replicas which were deleted. Type control-d to proceed with normal startup, (or give root password for system maintenance): ← rootのパスワード single-user privilege assigned to /dev/console. Entering System Maintenance Mode : #
交換したディスクのスライスを正常に動作しているディスクと同じ設定にする。
# format : (略)
メタDB削除
交換したディスクのメタDBを削除し、マルチユーザモードでブートする。
# metadb ← メタDBの確認 flags first blk block count M p unknown unknown /dev/dsk/c0t0d0s3 M p unknown unknown /dev/dsk/c0t0d0s3 M p unknown unknown /dev/dsk/c0t0d0s3 a m p lu 16 1034 /dev/dsk/c0t1d0s3 a p l 1050 1034 /dev/dsk/c0t1d0s3 a p l 2084 1034 /dev/dsk/c0t1d0s3 # metadb -f -d c0t0d0s3 ← 障害ディスクのメタDBを削除 metadb: host_a: c0t0d0s3: no metadevice database replica on device # metadb ← メタDBが削除されたことを確認 flags first blk block count a m p lu 16 1034 /dev/dsk/c0t1d0s3 a p l 1050 1034 /dev/dsk/c0t1d0s3 a p l 2084 1034 /dev/dsk/c0t1d0s3 # reboot ← リブートしマルチユーザで起動 syncing file systems... done rebooting... :
サブミラー削除
先ほど削除したメタDBを作成し、交換したディスクのサブミラーをミラーから切り離して削除する。
# metadb -a -c 3 c0t0d0s3 ← メタDBを再作成 # metadb flags first blk block count a u 16 1034 /dev/dsk/c0t0d0s3 ← a u 1050 1034 /dev/dsk/c0t0d0s3 ← 再作成したメタDB a u 2084 1034 /dev/dsk/c0t0d0s3 ← a m p luo 16 1034 /dev/dsk/c0t1d0s3 a p luo 1050 1034 /dev/dsk/c0t1d0s3 a p luo 2084 1034 /dev/dsk/c0t1d0s3 # metadetach -f d0 d10 ← /(ルート)のサブミラーを切り離す d0: submirror d10 is detached # metadetach -f d1 d11 ← swapのサブミラーを切り離す d1: submirror d11 is detached # metaclear d10 ← /(ルート)のサブミラーを削除 d10: Concat/Stripe is cleared # metaclear d11 ← swapのサブミラーを削除 d11: Concat/Stripe is cleared # metastat ← 状態確認(削除したサブミラーは表示されない) d0: Mirror Submirror 1: d20 State: Okay Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 141192000 blocks d20: Submirror of d0 State: Okay Size: 141192000 blocks Stripe 0: Device Start Block Dbase State Hot Spare c0t1d0s0 0 No Okay : (d1も同様)
サブミラー作成、再同期
先ほど削除したサブミラーを再作成し、ミラーと接続して再同期する。
# metainit d10 ← /(ルート)のサブミラーを再作成 d10: Concat/Stripe is setup # metainit d11 ← swapのサブミラーを再作成 d11: Concat/Stripe is setup # metattach d0 d10 ← /(ルート)のサブミラーを再同期 d0: submirror d10 is attached # metattach d1 d11← swapのサブミラーを再同期 d1: submirror d11 is attached # metastat ← 状態確認 d0: Mirror Submirror 0: d10 State: Resyncing ← サブミラーd10再同期中 Submirror 1: d20 State: Okay Resync in progress: 18 % done ← 再同期の進捗率 Pass: 1 Read option: roundrobin (default) Write option: parallel (default) Size: 141192000 blocks d10: Submirror of d0 State: Resyncing ← サブミラーd10再同期中 Size: 2097414 blocks Stripe 0: Device Start Block Dbase State Hot Spare c0t0d0s0 0 No Okay d20: Submirror of d0 State: Okay Size: 141192000 blocks Stripe 0: Device Start Block Dbase State Hot Spare c0t1d0s0 0 No Okay : (d1も同様)
metastatを時折実行して再同期が終わるまでチェックし、StateがOkeyになれば復旧完了である。