検索
連載

セーフモードでも起動できないという悪夢からの脱出[その1]山市良のうぃんどうず日記(9)

2回にわたって「セーフモード」や「セーフモードとネットワーク」でトラブルを解決する方法を説明してきましたが、セーフモードですら起動できなくなってしまったPCには、どう対処しましょうか。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「山市良のうぃんどうず日記」のインデックス

連載目次

なんとなく原因が分かっているPCの起動失敗

 毎月恒例のWindows Updateを実行してPCを再起動したら、あるいは新しいアプリをインストールしてPCを再起動したら、正常に起動しなくなったという場合、PC初心者ならきっと途方に暮れてしまうでしょう。

 よく見ると何か青い画面が一瞬表示されるものの、延々と再起動を繰り返したり、あるいはようやく起動しても画面が真っ黒いままでマウスが反応しなかったりといった症状です。Windowsがスタートアップ環境を自動修復しようとして失敗し、それを永遠に繰り返しているように見えるかもしれません。しかし、筆者個人の経験では、ソフトウェア的なシステム変更が原因のWindowsの起動問題を「スタートアップ修復」が解決してくれたことは一度もありません(画面1)。

画面1
画面1 Windows VistaやWindows 7の場合、Windowsの起動に複数回失敗すると「スタートアップ修復の起動(推奨)」が実行されるが、修復に失敗するとまたこの画面に戻る

 更新プログラムやアプリのインストールによって問題が発生した場合は、恐らく犯人はそのインストールで行われた“システムに対する変更”です。Windows Updateを自動実行に任せている場合は、毎月第2火曜日の翌水曜日(日本における毎月の更新プログラムの配信日)から数日中に発生した場合も、更新プログラムが原因である可能性が高いでしょう。

 このような状況になって「セーフモード」でもPCを起動できないとしたらパニックになるかもしれませんが、原因はなんとなく分かっているのですから一呼吸置いて冷静になりましょう。焦ってしまうと“最も簡単かつ有効な回復手段”を捨ててしまうことにもなりかねません。

 最初に断っておきますが、ここから紹介するのは、あくまでも筆者がソフトウェアを原因とするPCの起動問題に遭遇した時に、試してみるであろう手順になります。これがベストプラクティスというわけではないかもしれませんし、ハードウェア的な原因(例えば、ハードディスクやメモリの故障など)の場合は別の対処が必要になります。

 また、Windows Vista以降およびWindows Server 2008以降のWindowsを対象とした手順になります。手順の中にはWindows XPやWindows Server 2003でも使えるものもありますが、話がややこしくなるのでこれらの旧Windowsについては言及しないことにします。

「システムの復元」が可能なら、それが解決の早道

 デスクトップPC向けのWindowsには「システムの保護/システムの復元」機能が搭載されており、既定で有効になっています。この機能が有効になっている場合、Windows Updateの更新プログラムやアプリ(主にマイクロソフト製のアプリ)をインストールする直前の他、定期的な間隔や、システムのフルバックアップ作成時に「復元ポイント」が自動作成されます。

 この復元ポイントには、重要なシステムファイル、一部のプログラムファイル、およびレジストリ設定が含まれており、問題が発生した場合にユーザーのデータに影響を与えることなく、システムに加えられた変更を元に戻すことができます。更新プログラムやデバイスドライバー、アプリのインストールでPCが起動不能になった場合、「システムの復元」を試してみるのが最善の選択でしょう。

 「システムの復元」を実行するには、「システム回復オプション」を使用します。システム回復オプションは「Windowsプレインストール環境」(Preinstallation Environment:WinPE)ベースのミニOS環境であり、「Windows回復環境」(Windows Recovery Environment:WinRE)とも呼ばれます。“WinPE+システム回復オプションの機能=WinRE”という感じです。WinREは通常のWindowsのインストールとともに、PCのローカルディスクにインストールされています。WindowsのインストールDVDメディアからPCを起動して、WinREを開始することもできます。

 Windows Vista、Windows 7、およびWindows Serverの場合は、PCに電源を投入してWindowsの起動が開始するタイミングで[F8]キーを押し、「詳細ブートオプション」メニューの「コンピューターの修復」からWinREを起動することができます(画面2)。なお、WinREを利用するには、問題が生じているWindowsのローカル管理者のパスワードを入力する必要があります。

