VHD boot 環境を Hyper-V VM に移行する場合、VM アーキテクチャーを合わせるために元の環境が BIOS の場合は Gen 1 VM へ、UEFI の場合は Gen 2 VM へ移行します。
BIOS 環境になっているのか、UEFI 環境になっているかの確認はこちらを見てください。
OS の起動環境が BIOS なのか、UEFI なのかを PowerShell で確認する
困った事に、VHD boot 環境の VHD には boot loader が含まれていないためそのままでは起動できません。
この問題は、bcdboot コマンドで boot loader を移行する VHD に書き込んでやれば解決します。
VHD boot(物理マシン)から VM
移行した場合は、ハードウェア環境が大幅変更になるので、ほぼ確実に再アクティベーションが必要になります。
再アクティベーション準備をお忘れなく。
Windows Server 2008 R2 とかで、VHD が .vhd の場合は、作業前に Convert-VHD で .vhdx にアップデートしましょう。(必須ではありませんが推奨)
こんな感じ
Convert-VHD C:\VHD\hogehoge.vhd C:\VHD\hogehoge.vhdx |
それでは、boot loader の書き込みを開始しましょう。
Gen 1 で VM を作り、コンバートした .vhdx と、VHD OS のインストールメディアをセットし VM を起動します。
すると、VHD での起動が出来ないのでインストールメディアで VM が起動します。
起動したら Shift + F10
でコマンドプロンプトを開きます。
以下コマンド
diskpart | Diskpart 起動 |
list volume | ボリュームの確認 |
select volume 1 | C を選択 |
active | ボリュームを Active にする |
exit | Diskpart 終了 |
bcdboot c:\windows /l ja-JP | C:\Windows で起動する boot loader を書き込む |
この状態でインストールメディアを外して VM を再起動すると VHD から OS が起動します。
【制限事項】
Hyper-V では Gen 2 VM が Windows Server 2012 / Windows
8 以降なので、Gen 2 VM をサポートしていない Windows Server 2008 R2/ Windows 7 以前の OS が UEFI
環境だった場合はこの手順では移行できません。(Hyper-V VM には移行できないかも)
BIOS 環境の場合は、bcdboot で boot loader を VHD に書き込みましたが、UEFI 環境の場合は
VHD が GPT になるので bcdboot が使えません。(bcdboot は MBR が前提)
このため、boot loader を VHD
に書き込むことができません。
このため、Gen 2 VM に素の OS をインストールし、素の OS の boot loader を使って移行した VHD からの起動をします。
素の OS のインストールが済んだら、移行する VHD をマウントします。
光学ドライブがドライブレターの間に差待っていると気持ちが悪いので、光学ドライブを後ろのドライブレターに変更し、マウントした
VHD のドライブレターを調整します。
場合によっては、マウントした VHD がオフラインになっているので、オンラインにしてドライブレターを調整します。
ドライブレター調整後
ドライブレター調整が済んだら、bcdboot で移行した VHD からの起動を指定(d:\windows)した boot loader を追加し再起動します。
PS C:\> bcdboot d:\windows /l ja-JP ブート ファイルは正常に作成されました。 PS C:\> Restart-Computer |
再起動すると boot メニューのデフォルトが移行した VHD になっているので、そのまま起動します。
boot loader 用にインストールした素の OS はからの起動は不要なので、msconfig で boot memu からも削除します。
素の OS の OS ボリュームも不要なので、削除するかドライブレターを削除すると良いでしょう。
UEFI 環境の Windows Server 2012 R2 を Gen 2 VM に移行する場合は PnP
が効いて問題なく起動できるのですが、BIOS 環境が SCSI とか Gen 1 環境とストレージタイプが違う Windows Server 2008 R2
とかの場合は PnP がうまく働かず
BSoD になることがあります。
BSoD は一瞬だけ表示されすぐ再起動しちゃいますが、Stop 0x7b になっています。
VHD の OS を sysprep すれば良いのですが、元のマシンが故障して使えないとか、OEM だとか、sysprep が難しい環境の場合は以下のようにします。
再度インストールメディアで起動し、VHD に入っている OS のレジストリをハイブマウントし、IntelIDE を boot 時ロードの設定にします。
設定するレジストリは、オリジナルの HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services\intelide になります。
XXX が複数出来ている場合は、HKEY_LOCAL_MACHINE\SYSTEM\Select の Current に現在使用されている番号が格納されているので、そいつを確認します。
HKEY_LOCAL_MACHINE を選択し、ハイブの読み込み
C:\Windows\System32\config\system を選択(VHD が C:
と認識されている場合)
マウントする名前(この例では vhd)を指定
マウントされたハイブを展開
HKEY_LOCAL_MACHINE\マウント名\SYSTEM\Select の Current
の値を確認(この例では 1)
HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services\intelide(この例では ControlSet001) を開き Start
の値を 0 (ブート時にロード) に変更
マウントされたハイブ(この例では vhd)を選択してハイブのアンロード
インストールメディアを外して VM を再起動すると、今度は BSoD にならず VHD から OS が起動するはずです。
Copyright © MURA All rights reserved.