物理マシンを効率的に仮想マシンに変換する（Proxmox）

お世話になります。

物理マシンを仮想化することをP2V（Physical to Virtual）といいますが、今回以下のような構成で行ってみます。
できるだけIT管理者が負担にならない方法を目指すこととします。

流れ
1. Disk2VHDを使って物理ディスクを仮想ディスク（VHDX）に変換する
2. Proxmox上に中継ファイルサーバーを作り、/var/vz/imagesにシンボリックリンクを作成する
3. VHDXを変換してProxmoxのVMにアタッチする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/f19e6ee2-3631-7e5a-b1e3-2037f593000e.png)

まず物理SSDを仮想ディスク（.VHDXファイル）に変換します。マイクロソフト謹製のDISK2VHDというツールをダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/130abf86-84bd-da73-00cc-4e629183a86f.png)

exeを実行すると、保存先が指定できます。
トータルが120GBのSSDで、利用中なのは15GB程度でした。この15GBだけ可変ボリュームとして変換しますので、無駄な処理がなく、便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/34414778-4dab-dacc-746f-d8822b9e8b3c.png)

通常、保存先として、
・外付けUSBディスク
・ネットワークドライブ（NAS）
を指定することが多いですが、大量ボリュームのためNASだとGbEの制約で低速となり、SSDが数百ギガに及ぶ場合、かなり時間が待たされます。

また、外付けUSBディスクの場合はNASより多少早いものの、「いったんコピー」という形になるので、仮想サーバーまでの再コピーで2倍時間がかかってしまいます。また企業PCとしてはセキュリティ的に難点があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/5318ce90-f188-1a52-54f5-b8e7d222466e.png)


そこで今回は「直接Proxmoxサーバにアップロードする」という方法ができるか検証します。物理マシンの画面はいったんおいておきます。

こちらのサイトを参考にし、ProxmoxへのSSH接続&SMB共有としての中継サーバーを作ります。
https://taiyakon.com/2018/08/windowswinsshfs-vmubuntusshfssmb.html

中継サーバーからシンボリックリンクを貼るというのは素晴らしい発想だと思いました。
WinSSHFSを直接ゲストWin10にマウントすると不安定という情報があったので、このような中継方法のほうが安定しそうですし、複数のクライアントに効率的に対応できそうです。

ディストリビューションは何でもよいのですがTurnkey File Serverを利用しました。
ProxmoxでTurnkeyをインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/9036d561-04a0-5c70-0af5-38f530ddff58.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/718a98ad-4f46-96fa-8a67-3a334b1518f1.png)

クライアント側へのSMB共有ができました。前回のWin10マシンが不調になったため別マシンに切り替えています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/5328bc04-748e-ba69-3ab3-96f8693d0802.png)

続いて、中継ファイルサーバーにてsshfsをインストールします。

