Windows 8と起動プロセス
高速スタートアップを無効にして落ち着いたかに見えたWindows 8だったが、先週、Visual Studio 2008の異常終了から操作不能になった。リセットして再起動を行うと起動時に自動修復が行われたが、結局Windows 8は起動しなくなった。
仕方がないのでリフレッシュを行って、高速スタートアップを無効にしたが、Windows Updateに出てくるパッチを当てた後再び起動時に自動修復が走るが修復できずにWindows 8は起動しなくなる状態に陥った。
パッチ当てを行ったときは再起動を行って起動プロセスの間にシステムファイルを入れ替えるので起動プロセスを疑ってみた。
今まではWindowsをインストールする際にインストール先のパーティションをアクティブにしてWindowsをインストールすることで各パーティションのWindowsはインストール先のPBRからインストール先のWindowsブートローダーを介して起動するようにし、起動するOSの切り替えはMBMを使用してMBRの段階で切り替えを行うようにしていた。
図にすると下記のようになる。
BIOS---MBR---+---PBR---ntldr---Windows XP
+---PBR---Windowsブートローダー---Windows 7
+---PBR---Windowsブートローダー---Windows 8
この場合、以下の利点がある。
この状態ではWindows 8は他にWindowsがいることを認識しないのでシャットダウン時のNTFSの処理をWindows 7以前のWindowsと整合性のない方法で行うため、Windows 7以前のWindowsを起動したときにスキャンディスクが行われる。
そこで、高速スタートアップを無効にしてシャットダウン時のNTFSの処理をWindows 7以前のWindowsと整合性のとれた方法で行わせるようにしていた。
ところが、この状態でパッチを当てるとシステムファイルが破損してWindows 8が起動しないという状態に陥ってしまった。
パッチあてを行うとトラブルが発生するのでどうやら、高速スタートアップを無効にしてもシステムファイルを入れ替えるプロセスとNTFSの状態の整合性が取れず、パッチを適用するとファイルシステム上の整合性が取れずにシステムファイルを破壊してWindows 8が起動しなくなるようである。
そこで、Windows XPのあるパーティションをアクティブにした状態で別パーティションにWindows 8を入れるようにした。
この場合の起動プロセスは下記のようになる。
BIOS--MBR--+--PBR--Windowsブートローダー--+--ntldr--Windows XP
+--Windows 7
+--Windows 8
この状態でWindows 8を入れ、パッチを当てていったところ、今度は何の問題もなくWindows 8のパッチあてが完了し、Windows 8、7、XPともに起動時のスキャンディスクなしに起動するようになった。
おそらく、この状態がWindows 8の想定しているWindowsのマルチブート構成なのだろう。
ということで結論としては、
Windows 8を他のWindowsとマルチブートするときは以前のWindowsのパーティションをアクティブにした状態でインストールして、他のWindowsが登録されたWindowsブートローダーから起動する必要がある。
ということになりそうである。
この方法には以下の欠点がある。
- ブートローダーが存在するWindows XPを再インストールするとWindows XPのパーティションに存在しているブートローダーから起動するWindows 7や8を起動するときにそれぞれスタートアップの修復が必要になる。
- Windows 8でトラブルが発生した時にWindowsブートローダーが自動修復を行おうとしてユーザーの選択なしにWindows 8を起動しようとするため正常なWidows XPや7を起動できなくなる。
が、パッチが当てられないのでは元も子もないのでとりあえずはWindowsブートローダーで起動するWindowsを切り替えるようにしていくことにする。