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](https://qiita-image-store.s3.amazonaws.com/0/64655/ecf5b905-8239-2808-ac77-10c699da808c.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/c7086ea2-21fe-25bd-6661-508d71b7d7a5.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/e8676455-083f-b9b0-793a-ea2b17989bda.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/0c300acc-469d-c06e-6924-0c3adc27467a.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/48467e19-2604-eea7-3c22-092f08c089f7.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/a2d4746d-894c-1e1b-8a20-e53a4e601ece.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/3d952412-8fc0-bbaf-e0fa-59a971f286f2.png)


# Hyper-Vの設定

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/e9119cd0-8037-4377-860e-b56f64e5d819.png)

# OSのインストール

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

# vhdxのコピー

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

## チェックポイントの削除

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/d51ac2a6-38b4-f316-fa97-e4c8c8187404.png)

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

## vmdxのエクスポート

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/2b7d3983-ce88-b6ac-82a0-17b5910cb451.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/056c971a-db04-dacf-027a-14e69b5eddf6.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/baa90258-cd99-d3ad-e40e-0e75af2ff94c.png)

用途に合わせて選択。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/7c69d94d-51dc-d97a-ba28-484adbbce458.png)

出力先を設定して完了。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/1c9e65a5-401f-c97f-82df-e2e981aceb1f.png)

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

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

# 仮想マシンの複製

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

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

仮想ハードディスクの接続で先ほど複製した仮想マシンのvhdxを選択する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/c159a246-e33e-990c-0fdb-9d35606e0bf8.png)

## EFI Bootファイルの作成

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/76e26222-5c0f-ef8e-4923-5e2c35f13c09.png)

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

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/31837acd-3df6-9cd1-ab34-2dd975afffcf.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/4eb3a566-986a-f882-4a5e-a5db0186fb01.png)

### レスキューモードの起動

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

「Troubleshooting -->」を選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/e0fc5e63-3dcb-7c8f-2d56-e62444b616bd.png)

「Rescue a CentOS system」を選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/1dcbd78b-cab1-c939-54cf-78d206744144.png)

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/f9959c80-12b6-2c3c-8a70-94d8553ac9da.png)

### マウントポイントの確認

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

```bash
sh-4.2# fdisk -l | less
```

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/bb4e3b01-c763-4ebc-6c94-4530d698f998.png)

### EFIファイルの作成

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/40fff957-0fe0-ef35-6a46-6e7d2a80eb93.png)

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

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

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

![image.png](https://qiita-image-store.s3.amazonaws.com/0/64655/ddc83e36-f7e0-ab71-02a4-04dfa4931979.png)

### 仮想マシンの再起動

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

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

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

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

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

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