```
apt-install sshfs
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/7d51d2e4-9dee-f5ab-e655-cab9d3d4b02b.png)

空のフォルダを作成します。ここが中継点となります。Proxmoxへのシンボリックリンクを作るようなイメージだと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/9394b6eb-b5fe-5728-bbb2-20a829360c42.png)

SSHFSでマウントします。中にファイルがあるとエラーになってしまうので注意してください。

```
sshfs -o auto_cache -o reconnect  -o allow_other -o idmap=user  username@proxmoxserver:/var/lib/vz/images /srv/vhdx-transfer
```

SAMBAのWebminで改めてこのフォルダーを新規共有し、クライアントから見えるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/01bf4fe7-323c-a3e2-ffa4-235d4c53d8d1.png)

テキストファイルを置き、Proxmoxから見えることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/13da6a85-3afd-14f0-bdcf-0a531437261b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/9e821af8-516c-e4ff-99f8-c241bd8d7ecb.png)

ここでDISK2VHDの操作に戻ります。ディスクイメージの出力先（コピー先）として先ほどのvhdx-transfer共有フォルダを指定します。

交換したマシンはクリーンインストール直後なので、9GBで済むようです。
ファイル名はシリアル番号など、会社で決めている管理名で分かりやすくしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/2ee6f3aa-cd8e-0c2a-8d86-9be5062f5269.png)

P2V成功後の確認用にテキストファイルを作っておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/8a3d25b1-307d-6920-28dc-60cc47b75ab8.png)

移行が開始します。残り時間が表示されるのが便利です。古いHDDを積んだPCやサーバーだと数時間はかかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/e57ae99e-92e6-5264-09f8-fd6a8590331c.png)

エクスポートが完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/393ebb80-39e1-8788-0f13-cc49d1e8dd44.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/e3ad014d-7df6-ca38-e230-776f00c72300.png)

続いて、このディスクの受け皿となる仮想マシン（VMWareでいうところのコンピューティングリソース）をProxmox側で先に作っておきます。
以下のサイトを参考にさせていただきました。
https://www.youtube.com/watch?v=nriWlbCXKmU

既存の仮想マシンと区別するためマシンIDは201としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/db3a30f9-6594-2f85-97ce-5810b6e01748.png)

新規ディスクを作成しますが、これは一時的なダミーで、このダミーを物理マシンのvhdxファイルで上書きし、OSとして起動させるような流れになります。（今回のポイントとなります）

また通常Virtio-SCSIという準仮想化ドライバを使いますが、今回は初回起動時のドライバ読み込みのトラブルを避けるためにSATAのエミュレーションとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/d3b0dd99-67e1-c44c-5a5d-ff5db815b9d2.png)

vm-201-disk-0というダミーディスク名をメモしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/7c5168cd-a57b-d885-1451-44a7a64285a8.png)

先ほどP2VしたVHDXを、QCOW2というKVMの推奨形式に変換し、同時にダミーディスクを上書きしますます。シェルから以下のコマンドを実行します。

```
qemu-img convert -O qcow2 /var/lib/vz/images/WIN-1TMGC5NI0K6.VHDX /var/lib/images/201/vm-201-disk-0.qcow2
```

ここでエラーになってしまいました。QCOW2への変換を想定していましたが、LVM-Thinによるブロック単位でのコントロール（シンプロビジョンやスナップショット機能）をしている場合、RAWイメージしか使えないようです。LVM-ThinはProxmoxの標準インストール方式です。
https://forum.proxmox.com/threads/qcow2-unavailable-grayed-out-4-2.27482/

本家のユーザーフォーラムによると、LVM-Thin運用の場合、vhdxをRAWとして直接インポートできるようです。
https://forum.proxmox.com/threads/converting-vhdx-to-raw.36354/
以下のコマンドを実行しました。

```
qm importdisk 201 /var/lib/vz/images/WIN-1TMGC5NI0K6.VHDX local-lvm
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/d76c60bd-b261-cf24-7f66-9b6241d25050.png)

変換は早く、数秒で終わりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/6f55266f-db67-a38c-0c7d-61c9b1e73458.png)

ハードウェアのオプションを見ると、しっかり認識されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/e5f9d942-aa80-467f-677d-449f97923452.png)

SCSIをSATAに変更してアタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/adb7d44f-f4a8-9813-8439-78e4ee3976b1.png)

このような状態になることを確認します。また、ブート順も変えておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/ba490ded-fea1-e558-b356-6e410a1575cc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/641110fc-9f11-ae98-4431-e330316a231f.png)

起動が開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/df7d1dca-97f3-e7c3-39a3-75a39cd5eeed.png)

とくにドライバの再起動など求められることなくすんなりと起動しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/fb64fcbb-d4be-28f2-3e1f-3d91b361a296.png)

変換元となったVHDXは削除するか、ユーザーアクセス権限のない場所にしばらく保存しておくなど想定されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790864/891a798d-50f8-2858-69cf-1c1701857d6a.png)

中継サーバーを同じProxmox上に作っておくことで、SAMBA共有とSSHでの二重コピーとならず、迅速にP2Vができることが確認できました。

また、KVMへのP2VツールはCloneZillaが有名ですが、USBブートを各マシンで行う必要があります。今回はWindows上から実行し、かつ外付けディスクも不要なため、社内ネットワークにさえつながっていれば完全リモートでも可能と思われます。