2009年9月10日木曜日

NVIDIA RAID1 の障害対策と準備

注意
2009-09-10現在、障害に実際には遭遇していないため、
SATAケーブルをわざと引っこ抜いた後、
RAID1アレイを回復するテストをした実績を元に作成しています。

したがって、妄想トラブルに対する妄想トラブル対策で、誤りを含む可能性が高いです。


前提
1.SATA1+SATA2でRAID1を構成しており、各HDDをDISK1 DISK2と呼ぶ
2.当該RAIDにOS(Vista64bit)が入っている
3.HDDがハード的に完全に破壊され、どうやってもBIOS認識から不可能な障害を「完全破損」
HDDがハード的に一部破壊され、クラスタエラー等の問題が発生した障害を「一部破損」
HDDのハード的には問題ないが、degradedになってしまった場合を「RAID障害発生」
と呼ぶことにする。

参考:
http://www.dell-faq.com/detail.asp?baID=1&FAQID=101581
[XPS600 RAID アレイ構築/削除方法
よくあるトラブルと対処方法(劣化したRAID レベル1 構成の再構築)]

準備
1.degradedの原因と過程次第ではSATA2側のMBRが、
Windowsのブートローダにより破壊されてしまう恐れがあるため、
KNOPPIX等で MBRのバックアップを取っておく。
C:\opt\backup\for_hgst320gb_nvraid1_recover\mbr_sda_eq_sdb.dd
にバックアップを保存しておいた。

障害原因:DISK1 と DISK2 が 完全破損
1.あきらめるしかない。日々のバックアップを探しましょう

障害原因:DISK1 or DISK2 のみ完全破損
1.障害が発生したDISKがどちらかはっきりしているのが、
不幸中の幸いという状態。新しいDISKを購入し、交換する。
あとは再起動すれば、勝手にミラーリングが始まる。

障害原因:"DISK1 or DISK2 のみで 一部破損" or "RAID障害発生"
1.この場合、起動時のRAIDリスト表示で
degraded のアレイが二つという扱いになり
DISK1が c:\ 、DISK2が d:\ となって起動する場合がある。
その時、DISK2のMBR(のみ)が破壊されてしまい、DISK2は単体で起動できなくなる。
CHKDSK NVRAIDのログ(あるのかな・・) badblocks 等でなんとか
どちらに障害があるのか調べる。

 幸い、片側がエラー、片側がdegradedの時は、エラー側を調べるなり
諦めるなりすれば良い。

2-RAID障害だった場合.
いつのまにかdegradedになっていたとしても、
その後のファイル更新はc:\であるDISK1に反映されているはずであることから、
DISK2のアレイを削除し、ミラーリングアレイの再構築をすれば済む。

2-障害がDISK2 の場合.
いつのまにかdegradedになっていたとしても、
その後のファイル更新もc:\であるDISK1に反映されていることから、
DISK2を新しいDISKに交換すれば済む。
ミラーリングもおそらく勝手に始まる。

2-障害がDISK1 の場合.
いつのまにかdegradedになっていたとすると、
その後のファイル更新はc:\であるDISK1にのみ反映されていることから
ヤッカイである。

(以下は妄想度が高い。ただし、
「d:\で認識された時、DISK2のMBRが破壊されるが、バックアップで回復すると
DISK2でVistaが起動可能である」というのはテストした。)
1.まず、DISK1をPCから外す
2.DISK2をSATA1に繋ぎかえ、KNOPPIXにより破損したMBRを回復させる
3.DISK1をSATA2に繋ぎ、BIOSでSATA2のRAIDをdisableにした後、
DISK2をc:\として起動する。
そして、DISK1にだけ入っている日付の新しいデータをDISK2にコピーをとる。
4.DISK1をPCから外して保管、新しく購入したDISKに交換する。
5.自動か手動かで、Windows起動後にミラーリング処理をする

その他.
各Diskの後ろから1024byte目から512byte分に、nvidia_raidのデータが書き込まれる。
したがって、ここをZeroで埋めるとnvidia_raid的にはnewdisk扱いになる。
また、BIOSで個々のディスク情報を一切保存していないようで、
例えば、マザーボードが故障したときに、同型番の別マザーボードを持ってきて、
各SATA端子のRAID Enable/Disableさえ一致させれば、RAID部分は復旧となるようだ。
MediaShield utilityは安易にいじらない方がよい。むしろ、一切。




Vista64bitの起動HDD(non-RAID)を、NVIDIA RAIDのRAID1に移行


私はこれでうまくいきましたが、うまくいかない環境もあると思います。
ご注意下さい。

私的記録です。

前提
1.マザーボードはASUSTeK M2NPV-VM
2.SATA1にVista64bitの入ったディスクを接続(以降DISK1)
3.SATA2に新規購入した同容量のディスクを接続(以降DISK2)
4.NVIDIA RAIDのドライバは
http://www.nvidia.com/object/nforce_nf400_winVista64_15.01.html
[nForce 430/410/405/400- Windows Vista x64][Version: 15.01]
を利用

