前回、VMware ESXiからProxmox VEに仮想マシンを移行する手順を解説しました。
今回テストでVMware ESXi 8.0.2からエクスポートしたOVFテンプレートをProxmox VE 8.1環境にインポートしたところ、下記の様なエラーが発生してVMのインポートができませんでした。
transferred 26.9 GiB of 96.0 GiB (28.01%)
transferred 27.8 GiB of 96.0 GiB (29.01%)
transferred 28.8 GiB of 96.0 GiB (30.01%)
qemu-img: error while reading at byte 6750273536: Invalid argument
Logical volume "vm-100-disk-1" successfully removed.
copy failed: command '/usr/bin/qemu-img convert -p -n -f vmdk -O raw Win11/Win11-disk1.vmdk zeroinit:/dev/pve/vm-100-disk-1' failed: exit code 1
どうやらエクスポートした際に出力されたvmdkファイルがうまく読み込めない様子。
そのため、エクスポートしたvmdkイメージに問題ないかqemu-imgコマンドでチェックしてみました。
qemu-img check -f vmdk /mnt/pve/shokaku/esxi-to-pve/Win11/Win11-disk1.vmdk
No errors were found on the image.
しかし、結果としてはvmdkイメージにエラーは見つかりませんでした・・・
どうやらProxmoxのフォーラムでも同様のエラーが発生している方が複数人居るようで、特に今のところ解決策が示されたわけでもないようです。
今回は、vmdkイメージファイルに問題が無さそうなのにProxmox VE 8.1にインポートできない場合の対処方法を探ってみます。
今回は下記の手順でProxmox VEに追加したNAS上にファイルをコピーするので、NASを追加していない場合は下記記事を参考にしてProxmox VEにNASを追加してから作業してください。
VMFSから直接vmdkイメージファイルをダウンロードする

ESXiの管理画面を開き、「ホスト」→「管理」→「サービス」タブの順にクリックします。
サービス一覧の中に「TSM-SSH」というサービスがあるのでクリックして選択し、「起動」をクリックします。

WinSCPを開き、下記の通り指定して「ログイン」をクリックします。
項目 | 内容 | 備考 |
転送プロトコル | SCP | |
ホスト名 | 10.0.20.139 | ESXiのIPアドレスを指定します |
ポート番号 | 22 | |
ユーザ名 | root | |
パスワード | hogehoge | ESXiのrootアカウントのパスワードを入力します |

接続後「vmfs」というディレクトリをダブルクリックします。

続いて「volumes」をダブルクリックします。

開いた先にESXi上に作成したVMが格納されているデータストアを見つけてダブルクリックします。

各VM毎のディレクトリが表示されるので、移行したいVMのディレクトリをダブルクリックします。
今回はWin11を移行する対象として作業を進めていきます。

VMのディレクトリ内にある「<VM名>-flat.vmdk」を右クリックし、「ダウンロード」→「ダウンロード」の順にクリックします。

ダウンロード先を指定して「OK」をクリックします。

vmdkイメージファイルのダウンロードが始まるのでしばらく待ちます。
ダウンロードが完了したら、「<VM名>.vmdk」を右クリックし、「ダウンロード」→「ダウンロード」の順にクリックして同じくダウンロードします。
Proxmox VE上にVMを作成
今回はOVFテンプレートを利用しないため、事前にProxmox VE上に仮想マシンを作成する必要があります。

Proxmox VEのダッシュボードにアクセスし、「Create VM」をクリックしてVMを作成します。

「Create: Virtual Machine」の画面が表示されるので、「Name」欄に今回移行するVMの名前を入力し、「VM ID」をメモした上で「Next」をクリックします。

DVDドライブは利用しないため、「Do not use any media」にチェックを入れます。
今回はWindows 11のVMを作成するため、Guest OSの「Type」は「Microsoft Windows」、「Version」は「11/2022」を選択して「Next」をクリックします。

「System」画面ではEFI StoregeとTPM Storageの場所を指定して、SCSI Controllerを「VMware PVSCSI」に変更したうえで「Next」をクリックします。

「Disk」画面では後ほどvmdkイメージファイルをインポートするため、デフォルトで追加されているストレージの右にあるごみ箱アイコンをクリックし、削除した上で「Next」をクリックします。

「CPU」画面では、もともとESXiで作成したVMと同じコア数を指定して「Next」をクリックします。

「Memory」画面でも同じく、もともとESXiで作成したVMと同じRAMサイズを指定して「Next」をクリックします。

「Network」画面では「Model」を「VMware vmxnet3」に指定して「Next」をクリックします。

最後に確認画面が表示されるので、「Finish」をクリックします。
VMDKイメージファイルのインポート
Proxmox VEに追加したNASに「esxi-to-pve」というディレクトリを作成し、先ほどダウンロードした「<VM名>-flat.vmdk」ファイルと「<VM名>.vmdk」ファイルをコピーします。
コピーが完了したらTeraTermのようなSSHクライアントを使ってProxmox VEサーバにSSHアクセスし、下記コマンドを入力します。
cd /mnt/pve/<Proxmox VE管理画面で追加したNASの名前>/esxi-to-pve
#shokakuという名前でNASを追加した場合はcd /mnt/pve/shokaku/esxi-to-pve
先ほどコピーしたVMDKイメージファイルが保存されたディレクトリに移動するので、下記コマンドを実行してVMDKイメージファイルをインポートします。
qm importdisk <作成時にメモしたVM ID> <VM名>.vmdk <Proxmox VEのストレージ名> -format raw
#例えば、VM IDが100でコピーしたvmdkファイルの名前がWin11.vmdk、Proxmox VEのストレージ名がlocal-lvmの場合は下記の通り
#qm importdisk 100 Win11.vmdk local-lvm -format raw
すると、OVF Toolでエクスポートした物をインポートしたときに発生したエラーは起きず、下記の通り表示されてインポートが完了します。
transferred 91.3 GiB of 96.0 GiB (95.09%)
transferred 92.2 GiB of 96.0 GiB (96.09%)
transferred 93.2 GiB of 96.0 GiB (97.09%)
transferred 94.2 GiB of 96.0 GiB (98.10%)
transferred 95.1 GiB of 96.0 GiB (99.10%)
transferred 96.0 GiB of 96.0 GiB (100.00%)
transferred 96.0 GiB of 96.0 GiB (100.00%)
Successfully imported disk as 'unused0:local-lvm:vm-100-disk-2'
ディスクイメージをVMに追加する

Proxmox VEのダッシュボードより、VMDKイメージファイルをインポートしたVMを選択し、「Hardware」→「Unused Disk 0」をクリックした上で「Edit」をクリックします。

「Add: Unused Disk」画面が表示されるので、「Bus/Device」を「SCSI」に指定して「Add」をクリックします。

続いて「Options」→「Boot Order」→「Edit」の順にクリックします。

「Edit: Boot Order」画面が表示されるので、「scsi0」にチェックを入れた上で、「≡」をクリックしながらドラッグアンドドロップして「scsi0」が一番上に変更して「OK」をクリックします。

最後に「Console」→「Start Now」の順にクリックしてVMを起動します。

問題なくインポート出来ていれば、上図の通りVMが正常に起動します。
これでOVF ToolでエクスポートできなかったVMも移行できるようになります。
恐らくProxmox VE 8.1のバグのような気がしますが、修正されるまでは本記事の手順でVMware ESXiからProxmox VE 8.1にVMを移行できるので、お困りの方はぜひ参考にしてください。