画面2
画面2 Windows VistaやWindows 7、Windows ServerでWinREを起動するには[F8]キーを押して「コンピューターの修復」を選択し、「システムの復元」を実行する

 Windows 8およびWindows 8.1の場合は、スタートアップ高速化の影響で[F8]キーが事実上使えません(参考記事:@IT > Windows Server Insider > 『Windows TIPS:Windows 8を「確実に」セーフ・モードでブートさせる』)。その代わり、複数回起動に失敗すると「回復」ページが表示され、WinREを起動することができるようになっています(画面3)。

画面3
画面3 Windows 8やWindows 8.1で複数回起動に失敗すると、「回復」ページが表示されるので、ここからWinREを起動して「システムの復元」を実行する

 具体的には、「回復」ページで「詳しい修復オプションを表示する」をクリックして、「オプションの選択」→「トラブルシューティング」→「詳細オプション」→「システムの復元」をクリックします(画面4)。なお、Windows 8およびWindows 8.1の場合も、WinRE環境に入るには、問題が生じているWindowsのローカル管理者のパスワードを入力する必要があります。

画面4
画面4 以前に作成された回復ポイントから、「日付と時刻」を基に正常な起動が見込める回復ポイントを選択して復元する

 WinREには「システムの復元」とは別に、「システムイメージの回復」(Windows 7以前)、「イメージでシステムを回復」(Windows 8以降)という項目があります。「システムの復元」と似ていますが、これらはシステムのフルバックアップ(システムイメージ)をリストアするためのオプションになります。

 また、Windows 8以降の「トラブルシューティング」ページには、「PCのリフレッシュ」や「PCを初期状態に戻す」といったオプションもあります。トラブル解決に役立ちそうな魅力的なオプションに見えますが、使い方を誤ると大事なデータやアプリが消えてしまうので注意してください。これらの回復方法の違いについては、別の機会に紹介します。

WinRE/WinPEのコマンドプロンプトを駆使する

 「システムの復元」が問題発生時に常に利用できるとは限りません。例えば、ディスク領域を節約するために復元ポイントを削除してしまった、あるいは同じ理由で「システムの保護」機能を意図的に無効にしてあるといった場合です。トラブルが発生する直前に限って、なぜか、そんなことをしてしまうものです。

 また、Windows Serverの場合はそもそも「システムの保護」機能を提供しません。Windows Serverで「システムの復元」と同じことをしようとするなら、事前にハードディスクやDVD、ネットワーク共有に作成しておいたシステムのバックアップから、システム状態をリストアするという操作になります。

 「システムの復元」を利用できない場合、次善の策となるのはWinREやWinPEの「コマンドプロンプト」で原因の調査や対処を行うことです。コマンドプロンプトに慣れていない人にとっては少々ハードルが高くなるかもしれませんが、今回は問題の原因調査に役立つかもしれない、テクニックをいくつか紹介します。

 WinREからコマンドプロンプトを起動する方法については、前出の画面2画面3を見ていただければ一目瞭然なので説明しません。WindowsのインストールDVDメディアからPCを起動した場合は「コンピューターを修復する」をクリックして開始するWinREから開く方法の他にも、「Windowsセットアップ」が表示されている状態で[Shift]+[F10]キーを押すことで、素早くコマンドプロンプトを開くことができます(画面5)。

