物理PCから仮想化したばかりのWindows XP環境は起動に失敗することがある。その対策とは? 移行先の仮想マシンの起動から、実運用のための環境整備まで解説する。
前回はDisk2vhdで移行元マシンのディスクから仮想ハードディスク(VHD)を作成し、Windows Virtual PCで移行先の仮想マシンを作成するところまでの手順を説明した。後編の今回は、VHDの修正と仮想マシンの起動、および実用的な環境となるように整備する手順について説明する。
物理マシンで起動ドライブが標準的なIDE(パラレルATA)に接続されていた場合、Disk2vhdによって作成されたVHDそのままで仮想マシンを正常に起動できる可能性は高い。Windows Virtual PCでも起動ドライブのディスク・インターフェイスはIDEであり、そのためのデバイス・ドライバがVHD内のシステムに組み込まれているからだ。
逆にいえば、IDE以外に起動ドライブが接続されていた場合は、そのままでは起動できない可能性が高い。典型的なのはAHCIモードのシリアルATA(SATA)に起動ドライブが接続されていた場合だ。AHCIのホスト・インターフェイスはIDEのそれと互換性がなく、専用のドライバが必要になる。逆にいえばIDEのドライバは使われないため、システムに組み込まれておらず、Windows Virtual PCの仮想マシンに移行しようとしても、IDEから起動できずに失敗するわけだ。具体的には起動中にエラーコード0x0000007BのSTOPエラーが発生してしまう。
では、どうすればよいか? 以下のマイクロソフト提供のサポート技術情報(KB)にそのヒントが記されている。
このKBでは、移行先のマシン(本稿では仮想マシン)でWindows XPを起動できるように、あらかじめ起動に必要なデバイス・ドライバをシステムにコピーし、さらに起動関連のレジストリ設定を修正する手順が記されている(ただしマイクロソフトではサポートされていない方法とのことだ)。
実は、デバイス・ドライバのコピーと一部のレジストリ設定変更については、Disk2vhdが実行済みだ。前編の「Disk2vhdで起動ハードディスクのVHDを作成する」で説明したDisk2vhdの[Prepare for use in Virtual PC]チェックボックスをオンにしてVHDを作成したことにより、IDEのデバイス・ドライバは%SystemRoot%\system32\DRIVERSフォルダにコピーされ、起動時にそのドライバを使うためのレジストリ設定も行われる。しかし残念なことに、物理マシンがIDE以外のディスクで起動する場合は、このレジストリ設定が足りずにSTOPエラーが発生することがあるのだ。
そこで、このKBを参考に、足りないレジストリ設定を補足することで、Windows Virtual PCのIDEでも起動できるようにする。ただしWindows XPが起動しないため、ターゲットとなる仮想マシンを起動してレジストリを追加するわけにはいかない。代わりに、作成したVHDをホスト・マシンに接続(マウント)し、ホスト・マシン側のレジストリ・エディタで、VHDに含まれるレジストリ・ファイルの本体を直接開き(レジストリ・ハイブの読み込み)、そこに不足するエントリを追加(インポート)する。
レジストリに不正な値を書き込んでしまうと、システムに重大な障害を及ぼし、最悪の場合、システムの再インストールを余儀なくされることもあります。レジストリ エディタの操作は慎重に行うとともに、あくまで御自分のリスクで設定を行ってください。何らかの障害が発生した場合でも、本Windows Server Insider編集部では責任を負いかねます。ご了承ください。
まずホスト・マシンにおいて、ゲストOS(Windows XP)のレジストリにインポートするためのファイルを用意する。以下にインポート・ファイルを用意したので、これをホスト・マシンにダウンロードしておく。
解凍すると「reg-fixideboot.txt」というファイルが作成されるので、後述するインポート作業の直前に、拡張子をtxtからregに変更すること。これは、拡張子をregに変更したファイルを誤ってダブルクリックしたときに、ホスト・マシンのレジストリが変更されてしまうのを防ぐためだ(変更前に警告のダイアログは表示されるが)。
インポート・ファイルの内容を以下に記す。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\temp_xp_system\ControlSet001\Control\CriticalDeviceDatabase\primary_ide_channel]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\temp_xp_system\ControlSet001\Control\CriticalDeviceDatabase\secondary_ide_channel]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\temp_xp_system\ControlSet001\Control\CriticalDeviceDatabase\*pnp0600]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\temp_xp_system\ControlSet001\Control\CriticalDeviceDatabase\PCI#VEN_8086&DEV_7111]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\temp_xp_system\ControlSet001\Services\atapi]
"Start"=dword:00000000
"DisplayName"="標準 IDE/ESDI ハード ディスク コントローラ"
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,61,00,74,00,61,00,70,00,69,00,2e,\
00,73,00,79,00,73,00,00,00
[HKEY_LOCAL_MACHINE\temp_xp_system\ControlSet001\Services\IntelIde]
"Start"=dword:00000000
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,69,00,6e,00,74,00,65,00,6c,00,69,\
00,64,00,65,00,2e,00,73,00,79,00,73,00,00,00
[HKEY_LOCAL_MACHINE\temp_xp_system\ControlSet001\Services\PCIIde]
"Start"=dword:00000000
この内容を簡単に説明すると、CriticalDeviceDatabaseサブ・キーを含むレジストリ・エントリへの設定では、OSブート時に認識・起動させなければならないIDE関連デバイスを定義している。またServicesサブ・キーについては、IDE用ドライバのありかを指定し、さらにOSブート時にIDE用ドライバを起動するよう設定している。
作成したVHDをWindows 7のディスクの管理で、ホスト・マシンの方に接続する。それには、スタート・メニューの[管理ツール]−[コンピューターの管理]を開き、次の手順でVHDを接続する。
[A]
VHDをWindows 7に接続したら、VHDに格納されているレジストリのHKLM\systemハイブを、ホスト・マシンのレジストリにマウント(接続)する。それにはまずレジストリ・エディタを起動し、次のように操作する。
[B]
[C]
ここまでの準備ができたら、前述の手順で用意しておいたレジストリへのインポート・ファイル「reg-fixideboot.txt」の拡張子を.regに変更する。次に、レジストリ・エディタの[ファイル]−[インポート]をクリックし、インポート・ファイル「reg-fixideboot.reg」を指定して[開く]ボタンをクリックする。その後、次のようにインポート結果を確認する。
これでレジストリの修正は完了したので、レジストリ・ハイブの接続を解除する。
開いていたVHDも接続を解除する。
以上で仮想マシンの起動前のVHD修正は完了だ。
Copyright© Digital Advantage Corp. All Rights Reserved.