CentOS
Hyper-V
Windows10

Windows 10 Pro Hyper-VのVMの複製

はじめに

Windows 10 Proには標準でHyper-Vが利用できる。
仮想環境を使い倒す上で、同じ構成の仮想マシンが欲しい時があるかも知れない。
しかし、Windows 10のHyper-V マネージャーでは残念ながら仮想マシンの複製が行えない。
第一世代のHyper-Vではvhdxファイルをコピーすれば何とかなる時があるが、第二世代のHyper-Vではvhdxファイルをコピーしてもだめなケースが存在した。
本稿では、Windows 10の第二世代のHyper-Vの仮想マシンをCloneする方法を記載する。

注意:以下の2点について事前に確認すること
1. 今回はCentOS向けに行っている。他のディストリビューションやOSに関しては保証しない。
2. チェックポイントを利用できない。(削除する)

仮想マシンのインストール

通常通り新規作成ウィザードにしたがってインストールする。

今回は、コピー元のOSとしてCentOSを選択している。

image.png

image.png

image.png

image.png

image.png

image.png

image.png

Hyper-Vの設定

作成した仮想マシンを選択して、設定画面を表示する。
Linuxを利用する場合はセキュアブートのテンプレートを「Microsoft UEFI 証明機関」に変更する。

image.png

OSのインストール

仮想マシンを起動してOSをインストールする。
コピーしたくなったら仮想マシンをシャットダウンしオフになっていることを確認する。

vhdxのコピー

次にvhdxをコピーする。
しかし、現状のままコピーしてもチェックポイントが残っているため正しく動作しない。

チェックポイントの削除

Hyper-Vマネージャからチェックポイントを選択、一番上のチェックポイントをクリックし、チェックポイントのサブツリーを削除を実行。

image.png

実行後、チェックポイントが削除されvhdxファイルが統合される。
統合完了後、チェックポイントの画面に「選択した仮想マシンにはチェックポイントがありません。」と表示されていれば問題ない。

vmdxのエクスポート

チェックポイントの削除が正常に行えていると、仮想マシンの設定のハードドライブの画面で編集ボタンが押せるようになっている。

image.png

編集ボタンを押して、操作の選択時に変換を選択する。

image.png

今回の対象はvhdxのためvhdxを選択。

image.png

用途に合わせて選択。

image.png

出力先を設定して完了。

image.png

しばらく待つとvhdxが作成される。

※ここで作成されたファイルをエクスプローラー等でコピーした場合正しく起動しないので注意(移動はOK)

仮想マシンの複製

新規仮想マシン作成ウィザードから、複製元と同じ設定で仮想マシンを作成する。

仮想ハードディスクの接続

仮想ハードディスクの接続で先ほど複製した仮想マシンのvhdxを選択する。
image.png

EFI Bootファイルの作成

第二世代のHyper-Vからは起動がBIOSからUEFIに変更された。そのため、設定をしないと、以下の画面が出力されOSのブートが出来ない。

image.png

CentOSのインストールディスクのマウント

EFI Bootファイルの作成のためにOSをインストールした時のディスクをマウントする。
Windowsの場合もbcdeditを利用すれば復元できるかも(筆者未確認)

image.png

また、起動順を変更してCDブートが一番始めに来るようにする。

image.png

レスキューモードの起動

仮想マシンを起動すると、OSのインストーラが起動するが、普段とは異なり下図の順で遷移する。

「Troubleshooting -->」を選択

image.png

「Rescue a CentOS system」を選択

image.png

「1) Continue」を選択し、Enterを押すように言われるのでEnterを押すとレスキュー用のターミナルが起動する。

image.png

マウントポイントの確認

今回OSがインストールされているディスクをfdiskコマンドで確認する。

sh-4.2# fdisk -l | less

下図だと、一行目の結果から「/dev/sda1」である事わかるので、メモを取りqを押してlessを閉じる。

image.png

EFIファイルの作成

コピー元の仮想マシンをファームウェアを確認すると、efiファイルが存在する。
詳細のファームウェアディバイスパスの最後の「\EFI\centos\shimx64.efi」をメモしておく

image.png

メモした2つの事柄を利用して以下のコマンドを実行する

sh-4.2# /sbin/efibootmgr --create --label CentOS --disk <マウントポイントの確認でのメモ> --loader "<直前でメモしたEFIファイルのパス>"

実行すると、以下の図のようにBoot情報が設定される。

image.png

仮想マシンの再起動

一度、仮想マシンをシャットダウンする。

シャットダウン
sh-4.2# /sbin/shutdown -h now

仮想マシンの設定から、ブートディスクを取り外す。
取り外さないと、正しくブートできませんでした(一敗)

その後、仮想マシンの電源を入れると起動する。

おわりに

本来は、数年前の記憶でにHyper-VやVMwareを利用していた時のディスクイメージをコピーして終わりにする予定だった。
しかし、セキュアブートのせいで想定以上に時間がかかってしまった。

参考

https://noobient.com/post/165797742756/fixing-the-efi-bootloader-on-centos-7