参考
http://www.dell-faq.com/detail.asp?baID=1&FAQID=101574
[XPS600 RAID アレイ構築/削除方法-STEP 1 : RAID 構成について]
http://www.mazn.net/blog/2008/05/10/74.html
[nForceのマザーM2NPV-VMでのRAID (NVRAID) の使用]
http://jisaku.sakura.ne.jp/hdd/faq/hdd8.html
[OS起動用SATAHDDをチップセットのRAIDに移行できる?]

1. NVIDIA RAIDのドライバーをダウンロードしておく。
スキャンディスク(CHKDSK)がエラーがなくなるまで実行しておく。
重要なファイルをtarかzipで固めて、そのMD5値をとっておく。
DISK1のバックアップを取る。
2. BIOSで[Adanced]=>[Onboard Device..]=>[NVRAID Con..]と進み、
[RAID Enable]と[SATA 2 RAID]のみ「Enable」にし、変更を保存する。
3. 再起動し、起動時に[F10]で実行できるMediaShield Utilityを使い、
DISK2のみによるStriping RAIDアレイを作る。BOOTは「No」のままでよい。
4. Vistaを起動し、ダウンロードしておいたドライバを入れる。
(RAIDアレイが存在しないとダメみたいなので、このタイミングで入れる)
再起動を促されるので、再起動。
5. スタートメニューに[NVIDIA Corporation / NVIDIA Control Panel / Storage]
というのが作られているハズなので、[Storage]を実行し、
「3.」で作ったRAIDアレイが見えている事を確認する。
ちなみに、チャンネル名は、手元では「SATA 1.1」となっていた。
6. 再起動し、BIOSで[SATA 1 RAID]もEnableにし、変更を保存する。
7. 再起動し、MediaShield Utilityを使う。
「3.」で作ったRAIDアレイを削除する。
そして、DISK1のみによるStriping RAIDアレイを作る。
その時、「CleardiskData?」というメッセージが表示されるが、
必ず[N]を入力すること。必ず[N]。必ず[N]。必ず[N]。
[B]キーでBOOTを「Yes」にする。
8. DISK1のみによるRAIDアレイでVistaを起動する。
(私はこの回りくどい手順を踏んだ場合に限り、
DISK1を単一ディスクのRAID0アレイという設定の上でVistaを起動できた。)
新しいアレイのドライバを入れたといって再起動を促されるが、
[後で再起動する]を選ぶ。
[Storage]を実行すると、DISK1によるアレイとDISK2の両方が見えるように
なったので、[アレイの移行]により DISK1+2によるRAID1(MIRROR)に移行開始。
長時間待機へ。320GBのHDDで5時間かかった。
9. PCを再起動し、問題なく起動できることを確認する。
さらに「1.」でとっておいたMD5値の確認やDISK1のバックアップと
内容が違わないか確認する。問題なければ、作業完了。

KNOPPIXを使って、OS起動HDDを換装


前提
1.SATA1にVista64bitの入った160Gのディスクを接続 (以降sda)
2.SATA2に新規購入した320GBのディスクを接続(以降sdb)
3.sdaはNTFSのシングルパーティション(sda1)を持つ
4.KNOPPIX 5.1.1を利用
5.Vista64bitに限らず、NTFSのXP/Vista32bit等も同様のはず。

1.Vistaでスキャンディスク(CHKDSK)がエラーがなくなるまで実行しておく。
また、重要なファイルをtarやzipで固めて、そのMD5値をとっておく。
2.BIOSでBOOTの優先順位を変更し、CDROMを最初にもってくる。とても重要。
(うっかり作業中のHDDで起動すると、HDDのデータが変更されてしまう)
3.KNOPPIXを起動し
dmesg | grep sd
等とを実行の上、sdaが160G、sdbが320Gのディスクであることをよく確認し、
sudo dd if=/dev/sda of=/dev/sdb bs=32M
等としてディスクを丸ごとコピーする。1時間ほどかかった。
4.KNOPPIXを念のため再起動し
md5sum -b /dev/sda1 /dev/sdb1
として、VIsta64bit の入った NTFS領域のMD5値が一致する事を確認し、
丸ごとコピーの成功を確認する。
5.シャットダウンし、160GBのディスクを外して保管。
以降で何か失敗しても、これで最初からやり直せるはず。
SATA1に320GBのディスクを接続するよう接続変更。
6.KNOPPIXを起動し
sudo qtparted
でqtpartedを起動、[/dev/sda]=>[sda1]=>右クリック=>[サイズ変更]をする。
160GB程のパーティションを300GB程のパーティションに変更予約した。
[ファイル]=>[確定]で予約した変更を実行。1分ほどでおわった。
これでKNOPPIXのお役目終了。
7.再起動し、Vistaを起動する。
CHKDSK を促され、実行。自動的に再起動される。
8.[コントロールパネル] =>[管理ツール] =>[イベントビューア] を起動する。
[アプリケーション]を選択し、チェックディスク(CHKDSK)をかけたあたりの時間の
[Wininit]の項目に、CHKDSKのログが保存されているので、それをみて
エラーが無いか確認。
9.念のため、「1.」で作った重要なファイルのMD5値が変っていないか確認する。
確認はやりたいだけやれば、それだけ安心できるはず。