ブルースクリーンで起動停止。STOPコードは0xC0000218
ケースNo.2007-002-a:STOP:0xC0000218 ブルースクリーン
作業日: 2007年4月7日
OS: Windows XP Home 日本語版
タイプ: Desktop
症状: 電源投入後,Windowsのロゴが出てしばらくすると,いわゆるブルースクリーンとなり停止する。
ストップコードは0xC0000218
セーフモードでも同様に停止してしまう。
要因と考えられるイベント:お客様からは,以前にも同様の障害が出たとの報告があった。しかし,そのときは友人に見てもらい,一旦正常に直ったとのことであった。したがって今回は,何の予兆もなく,ある日突然問題が再発したものと解釈していた。しかし,これはあとで私の誤解であると判明した。これについては後述する。
再現性: 常に発生
所見:
システムファイルの破壊により,起動不可能となったものと考える。
診断:
セーフモードも使えないので,可能性の高い原因を順に想定して,ひとつずつ,つぶしていくしかない。
まずはハードディスク不良を疑ってみた。
ハードディスクを外し,USB外付けエンクロージャーに入れて,正常なPCにつなぎ,とりあえずはデータのバックアップをひととおり取る。
その後,コマンドプロンプトから
chkdsk f: /f /r
を実行。(f:はもちろん,この外付けとなったディスクがマウントされたドライブ名である)
結果的にエラーは発見されず,ディスクを元に戻しても問題はそのままだった。
次に念のため,Windows XPのCD-Romから立ち上げ,回復コンソールから
chkdsk c: /p
を試した。今度は,いくつか問題が修正されたというメッセージがでたが,やはり問題解決には至らなかった。
ここで仕方ないので,Web検索。ストップコード「c0000218」をサーチしてみた。
マイクロソフトのサポートオンラインの記事を発見。
http://support.microsoft.com/kb/156640/ja
なるほど,「c0000218」の原因は,レジストリ破壊のようである。
最初にやれと書いてあるのは上記chkdskなので,これは省略。
「これでだめなら」とういうところから開始する。
処置その1:
上記マイクロソフトのサポートオンラインの記事は翻訳が悪く,支離滅裂な部分がある。訳した人間が,内容を全く理解できていない証拠である。
それはともかく,やるべきことは,システム復元機能によって,過去に取られた復元ポイントを使う。そこにあるレジストリのバックアップを使って,レジストリを復元してやればいい。
実際のレジストリ復元方法は,このページからリンクされたここを参考にした。
http://support.microsoft.com/kb/307545/
ここに書いてある方法は,あくまで他のPCを使わず,かつ同PC(できれば別パーティション)にもう一つWindowsがインストールされていることが前提となっていて,ないなら,もう一つWindowsをインストールする必要がある。
しかし,私の場合は,USB外付けエンクロージャがあるので,作業はもっと簡単である。このページで説明されていることは,要するに,
- まず念のため,レジストリを構成するファイルのバックアップをとり,
- ドライブのルート直下にあるSystem Volume Informationディレクトリ配下にある復元ポイントから同等のファイルを見つけ,
- これらでレジストリ構成ファイルを置き換える。
ということである。これを単一の(しかもすでに問題が起きてまともに起動できない)PCでやろうとする場合,ここにあるようなややこしい手順を踏まなくてはならない。しかし,外付けエンクロージャーがあれば,ディスクを取り出してエンクロージャーに入れ,これを別の健康なPCにつなぎ,上記3項目をWindows Explorerでドラックアンドドロップなどを駆使して操作すればよい。とても簡単である。
レジストリを構成するファイルは,
%SYSTEMROOT%\SYSTEM32\CONFIG
にある以下のファイルである。
- system
- software
- sam
- security
- default
まず適当な場所にこれらのバックアップを取る。
復元ポイントは,
d:\System Volume Information\_restore{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
(注:「d:」はドライブ名,「X」は16進数字)
という形式のフォルダ直下にあるに「PR」で始まるフォルダである。複数個存在するのが普通であり,この「PRなんとか」というフォルダの一番新しいものを採用した。(どの時点の復元ポイントを採用するかは,もちろんケースバイケースである)
そして,この復元ポイントフォルダにある,以下のファイルがレジストリファイルのバックアップである。
- _REGISTRY_USER_.DEFAULT
- _REGISTRY_MACHINE_SECURITY
- _REGISTRY_MACHINE_SOFTWARE
- _REGISTRY_MACHINE_SYSTEM
- _REGISTRY_MACHINE_SAM
これらを別の場所にコピーし,名前を対応するファイルのものに変更してから,%SYSTEMROOT%\SYSTEM32\CONFIGにコピーし,上書きする。
なお,NTFSファイルシステムの場合,System Volume Informationディレクトリは,アクセス保護がかけられているのが普通であるので,現ログイン名をこのディレクトリのプロパティのセキュリティ欄に登録して,アクセス権を確保することが必要になる。これについては以下のページが参考になる。
http://support.microsoft.com/kb/309531/
結果:
さて,以上を完了し,ディスクを元に戻して起動してみたところ,相変わらずブルースクリーンが出てしまう。がっくりである。しかし,今度はストップコードが違う。(記録は取らなかった)
試しにセーフモードで起動。これはログインできた。やった。一歩前進である。
そこで,念のため,ちゃんとシステムの復元をやるために,System Restoreをやろうとするが,あれ?スタートボタンのところにマウスを持っていくと,砂時計が出たままで,何もできない。
ずっと待ってみたが何もおきないので,仕方なくリセットスイッチで再起動。このとき,セーフモードにするのを忘れて放置していたら,なんと!通常モードで立ち上がった。直ったかな?
よし,作業続行。System Restore(日本語版だと,スタート->アクセサリ->システムツール->システム復元)を開く。4月2日の復元ポイントが一番最近のものだったので,これを採用。復元作業が終わり,再起動を促されるので,再起動した。再起動にちょっと時間がかかる(この間復元作業の残りが裏で動いている)ので,ちょっと離席。そして戻ってみたら,ショック!またブルースクリーンになっている。またしてもストップコードが異なる。
その後,セーフモードでAdministratorにログイン,セーフモードで通常ユーザーにログイン,通常モードで起動,いろいろ繰り返した。セーフモードは概ね安定しているが,通常モードは,どこかの時点でブルースクリーンになる。ストップコードも何種類か出る。最初はいきなりブルースクリーンだったのに,まがりなりにも起動できるようになったので,起動時にいろんなところが修復されて安定していくかと思ったが,どうもこれ以上の発展はなさそうである。さて,行き詰ってしまった。
(次回に続く)