画面5
画面5 WindowsインストールDVDメディアでPCを起動して[Shift]+[F10]キーを押すと、WinPEの「コマンドプロンプト」が開く。まずは、ユーザーデータの救出から始めよう

 [Shift]+[F10]キーで開くコマンドプロンプトも、WinREから開くコマンドプロンプトも、どちらも“WinPEのコマンドプロンプト”であって両者に違いはありません。ただし、WinREを起動することがないため、ローカル管理者のパスワードの入力を求められないという違いはあります。

 さて、WinPEのコマンドプロンプトが起動したら、まずは重要なユーザーデータを「XCOPY」コマンドなどで外部メディアにコピーし、起動しなくなったPCから救出しておくことをお勧めします。

 WinPEで起動したPCにUSBメモリやUSB外付けハードディスクを接続すれば、通常起動のPCと同じように認識されます。また、コマンドプロンプトで「startnet」または「wpeutil InitializeNetwork」と入力すると、ネットワークが初期化されるので、ファイル共有との間でファイルをやりとりすることもできます。

 ただし、利用できるネットワーク機能は、有線ネットワーク(LAN)であり、Windows標準のドライバーで対応できることが条件になります。また、DHCPが利用できないネットワークでは、「netsh」コマンドを使用してIPアドレスを固定する必要があるため、ちょっと面倒です。

 ファイルを救出する場合やその他のトラブルシューティングを行う場合、まずは正常起動時のPCのCドライブがどのドライブであるか確認することから始めましょう。ドライブルートに「Windows」「Program Files」「Users」が存在するドライブです。ほとんどの場合、CドライブかDドライブにマウントされているはずです。正常起動時のPCのCドライブが必ずCドライブになるとは限らないので注意してください。なお、ユーザーの設定とデータは、通常、「Users\ユーザー名」に存在します。

 「DIR C:」や「DIR D:」コマンドを実行してみれば、どのドライブであるか簡単に特定できるでしょう。また、「DISKPART」コマンドで「LIST VOLUME」を実行して確認する方法もあります。

 ちなみに、WinRE/WinPEのコマンドプロンプトは既定で「X:\Windows\System32」または「X:Sources」をカレントディレクトリとして開きます。XドライブはRAMディスク(メモリの一部をディスクとして使用)にロードされた、実行中のWinPEのシステム(X:\Windows)を含むドライブです。ローカルPCのCドライブと勘違いしないようにしてください。

STOPエラー発生時の自動再起動を無効化する

 PCが起動不能になる症状の1つに、起動途中のシステムエラーの発生があります。システムエラーとは「STOPエラー」や「ブルースクリーン」、あるいは「BSoD」(Blue Screen of Death:死のブルースクリーン)として知られているものです。

 PCの起動途中でシステムエラーが発生し、再起動を繰り返すという状況に陥った場合、一瞬だけ表示される青い画面上の文字列を確認するのは、普通の人には不可能です。しかしながら、Windowsはシステムエラーが発生した場合には、自動的に再起動するのが既定の設定となっています(画面6)。システムエラーが発生してからでは、この既定の動作を変更するのは難しいと思っている人がほとんどでしょう。

画面6
画面6 システムエラー発生時の自動的な再起動はWindowsの既定値。正常起動できなければ、このUIから既定値を変更することはできない

 WinREやWinPEのコマンドプロンプトからであれば、システムエラー発生時の自動的な再起動を無効化できます。自動的な再起動の動作は、正常起動したPCの以下の場所にある「AutoReboot」というレジストリ値で制御されています。このレジストリ値を何とかして変更できれば、自動的な再起動を無効化できるのです。

キー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

値:AutoReboot

データ:0(自動的に再起動しない)/1(自動的に再起動する、既定)


 自動的な再起動を無効化する具体的な手順は次の通りです。

(1)WinRE/WinPEのコマンドプロンプトを開き、正常起動時のPCのCドライブを確認したら、そのドライブ上の「\Windows\System32\Config\SYSTEM」ファイルの存在を確認します。この「SYSTEM」ファイルは、問題のPCの「HKEY_LOCAL_MACHINE\SYSTEM」キー(ハイブ)を格納しているハイブファイルです。

(2)次にWinRE/WinPEのコマンドプロンプトで「regedit」と入力し、「レジストリエディター」を起動します。

(3)「レジストリエディター」が起動したら、「HKEY_LOCAL_MACHINE」を選択した状態で「ファイル」メニューから「ハイブの読み込み」を選択し、先ほど確認しておいた「\Windows\System32\Config\SYSTEM」を指定して、分かりやすいキー名(例えば、「Offline」など)を付けて読み込みます(画面7)。これで、「HKEY_LOCAL_MACHINE\<指定したキー名>」の下にオフラインのWindowsの「HKEY_LOCAL_MACHINE\SYSTEM」キーの配下にあるキーが読み込まれます。

画面7
画面7 WinPEの「レジストリエディター」にオフラインのWindowsのレジストリハイブを読み込んで編集し、システムエラー発生時の自動的な再起動を無効化する

(4)目的の「AutoReboot」レジストリ値は、「HKEY_LOCAL_MACHINE\<指定したキー名>\ControlSet001\Control\CrashControl」キーに存在するので、レジストリ値を開いて規定値として設定されている「1」を「0」に変更してください。「CurrentControlSet」キーは、Windows起動時に「ControlSet001」から生成されるもので、オフラインの時には「ControlSet001」に対して変更するところがポイントです。

