- 2021-12-04 (Sat) 21:42
- 一般
最近メイン PC を再構築したので,再構築前の Win10 環境を VM として動かそうと Win10 の Hyper-V を使ってみたらハマったのでメモ.
とりあえず,disk2vhd を使って古い環境の Win10 でシステムの入った SSD を謎のパーティションごと vhdx ファイルに吐き出しておいた.Linux で dd で丸ごとやっても良いかもだけど,disk2vhd なら Win10 で動くしデータのない部分はイメージに保存されないのでコンパクト.
新環境の方では VM を動かすための Hyper-V の機能を「Windows の機能の有効化または無効化」から有効化.有効化したら再起動.
再起動したら,Hyper-V で古い環境の vhdx から新しい VM 作って起動.「Hyper-V クイック作成」だと VM 作るの簡単っぽい.vhdx ファイルの複製を必ず作るっぽいけど.
そしてここで VM が起動しない罠にハマる.残念.
あーだこーだしてみた結果,結論としては「古い環境が UEFI じゃなく BIOS 起動だった」というのと「"Hyper-V クイック作成" だと第2世代の VM(UEFIブート)しか作られない」というのとが原因.古いほうが UEFI ブートだったなら多分ここらで素直に起動できたんだろう.
ということで,最終的な解決法:まず,Hyper-V マネージャーの「操作 → 新規 → 仮想マシン」から VM の作成を開始して,途中で世代の指定があるのでそこで第1世代を指定する.次に,その VM の DVDドライブに Win10 のインストールディスクを入れて起動して,リカバリ用のコマンドプロンプトの起動に進んで bootrec /fixmbr, bootrec /fixboot, bootrec /scanos の三点セットと bootrec /rebuildbcd をしてみたら無事に起動可能になった.
なお,第2世代の VM のまま bootrec /rebuildbcd をしたら「要求されたシステムデバイスが見つかりません」を食らって問題解決しなかった.あと,VM のオプション設定で世代(起動方法)は変えられないので,世代の変更は VM の構築し直しでしかできない.ついでに,diskpart コマンドで clean ってやるとディスクの構成情報が即座に消えるので,fdisk の気分でいると痛い目を見る.
ということで,「Hyper-V 使うなら,起動方法にわせて適切な世代の VM を作れ」という教訓.
- Newer: ことはじめ