インテル ラピッド・ストレージ・テクノロジーの謎のRAIDエラーを復旧させる。久々のデータ復旧奮闘記。
○症状。
それはBIOSをアップデートした後に起こった。ブート時に上のような画面が表示されたのである。
SSDを2台接続してRAID0を組んでいたのだが、そのRAIDボリュームでエラーが出ている。通常、StatusがFailedになるのは、ディスクが故障しているか接続されていないかのどちらかである。故障はメッセージが表示されるのでともかくとして、ディスクが接続されていない場合はそれを接続し直せば正常に動作する。ところがこの場合、RAIDとして設定したはずのディスクが「Non-RAID Disk」となっていて、RAIDアレイのメンバーとして認識されていない。RAIDの構成情報はマザーボードを交換しても引き継がれることから、RAIDの管理情報はディスクに記録されているのだろう。しかし、何らかの原因でその管理データが破損してしまった。それは恐らくBIOSのアップデートがきっかけで起きてしまった。
Intelはこの問題を解決する方法を考えていないようだ。
○回復までの道のり。
幸い別のディスクにWindows 7をインストールしてあったので、そこから起動してネットで情報を集めた。
そしてこちらのページを見つけて、これを参考にした。
HowTo : Recover Intel RAID "Non-Member Disk" Error.. - Page 7
今回はRAID0を組んでいたGPTディスクにUEFIでインストールしたWindows 8が起動しなくなったという環境を想定している。
※このサイトの情報によっていかなる障害が起ころうと、自己責任でお願いします。操作の前にディスクやパーティションを丸ごとコピーorイメージ化してバックアップすることをお勧めします。
○RAIDを組み直す。
電源投入時またはリセット時に[Ctrl]キーと[I]キーを同時に何度も押して、Intel Rapid Storage Technology - Option ROMの設定画面を表示させる。
メインメニューで「3. Reset Disks to Non-RAID」を選択する。RAIDを解除するディスクを選んで[スペーズ]キーで選択して[改行]キーを押す。「Resetting a disk causes all data on the disk to be lost.」(ディスクをリセットするとディスク上の全てのデータが失われます。)と表示されるが、パーティション管理テーブルの一部が壊れるだけで、ユーザーデータそのものに支障はない。
メインメニューで「1. Create RAID Volume」を選択する。解除したものと同じ設定で再度RAIDを組み直す。設定したら設定画面を終了する。
○TestDiskを使ってパーティション管理テーブルを修復する。
適当なOSを用意する。Windowsの場合はHDDへのインストールが必須だが、修復するRAIDディスクとは別のディスクを用意してそこにインストールすること。
こちらからTestDiskをダウンロードして適当な場所に展開する。TestDiskはパーティションテーブルを修復するオープンソース・フリーソフトで、Windows, FreeBSD, Linux, MacOS Xなどに対応している。
(Windows版の場合)インテル ラピッド・ストレージ・テクノロジー(ソフトウェア)がインストールされている場合はそれをアンインストールする。それからtestdisk_win.exeを起動する。
[Create]を選択する。

修復するRAIDディスクを選択して[Proceed]を選択する。

ディスクの種類を選択する。通常はあらかじめ選択されている項目を選べばよい。今回は[EFI GPT]ディスクということになる。

[Analyse]を選択する。

現在のパーティションテーブルが表示される。[Quick Search]を選択する。

簡易検索の結果が表示される。これでよければこのまま[改行]キーで進む。変更を加える場合は、[A]キーでパーティション追加、[T]でパーティションの種類を変更、[←][→]で登録するパーティションを選択する。

パーティションの追加や種類の変更を行ったところ。UEFI環境上でWindowsをインストールしたGPTディスクはだいたいこんな感じになると思う。

次の画面に進んだら、[Write]を選択する。パーティション情報が書き込まれる。
さあこれで直ったかと思ったら、そんな簡単にはいかなかった。ブート時にWindows Boot Managerのエラーが表示された。

「Windows failed to start. A recent hardware or software change might be the cause. 」(Windowsの起動に失敗しました。最近のハードウェアまたはソフトウェアの変更が原因の可能性があります。)「The Boot Configuration Data for your PC is missing or contains errors.」(BCDが見当たらないかエラーがあります。)とのことなので、ブートローダーが行方不明になっている可能性がある。
○ブートローダーを修復する
Windows 8のインストールディスクから起動する。UEFI-GPT環境の場合はUEFIとして起動するのを忘れずに。
Windowsセットアップ画面が表示されたら、「コンピューターを修復する」をクリックする。
ブートメニューが表示されたら、「トラブルシューティング」→「詳細オプション」をクリックする。

