VHD ブート ~ VPC で作成した VHD で Native Boot ~ その3

関連投稿:

さて、一回脱線しつつ、最終回になります(^^)

VHD ブートのよさを効果的に、そして WOW な感じでお伝えしたいと考えたときには、きっと Tech・Ed Japan 2009 のキーノートで実施したように、仮想マシンで動いていた OS が物理マシンでも動くというのをご覧いただくのがいい感じですね。

Tech・Ed キーノートの模様は、こちらからストリーミングでご覧いただけます。ご存知の方も多いかと思いますが、キーノートは Live 配信されていました。IIS7 の Smooth Streaming と Silverlight の技術力です。

そのキーノートでは、Windows Server 2008 R2 上の Hyper-V で動いている子パーティション(ゲストOS)上の Windows 7 をシャットダウンし、bcdedit を行い、Windows Server 2008 R2 もシャットダウンし、さっきまで子パーティションの仮想マシンで動いていた OS が物理マシンで動くというのがご覧いただけます。

前回までで書いたように、VHD Native Boot を用いれば、できるわけですが、利用するドライバーの種類は大きくことなります。仮想マシンでは、物理的なドライバーを直接認識するわけではありませんが、VHD Native Boot すると、ディスク(VHD)以外は、ネイティブなドライバーを利用します。

前回までで書いたように Sysprep すれば、システム構成を再度読み込み、再設定されるので問題になりませんが、 Sysprep しないと VHD ブートできなく、ブルースクリーンになる場合があります。

私が一番はまったのはここでした。そのあたりを書いて最終回としたいと思います。

☆ ☆ ☆ ☆ ☆

Windows Vista/7 では、ドライバーの読み込みの最適化を行い、マシン起動時間の短縮を行っています。それに伴い、不要なドライバーを読み込まないようになっているのですが、仮想マシン上の VHD と 物理マシン上の構成は、異なります。平たく大雑把に言えば、ハードディスクの種類(SATAのモード)が異なるとイメージすると良いかと思います。

☆ ☆ ☆ ☆ ☆

したがって、読み込むべきものが無効になっている可能性があり、それにより読み込めない可能性がでてきてしまいます。その結果がブルースクリーンということになります。私が試した限りでは、ブルースクリーンが一瞬だけしか表示させず、なかなか判読できないのですが、サポート情報から見ると「STOP 0x0000007B INACCESSABLE_BOOT_DEVICE」がでていると思われます。

このサポート情報は、

https://support.microsoft.com/kb/922976/ja

です。

このサポート情報にならい、

レジストリエディタにて、

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\

以下のキーの Start の値を 3(無効)から、0(有効)にすることで、VHD で無事にブートできるようになります。具体的なキーについては、触れないでおきます。

☆ ☆ ☆ ☆ ☆

これは、逆もしかりでして、たとえば、Sysprep した VHD をネイティブブートさせた場合には、ネイティブブート時に最適なドライバーの読み込みが行われ、それ以外が無効になります。この VHD を用い、Virtual PC や Hyper-V で仮想マシンとして起動すると同様に仮想マシン上で、ブルースクリーンを見ることができます(^^;

☆ ☆ ☆ ☆ ☆

私が出した結論は、仮想、物理どちらでも必要なものを有効にしておくということです。

私がセッションで実施した際は、こんな “仕込み” を行っていました。さらに、実は、Virtual PC で作成した VHD をいったん、VHD Native Boot を行って、物理環境として必要なディスプレイドライバーや、ネットワークドライバーなどあらかたすべてインストールしておき、その後、bcdedit /delete { … } /cleanup で起動メニューから削除しておき、Virtual PC で起動させたところから、デモを行うようにしました。

こうしておけば、システム構成の再設定などの時間のかかる処理をスキップでき、仮想マシンから物理マシンに切り替えているところがすぐにみていただけます。

※ここに記載したのは私が試行錯誤した結果を載せているだけですので、正しいやり方であるとは限りません。

ながさわ
https://twitter.com/tomohn