Windows XP→Windows 7丸ごと引っ越しテクニック(後):無償ツールで仮想化による移行を実現する(1/3 ページ)
物理PCから仮想化したばかりのWindows XP環境は起動に失敗することがある。その対策とは? 移行先の仮想マシンの起動から、実運用のための環境整備まで解説する。
前回はDisk2vhdで移行元マシンのディスクから仮想ハードディスク(VHD)を作成し、Windows Virtual PCで移行先の仮想マシンを作成するところまでの手順を説明した。後編の今回は、VHDの修正と仮想マシンの起動、および実用的な環境となるように整備する手順について説明する。
正常に起動できるようにVHD内のレジストリを修正する
物理マシンで起動ドライブが標準的なIDE(パラレルATA)に接続されていた場合、Disk2vhdによって作成されたVHDそのままで仮想マシンを正常に起動できる可能性は高い。Windows Virtual PCでも起動ドライブのディスク・インターフェイスはIDEであり、そのためのデバイス・ドライバがVHD内のシステムに組み込まれているからだ。
逆にいえば、IDE以外に起動ドライブが接続されていた場合は、そのままでは起動できない可能性が高い。典型的なのはAHCIモードのシリアルATA(SATA)に起動ドライブが接続されていた場合だ。AHCIのホスト・インターフェイスはIDEのそれと互換性がなく、専用のドライバが必要になる。逆にいえばIDEのドライバは使われないため、システムに組み込まれておらず、Windows Virtual PCの仮想マシンに移行しようとしても、IDEから起動できずに失敗するわけだ。具体的には起動中にエラーコード0x0000007BのSTOPエラーが発生してしまう。
P2Vで作成したVHDで仮想マシンを起動しようとして失敗した例
シリアルATAに起動ディスクが接続されていたマシンからDisk2vhdでVHDを作成し、そのまま仮想マシンに接続して起動したところ、STOPエラーが発生してWindows XPを起動できなかった。
(1)エラーコード0x0000007BのSTOPエラーが生じている。これは起動ハードディスクをアクセスするためのデバイス・ドライバが正しく組み込まれていない場合に発生するエラーの1つだ。
では、どうすればよいか? 以下のマイクロソフト提供のサポート技術情報(KB)にそのヒントが記されている。
- Windows XP のシステム ディスクを他のコンピューターに移動した後に STOP 0x0000007B エラーが表示される(日本マイクロソフト サポート技術情報)
この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をWindows 7のディスクの管理で、ホスト・マシンの方に接続する。それには、スタート・メニューの[管理ツール]−[コンピューターの管理]を開き、次の手順でVHDを接続する。
作成したVHDをWindows 7に接続する
(1)まずこれを選択する。
(2)これをクリックして操作メニューを開く。
(3)これをクリックすると、接続するVHDファイルを指定するためのダイアログが表示される。VHDのパスを指定して[OK]ボタンをクリックすると、そのVHDが接続される。→[A]へ
[A]
VHDを接続してアクセスできるようになったところ
(1)接続されたVHD。ディスクを表すアイコンが水色に表示されており、ほかのハードディスクと区別できる。
(2)下線の「アクティブ」から分かるように、こちらが起動用パーティションでゲストOSのC:ドライブに相当し、レジストリなどのシステム・ファイルが格納されている。Windows 7に接続された時点で、ドライブ名として「F:」が割り当てられていることが分かる。
■VHD内のレジストリ・ハイブをWindows 7にマウントする
VHDをWindows 7に接続したら、VHDに格納されているレジストリのHKLM\systemハイブを、ホスト・マシンのレジストリにマウント(接続)する。それにはまずレジストリ・エディタを起動し、次のように操作する。
レジストリ・エディタでVHD内のレジストリ・ハイブを開く(1)
VHD内のレジストリを修正するために、修正個所を含むレジストリ・ハイブをホスト・マシン(Windows 7)で開く(接続する)。
(1)まず、このキーを選択する。
(2)これをクリックしてメニューを表示させる。
(3)これをクリックすると、レジストリ・ハイブのファイルを指定するダイアログが表示される。→[B]へ
[B]
レジストリ・エディタでVHD内のレジストリ・ハイブを開く(2)
VHD内のHKEY_LOCALMACHINE\Systemハイブを指定する。
(1)あらかじめ確認しておいたVHD内の起動用パーティションからハイブを指定する。ここは、決してC:ドライブではないので注意すること。
(2)WINDOWSフォルダのsystem32\configフォルダを選択する。
(3)このsystemという名前のファイルがHKEY_LOCALMACHINE\Systemハイブの実体だ。このファイルを選んで開く。→[C]へ
[C]
レジストリ・エディタでVHD内のレジストリ・ハイブを開く(3)
指定したVHD内のレジストリ・ハイブをホスト・マシンのレジストリに接続するためのキー名を指定する。
(1)「temp_xp_system」と入力する。このキー名は、前述のレジストリ・インポート・ファイルにおけるHKEY_LOCAL_MACHINEの直下のキー名と一致させなければならない。
■VHD内のレジストリ・ハイブに修正用ファイルをインポートする
ここまでの準備ができたら、前述の手順で用意しておいたレジストリへのインポート・ファイル「reg-fixideboot.txt」の拡張子を.regに変更する。次に、レジストリ・エディタの[ファイル]−[インポート]をクリックし、インポート・ファイル「reg-fixideboot.reg」を指定して[開く]ボタンをクリックする。その後、次のようにインポート結果を確認する。
レジストリへのインポート結果を確認する。
(1)これはIntel製IDEインターフェイス・デバイスに関するレジストリ・エントリ。インポート前から、このキー自体は存在していたはずだ。
(2)インポートによって加えられたレジストリの値と内容。値Startの内容が「0」、すなわちOSブート時に起動するよう設定されていることが分かる。
■VHD内のレジストリ・ハイブの接続を解除する
これでレジストリの修正は完了したので、レジストリ・ハイブの接続を解除する。
VHD内のレジストリ・ハイブとの接続を解除する
(1)接続したレジストリ・キーを選択する。
(2)これをクリックしてファイル・メニューを開く。
(3)これをクリックするとレジストリ・ハイブの接続が解除される。
■VHDの接続を解除する
開いていたVHDも接続を解除する。
VHDとWindows 7との接続を解除する
接続したVHDをエクスプローラで開いていたら、あらかじめ閉じてから以下の作業に移ること。
(1)まず、これを選択する。
(2)ここを右クリックしてコンテキスト・メニューを表示させる。
(3)これをクリックすると、確認のダイアログが表示される。必ず[ディスクの削除後に仮想ハード ディスク ファイルを削除する]のチェックを外してオフにすること。
以上で仮想マシンの起動前のVHD修正は完了だ。
Copyright© Digital Advantage Corp. All Rights Reserved.