(5)レジストリ値の編集が終了したら、読み込んだハイブのルート(指定したキー名)を選択して、「ファイル」メニューから「ハイブのアンロード」を選択し、「レジストリエディター」を終了します。

(6)その後、WinPEの「コマンドプロンプト」で次のコマンドを実行してPCを再起動します。

wpeutil reboot


(7)再起動後のPCでシステムエラーが発生すると、青い画面の状態で停止するので、「0x0000007B」や「INACCESSIBLE_BOOT_DEVICE」のようなエラー番号やエラーメッセージを控えてください(画面8)。他の発生条件(例えば「2014年6月のWindows Update」など)と組み合わせてインターネットで検索すれば、同様の問題の発生報告や、原因、回避策が見つかるかもしれません。

画面8
画面8 Windows 8以降はエラーメッセージだけの簡単なものだが、Windows 7以前はエラーコードやその他のメッセージが表示される。重要なのはエラーコードとそれに対応するエラーメッセージの部分

 今回はシステムエラー発生時の既定の動作を変更しましたが、実は、Windows 7以前の[F8]キーの「詳細ブートオプション」(前出の画面2)やWindows 8以降の「スタートアップ設定」からは、もっと簡単にシステムエラー発生時の自動的な再起動を無効にすることができます。

 レジストリのオフライン編集のテクニックの例として、あえて面倒な手順を説明しました。なぜなら、レジストリのオフライン編集テクニックを覚えておけば、不正なレジストリ値が原因で発生するPCの起動トラブルを解決するのに役立つと考えたからです。

オフラインでイベントログを調査する

 PCの問題を引き起こしている原因については、イベントログから情報を得られる可能性があります。WinPEでは「イベントビューアー」(Eventvwr.mmc)は利用できませんが、イベントログが保存されている、次の場所にあるイベントログファイル(拡張子.evtx)にアクセスすることは可能です。標準的なWindowsログとイベントログファイルの対応は以下の通りです。

Windowsログ イベントログファイル(.evtx)
アプリケーション(Application)ログ \Windows\System32\winevt\Logs\Application.evtx
セキュリティログ \Windows\System32\winevt\Logs\Security.evtx
Setupログ \Windows\System32\winevt\Logs\Setup.evtx
システムログ \Windows\System32\winevt\Logs\System.evtx

 これらのファイルを外部メディアやファイル共有にコピーし、別のPCの「イベントビューアー」から「保存されたログを開く」で開けば、イベントログに異常が記録されていないか調査することができます(画面9)。実は、先ほどのシステムエラーについても、システムログにソース「BugCheck」、イベントID「1001」のエラーイベントとして詳細な情報が記録されています。これは、システムエラーの設定で、「システムログにイベントを書き込む」が既定で有効になっているからです(前出の画面6)。

画面9
画面9 正常に起動しなくなったPCの「\Windows\System32\winevt\Logs\System.evtx」を別のPCに読み込んで調査する

 正常に起動する別のPCを用意できない場合は、WinPEのコマンドプロンプトからイベントログファイルの内容を参照することができます。それには、「Windowsイベントコマンドラインユーティリティ」(Wevtutil.exe)を使用します。例えば、Dドライブにある「System.evtx」から新しいイベントをテキスト形式で参照するには、次のコマンドラインを実行します(画面10)。

wevtutil qe /lf D:\Windows\System32\winevt\Logs\System.evtx /rd:true /f:text


画面10
画面10 「wevtutil」コマンドを使用して、指定したイベントログファイルの内容を参照する

 膨大なテキストが出力されるので、コマンドラインの実行結果をファイルにリダイレクト(コマンドライン > 出力先のファイル名)して、WinPE付属の「メモ帳」(notepad.exe)で開くと検索ができて便利です。また、RAMディスクであるXドライブ上のパスは、一時的にファイルを保存するのに利用できます(再起動すると消えます)。

 さて次回は、正常起動しなくなってしまったシステムを復旧するために、WinPEやWinREのコマンドプロンプトからオフラインのWindowsイメージを操作して、特定の更新プログラムやサードパーティ製デバイスドライバーのアンインストール、Windowsの機能の無効化を行う方法を紹介します。

「山市良のうぃんどうず日記」バックナンバー

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2014)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手がける。個人ブログは『山市良のえぬなんとかわーるど』。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る