Hyper-VのWindows仮想マシン(UEFI)をProxmoxへ移行する

# はじめに

仮想基盤のOSS化でHyper-VからProxmoxへ移行することになり、
Hyper-Vの**第二世代**で動かしている**Windows10**を移行として詰まったので、
ノウハウとして記録しておく。

KVMではインポートってだけにいかないのでちょっと大変:scream_cat:

## バージョン,OSなど

```
- Proxmox バージョン: v8.2.2
- Hyper-V OS: WindowsServer2022
- Windows10 仮想マシン世代: Hyper-V第二世代 
```

## 移行手順

### 1. VMをエクスポートし、Proxmoxへ転送する
- Hyper-Vの機能を使ってVMをエクスポートする(.vhdxファイル)
- Proxmoxサーバへvhdxファイルを転送する

### 2. Windows用の仮想デバイスドライバのISOを入手してProxmoxのライブラリにアップロードしておく

https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers

### 3. Proxmoxに移行先のVMを作成する

> Hyper-Vの仮想マシンはImportだけで動かすことはできない。

- OSでWindowsを選択し、VirtIOのドライバISOを設定しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/a5ac80e0-28d5-93d0-43e7-8bcd93d648fd.png)

- システムでBIOSにOVMF(UEFI)を選択・EFIディスクを追加しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/cf8e14a1-5000-f831-319e-04331fd7773b.png)

- 初期設定されているディスクを削除する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/9e8fa3ac-2d05-4efd-e899-294ea57942f3.png)

### 4. vhdxファイルをインポート

ProxmoxのストレージにVMディスクとして登録する
> vhdxをインポートした場合raw型に変換されて登録される
```
# qm importdisk <VMID> <vhdx> <storage> 
qm importdisk 101 foo.vhdx local-lvm
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/e1761e61-67da-a349-63e8-1f537b1a23f9.png)


### 5. 仮想マシンにディスクを接続

- インポートしたディスクは未使用のディスクとして登録されるので、`SATA`を選択してディスクを追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/75441d6f-38b2-f2d0-b265-c32def89ce9a.png)

- オプションからsata0を有効化してBoot順を変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/9fbe7c60-cd09-7d33-4b8a-af5a127c0b8a.png)

### 6. VMの初回起動及びVirt-IOの設定

- VMを起動するとWindosロゴがProxmoxロゴに置き換えられた状態でWindowsの起動が始まる。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/3317ac53-8f37-e09c-d14b-8aaa9c66b1e2.png)


- Windows用の高速な仮想ドライバをインストールする
  仮想マシン作成時に指定したvirtio-winのIsoのインストーラを実行する
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/08e23862-5817-a776-d49b-3fb03b09d230.png)
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/7c1580f9-ac30-1d6e-d8df-90706ad87229.png)
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/8a3f475f-c160-4bdc-10bd-b7831b54362a.png)

### 7. ディスクの接続方式をSCSI(VirtIO SCSI single)に変更

- SATAディスクをデタッチ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/0023d2a1-eacc-6443-788f-86d4f86166a8.png)

- SCSI(VirtIO SCSI single)で再接続する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/e70b8aed-489e-9928-c27a-26f30f2921f2.png)

- 再度Boot順を調整
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131606/5083e9e9-8c78-9213-2d75-c1716ced83e8.png)


### 8. 再度起動すれば完了

正常に起動すればOK！
> 初回はブルースクリーンがでるかも。

VirtIOドライバを入れたことでネットワークデバイスも利用できるようになっているはず:smile:

もう少しさくっといけたらな～。
おつかれさまでした。

## SSD環境のProxmoxだと上記でうまくいかない？

別のSSD環境のProxmoxに取り込もうとしたら上記手順ではうまくいかなかった。
> SSDが原因じゃないかもしれないがブルースクリーンが初回以降も発生してWindowsが起動せず・・・。

なんとか解消した際の流れも残しておく。
公式にあったSCSI(VirtIO SCSI single)のダミーディスクと**一緒に起動**すると動いて、
そのあとだとダミーディスクなしでも動くようになった。

> 公式だとダミーディスクはドライバインストール用で、ディスク外してから単独起動しているぽかったから、ダミーは関係なさそうに思えるのだけど正しい動きなのだろうか？
https://pve.proxmox.com/wiki/Paravirtualized_Block_Drivers_for_Windows

```
1. VMディスクをSATA接続する
2. SCSI(VirtIO SCSI single)の１GBのダミーディスクを作成する
3. ブート順を調整してVMディスクで仮想マシンを起動する
4. デバイスマネージャで追加ディスクが認識されていることを確認する
5. 仮想マシンを停止し、VMディスクをSCSI(VirtIO SCSI single)で接続しなおす
6. ブート順を調整してVMディスクで仮想マシンを再度起動し、ブルースクリーンにならないか確認する。
7. 仮想マシンを停止し、ダミーディスクをデタッチする。
8. ブート順を調整してVMディスクで仮想マシンを再度起動し、ブルースクリーンにならないか確認する。
```