ESXi8 から Proxmox へのお引越し

仕事絡みで VMware Server 1.0 あたりからずっとお世話になってきた VMware 製品ですが、この度 Broadcom 社に買収されたことにより永続ライセンス廃止→サブスクリプション化することを決定したようで、その結果無償版の ESXi が使えなくなる!と界隈で大騒ぎとなりました。

VMware by Broadcom : 製品ラインアップとライセンスモデルを大幅に簡素化

CentOS の Stream 化(事実上のOSS版廃止?)の混乱と同じく、”おうちデータセンター“勢だけではなく、仮想アプライアンスなど検証用のイメージを VMware の *.ova ファイルで提供してきた各メーカーさん方にも激震が走っていることでしょう(ハナホジ

というわけで、いつまでも VMware vSphere なんだか ESXi なんだかにしがみついていられなくなりそうなので、今度こそ真剣に Proxmox 環境への移行を検証することにしました。

おおまか手順

  1. Windows10 VM の SCSI コントローラを LSI logic SAS -> VMware Paravirtual に変更
  2. MBR2GPTt.exe を使ってファームを BIOS -> UEFI に変換
  3. ovftool を使って Windows10 の VM を win10.ova にエクスポート
  4. エクスポートした ova ファイルを Proxmox(以降PVE)にコピー
  5. PVE 上で ova ファイルを展開しインポート
  6. VM を起動する前に BIOS を UEFI に、SCSI コントローラを pvscsi に変更
  7. windows10 VM の起動確認

SCSI コントローラの変更

デフォルトの「LSI logic SAS」ドライブにインストールされた Windows VMを PVE にコンバートし、(多くのサイトで説明されているように) SCSI コントローラを「pvscsi」に変更したところでドライブを認識できずブルースクリーン(BSOD)になってしまう。

なんでやねん!ネットで調べた通りにしたのに。ヽ(`Д´)ノ

これは Windows が VMware Paravirtual のドライバを持っていないことが原因なので、仮想マシンの設定を編集するだけでは回復することができない。

かと言って PVE 上で「LSI logic SAS」に対応する他のコントローラを選択すればいいじゃないか、と思うところですが残念ながらうまくいかず。(MegaRAID SAS を選択するとドライブは見えたがブートできず、やはり BSOD になった。)

ならば、PVE にコンバートする前に VMware Paravirtul に変換できないかと調べたところ、意外に簡単な方法でアダプタ変換ができることがわかった。

参考: https://kb.vmware.com/s/article/1010398?lang=ja

  1. VM 編集画面を開き、「その他のデバイスの追加」→「SCSI コントローラ」を追加する。
  2. 「新規 SCSI コントローラ 」ができたら、「VMware Paravirtual」に変更する。
  3. 「ハードディスクの追加」→「新規ハードディスク」でダミーのディスクを追加する。後で削除するので容量は最小で良い。(ここでは 1MBで作成)
  4. 作成した「新規ハードディスク」の設定画面を開き、「コントローラの場所」に「SCSI コントローラ 1」(新しく追加したコントローラ)を選択し、保存する。


  5. VM を起動し、追加したドライブが認識されていることを確認する。
    ※ エクスプローラには表示されないので、「ディスクの管理」を開いて確認。
    ※ ディスクの初期化を求められるが、何もせずに閉じて良い。


  6. VM を停止し、追加したダミーのディスクを削除してから SCSI コントローラ 1 を削除。
  7. 既存の SCSIコントローラ 0 を LSI logic SAS から VMware Paravirtual に変更して起動。

これで PVE へコンバートした後に SCSI コントローラ に「pvscsi」を選択して起動できるようになりました。

起動ファームウェア変更(BIOS->EFI)

ぶっちゃけ、ここが一番面倒くさかった。そもそも vsphere 上で動かしている Windows10の VM を、再インストールすることなく移行し、かつ Windows11 にアップグレードしたいというのが目的ですが、マシンスペック以上にハードルが高いのが TPM 2.0 対応と セキュアブートへの対応

セキュアブート?何それ

いずれにせよ、BIOS + MBR でインストールされた Windows を、UEFI + GPT に変更するためにドライブに手を加えないといけないようだ。幸い、windows 標準の MBT2GPT というツールをすれば変換できるようなので、早速試してみる。

手順はほぼ下記のサイトと同じ…で苦戦しました。原因は、

  • システムドライブのパーティション数が4個以上ある
  • 回復パーティションを削除したら、WinREが無くなった
  • そもそもなんかディスクエラー出てない?

Windows11への移行に苦戦した話(MBR2GPT)

ハマった挙げ句、都度バックアップを取りながらひとつひとつ解決することに。

まず、diskpart を使って対象ディスクが「ディスク 0」であることを確認。

Shell

その辺のサイトに書いてある通り、「mbr2gpt.exe /validate /対象ディスク」して GPT への変更が可能かどうか、検証します。

Shell

「/allowFullOS」を使えと怒られますので、言われたとおりにします。

Shell

出ました、「Disk layout validation failed for disk 0」エラー。

これはシステムドライブ(C:\があるディスク)のパーティションが 3個以内という要件を満たしていないと思われます。 確かに「ディスクの管理」で確認すると、4個のパーティションに分かれています。

なぜか回復パーティションが二つありますので、古い方(回復パーティション4?)を削除します。こちらは通常の操作ではパーティションを削除することができませんので、diskpart を使用して削除します。

Shell

これでシステムドライブのパーティション数は3個になりましたので、改めて mbr2gpt コマンドを実施してみます。

Shell

今度は「Cannot find OS partition(s) for disk 0」エラー。出てきたメッセージで検索すると、どうやら回復環境の不整合やらが原因で発生するようでいろいろな情報が見つかります。

※ いろんなサイトで A◯MEI だの E◯seUS みたいなソフトを推してますが、ことごとく中華製ソフトなので…信頼するかどうかは貴方次第

というわけで(?)、Windows のインストールディスクから winRE.wim をコピーすれば良さそうです。手順については こちら で説明されていますが、インストールディスクのイメージ(windows10.iso)を右クリック→「マウント」します。当方の環境では (F:) にマウントされました。

f:\sources\install.esd があることが確認できました。先ほどのサイトを参考に、コマンドラインでインデックスを確認します。コマンドプロンプトを「管理者として実行」し、Dism コマンドを実行します。

Shell

移行対象の VM は Windows 10 Pro なので、インデックス:3 であることがわかります。

それでは、f:\sources\install.esd を 7-zipで開きます。

F:\sources\install.esd\3\Windows\System32\Recovery\ にWinre.wim がありました。これを「コピー」ボタンを使って任意の場所に保存します。

保存した Winre.wim を、Windows VM の c:\Windows\System32\Recovery\ にコピーし、winre機能の再起動を行います。

Shell

それでは、再度 mbr2gpt コマンドを試してみます。

Shell

validate(検証) はうまくいったようです。/validate を /convert に変えて GPT への変換を実行します。

Shell

「Failed」の文字にドキっとしますが、この時点ではまだ BIOS モードで起動しておりますので WinRE の構成変更が完了できない、ということだと思われます。一度 VM を停止し、「起動オプション」→「ファームウェア」を「EFI」に変更して起動しなおします。

なんだかうまく行ったようなうまく行っていないような…とりあえずは正常起動できているので問題なしとしています。WinRE を再構成した影響なのか、「システムで予約済み (D:)」ができていたり、回復ドライブが「557MB」しかなかったり何かおかしいです…。

diskpart で見るかぎり回復パーティションであることは間違いなさそうですが、不要なので (D:) と共に削除します。

Shell

ova エクスポート

※ エクスポートする前に、対象の VM が停止されていること、スナップショット作成されていないことを確認します。また VMware Tools がインストールされている場合は、proxmox へ移行する前にアンインストールしておきましょう。

Windows のように仮想ディスクが大きな VM は、Web コンソールからのエクスポートに失敗することがあるので、ovftool を導入してコマンドラインからエクスポートを実施します。ovftool の導入手順については公式含め参考サイトがたくさんあるので割愛します。

VM を OVF にエクスポートするには、以下のフォーマットで ovftool.exe を実行します。

ovftool.exe vi://ログインユーザ名:パスワード@ESXiのアドレス/対象のVM名 ファイル名

以下の情報で VM を OVF エクスポートする例

VM名win10-vm
ovftoolのインストール場所c:\ovftool
esxi のログインユーザ名root
esxi のログインパスワードpassword
esxi のアドレス192.168.1.254
エクスポート先e:\
HTML

e:\ に 4つほどファイルが出力されますので、これを リムーバブルディスクや NAS ストレージを使って proxmox のシェルで操作できる場所に配置します。

  • *.mf … ハッシュファイル
  • *.ovf … 仮想サーバの構成情報ファイル
  • *.vmdk … 仮想ディスクイメージ
  • *.nvram … 仮想メモリファイル

余談ですが、エクスポート先を「e:\ファイル名.ova」のようにすると ova 形式(*ovf や *.vmdk などを tar でまとめたもの)で単一のファイルにエクスポートしてくれます。インポート先が同じ vmware 製品である場合や、VM のバックアップも目的であれば *.ova 形式の方が管理しやすいです。

Shell

ova ファイルを proxmox へコピーする

エクスポートした*.ova ファイルを proxmox にインポートするわけですが、残念ながら windows OS の巨大な ova ファイルを保管する場所が proxmox にはありません。(/var/lib/vz/ などのスペースはあるのですが、VM やコンテナの置き場なので作業スペースとしては不適切です) USBリムーバブルディスクがある場合は、そこに ova ファイルを入れて proxmox でマウントするのが良いでしょう。

HTML

もし Windows で共有している NAS がある場合はもう少し簡単です。proxmox の webUI で「Datacenter」→「Storage」を開き、[Add]ボタンをクリックすることで NAS ストレージを追加することができます。

NAS ストレージの接続情報を入力し「Share:」をクリックすると、共有されているフォルダを検索してくれます。また、今後も ISO イメージやバックアップファイルの保管場所として NAS を利用するのであれば、「Content:」のドロップダウンメニューで「ISO image」「Container template」「VZDump backup file」等を選択しておくと良いです。(あとで変更することも可能)

NAS ストレージが追加され、「/mnt/pve/pve_backup」にマウントされていることがわかります。

proxmox の「>_ Shell」ボタンでシェルを開いて、NAS ストレージを参照します。

HTML

「/mnt/pve/pve_backup」がマウントされていることが確認できました。

ova ファイルの展開 & インポート

「/mnt/pve/pve_backup」で共有した*.ovf ファイルを使って VM を proxmox へインポートします。

Shell

インポートコマンドの書式は以下のとおりです。

qm importovf [VM ID] [ovfファイル] [格納先ストレージ] –format [ディスクフォーマット]

以下は VM ID を「300」、qcow2 形式でインポートしています。格納先ストレージは、デフォルトの「local-lvm」です。

HTML

正常にインポートが完了すると、VM ID で仮想マシンが表示されます。CPU、BIOS、SCSI Controller はデフォルト設定になっていますので、それぞれ「host」、「OVMF(UEFI)」、「VMware PVSCSI」に変更してから起動します。

まず起動ファームを BIOS から EFI に変更します。EFI ディスクを追加しろと言われてますので、併せてEFI ディスクを追加します。

メニューの「追加」→「EFIディスク」を選択すると、編集画面が表示されます。EFI ディスクは VM とおなじ「local-lvm」に作成しました。

CPU はデフォルトの「規定(kvm64)」のままでも起動しますが、Windows 11 のアップグレード要件を満たせないため「host」(proxmox機の実CPU) を指定します。

※ 古い AMD機 (AMD Ryzen1700)では残念ながら「host」では起動できず BSOD になりました。
(kvm64では起動可能) というかそもそも Ryzen1700は Windows11 非対応なので…

これで Windows 10 VM の移行が完了しました。ただ、機器構成の大幅な変更を伴っていますのでライセンス認証は必要ですのでご注意ください。(認証する前に Windows11にアップグレードしたらどうなるんだろう??)

カテゴリー: 未分類   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です