「自動修復」をクリックして自動での修復を試みる。
「問題は見つかりません」というメッセージが返ってくる。役に立たねー。しかし、このメッセージからWindowsのシステムは壊れていないと推測することもできる。
「コマンドプロンプト」を起動する。ブートファイルを再配置してBCDストアの初期化を試みる。
X:\> diskpart
Microsoft DiskPart バージョン 6.2.9200
Copyright (C) 1999-2012 Microsoft Corporation.
コンピューター: PC-NAME
;接続されているディスクの一覧を表示
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 447 GB 0 B *
ディスク 1 オンライン 55 GB 1024 KB
ディスク 2 オンライン 931 GB 5120 KB
;修復対象のディスクを番号で選択
DISKPART> select disk 0
ディスク 0 が選択されました。
;選択したディスクのパーティション一覧を表示
DISKPART> list partition
Partition ### Type Size Offset
------------- ------------------ ------- -------
Partition 1 予約 300 MB 1024 KB
Partition 2 システム 100 MB 301 MB
Partition 3 予約 128 MB 401 MB
Partition 4 プライマリ 446 GB 529 MB
;EFIシステムパーティション(起動ドライブ)を選択する。
;ブート用のパーティションはFAT32でフォーマットされているので、 detail partitionコマンドで容易に見つけることができる。
DISKPART> select partition 2
パーティション 2 が選択されました。
;このパーティションは既定ではドライブ文字が割り当てられていないので、作業のためドライブ文字を割り当てる。
DISKPART> assign
DiskPart はドライブ文字またはマウントポイントを正常に割り当てました。
;EFIシステムパーティションのドライブ文字を確認する。
DISKPART> list volume
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ---- ---------- ------- --------- --------
Volume 0 F DVD-ROM 0 B メディアなし
Volume 1 M DVD-ROM 0 B メディアなし
Volume 2 C Win8@SSDm NTFS Partition 446 GB 正常 ブート
Volume 3 N FAT32 Partition 100 MB 正常 システム
Volume 4 E ボリューム NTFS Partition 55 GB 正常
Volume 5 D システムで予約済み NTFS Partition 100 MB 正常
Volume 6 G Win7@HD1 NTFS Partition 931 GB 正常
;DiskPartを終了する。
DISKPART> exit
DiskPart を終了しています...
;起動用ファイルが入っているパーティションにNという文字が割り当てられたので、 そこにブート環境ファイルをコピーする。
X:\> bcdboot C:\Windows /s N:
ブートファイルは正常に作成されました。
;BCDストアを初期化する。
X:\> bcdboot C:\Windows /l ja-JP
ブートファイルは正常に作成されました。
;コマンドプロンプトを終了。
X:\> exit
設定を終えたらインストールディスクを取り出して再起動する。
すっかり忘れていたが、bcdbootコマンドの代わりにbootrecコマンドを使う方法もある。
以上の操作で無事に復旧することができた。幸いなことにデータは削除されることなくそのまま残っていて、Windowsも何事もなかったかのように起動した。
それにしても、この問題は体験した人にとってはかなりトラウマになるだろうなあ。RAID0の欠点が浮き彫りになったと同時に、バックアップの大切さを思い知った。こんな苦労二度としたくない。
○パーティションの種類や属性の設定を元の状態に復元する
回復用パーティション(UEFI GPTディスクの最初にあるWindows REパーティション)は、DiskPartコマンドでパーティションを選択してから「set id=DE94BBA4-06D1-4D40-A16A-BFD50179D6AC」で種類を設定できる。ドライブ文字を削除するにはボリュームを選択してから「remove」を実行する。パーティションを削除できないようにするには「gpt attributes=0x0000000000000001」を実行する。パーティションに文字を割り当てないようにするには「gpt attributes=0x8000000000000000」を実行する。パーティションを削除できないように、かつパーティションに文字を割り当てないようにするには、先の2つの設定値の論理和をとって「gpt attributes=0x8000000000000001」を実行する。
ブートメニューに余計な項目が追加されてしまった場合は、コマンドプロンプト上で「bcdedit /delete [ID]」を実行する。
だいたい下のような構成になっていればOK。Microsoft Reserved Partitionはディスクの管理ツールには表示されないため、計3つのパーティションが表示される。

参考:
Sample: Configure UEFI/GPT-Based Hard Drive Partitions by Using Windows PE and DiskPart - Microsoft Technet Library