見出し画像

ProxmoxにESXiからゲストをインポート


他の仮想基盤製品をProxmoxに移行

よくある話でProxmoxに今まで使っていた仮想マシンを移植したいと思うのは当然のこと。代表例としてESXiで動いている仮想マシンを移行してみる。
細かな部分はこちらを参照して欲しい。

■標準的な移行の説明

■P2V,V2Vに関する説明

ESXiとの接続

まずはESXiに接続してデータストアの情報が見れるようにする。
[データセンタ]-[ストレージ]-[追加]-[ESXi]

[追加]ボタンを押すとリストが展開される

 ID               :接続先のESXiまたはvSphere名
 サーバ  :ESXiorvSphereのIP
 ユーザ名 :rootまたはAdministrator等
 パスワード:rootまたはAdministratorのパスワード
 ノード  :登録先のProxmox名
 有効   :■
 Skip Certificate Verification:■※
 ※外部で証明できる有効な証明書があれば:□

VMwareへの接続情報を登録
「esxi6」が無事に追加された

ESXiからのVMインポート(Windows編)

例として「Win2019」と書いてあるゲストをインポートする

接続先のESXiの状態

仮想ハードウェアの情報はこんな感じ

仮想マシンのプロパティ

それでは早速インポートしてみよう。先ほどESXiの認証情報を使って接続したストレージの配下に仮想マシンの仮想ディスクリストが表示されるので選んでインポートをクリックする。
[データセンタ]-[ノード名]-[ESXi名]-[Virtual Guests]-[インポート]

「Win2019」をインポートしてみる

インポート用の設定ウインドウが開くので以下を参考に設定する。
 VM ID   :既存とぶつからない番号
 ソケット :ESXiからの引継ぎ数または任意の数値
 コア   :ESXiからの引継ぎ数または任意の数値
 メモリ  :ESXiからの引継ぎ数または任意の数値
 名前   :ESXiからの引継ぎ名または任意の名称
 CPU type :既定値(動作可能なタイプに修正)
 OS種別  :既定値
 バージョン:既定値
 Default Storage :インポート先のストレージ
 形式     :qcow2
 Default Bridge  :VM割り当て用のBridge用NIC名
 Live Import  :□インポート後に起動する場合はチェック

ESXi上でゲストが起動していると上記「警告」が表示される。※事前に停止すること。
事前に細かな調整する場合はここ

インポートが開始されるとこんな感じで進捗が表示される。インポート速度はネットワーク帯域とストレージ側の処理性能、今回で言うとESXi側の処理性能、Proxmox側の処理性能によって変わる。もちろんインポートディスクが大きければそれだけ時間もかかるので事前に自分の環境でどのくらいの転送性能がでるのかは、実験しておくと良い。

ちなみに、今回のゲストは・・・150GBで15時間もかかった。前にテストした感じだと1時間もあれば終わってるハズだったんだけど。どうしてだろう?

「インポート」を押下するとこんな感じで進む
複数ディスクがある場合は順番に転送される
最後に「TASK OK」と出てくれば終了
転送後の仮想マシンの状態

【インポートテスト(環境による差が大きい部分)】

 ■インポート構成①
 ・1Gbps1本:NAS→コンバート→NAS
    16GB:  6分
    40GB:13分
  100GB:30分
 ■インポート構成②
 ・1Gbps1本:ESXiローカルSSD→コンバート→NAS
  120GB:30分

【インポート後の対応】

ここは一発インポートした仮想マシンを「開始」してみる。普通に起動するのかと思いきや・・・予想通りの画面である。

Windows系はいきなり起動するとエラーになる

移行直後のハードウェアはこうなってるのでProxmoxで起動できるように再調整する。基本的にハードウェア設定の修正が反映されるタイミングは仮想マシンが再起動ではなくシャットダウンされた状態となるので設定変更タイミングは注意すること。

ここを弄って調整する

①ハードディスク
 [ハードディスク(scsi#)]-[デタッチ]

デタッチすると「未使用のディスク」として表示される

 [未使用のディスク #]-[編集]-[追加]

「バス/デバイス」がIDEになっているのを確認して「追加」

すべてのハードディスクを同じようにIDEとして追加し直す。

(scsi → ide となったことを確認)

②とりあえず、ここまで修正できたら「開始」をクリックする。どうだろう?Windowsのログイン画面が無事に表示されたかな?

ここまでくれば一安心

コンソールから「A」→「■■ ■ (Ctrl+Alt+Delの略)」をクリックする

キーボードショートカットがないのが残念

③VMwareToolsのアンインストール

以前の仮想化ドライバーをアンインストール

④VirtIOドライバーのインストール
 isoは事前にダウンロードして準備しておく。
 https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers

「CD/DVDドライブ」の編集からisoを設定
「virtio-win-gt-x64.msi」を実行

⑤Windowsの「SCSIコントローラ」をVirtIO SCSIに変更
 ここは仮想マシンをシャットダウンしてから実施する。

選択して「編集」をクリック
「VirtIO SCSI」を選択
「VirtIO SCSI」になったことを確認

⑥WindowsのハードディスクをSCSIタイプに変更
詳しくはこちらを参照
■Windows 用準仮想化ブロック ドライバー
https://pve.proxmox.com/wiki/Paravirtualized_Block_Drivers_for_Windows

単純にハードディスクタイプをSCSIに修正するだけではブルースクリーンとなって正常に起動できないので以下の手順を踏む。この部分を詳しく書いた記事があまりなかったので手探りで調べてみた。

「VirtIO Block」のディスクを一時的に追加する

VirtIO Block で 1GBの小さなディスクを作成
追加されたことを確認する

仮想マシンを起動して追加したディスクが「ディスクの管理」に表示されることを確認する。ディスクとして認識できればOKなのでフォーマット等は必要ない。

1GBのディスクが認識されたことを確認

仮想マシンをシャットダウンして初めに追加した1GBのディスクを削除してから元のOSディスクタイプを「VirtIO Block」に修正する。

ディスクを再登録する順番は要注意。起動用ディスクから登録する。

仮想マシンを起動すると今度はSCSIドライバー起動としてサクッと起動が完了する。IDEに対してずいぶんと起動時間が短縮される。

起動後のディスクのプロパティでは「Red Hat VirtIO SCSI Disk Device」として表示された。

SCSIタイプとして認識されたことを確認
デバイスマネージャーでも確認

⑦ネットワークデバイス
 [ネットデバイス(net0)]-[編集]-[モデル]
 ・Intel E1000 → VirtIO(準仮想化)

モデルを「VirtIO(準仮想化)」に変更

⑧その他
 ・Windowsのライセンス認証を要求されるので再認証を実施する
 ・デバイスマネージャー等でエラーとなったものを修正する
 ・イベントログでエラーとなったものを修正する

VMwareTools がアンインストールできなくなった場合

以下のPowerShellスクリプトを保存して実行する。実行後に再起動すればアンインストールは完了する。

「Continue(y/n):」がでたら「y」
完了したら再起動

Remove_VMwareTools.ps1


ESXiからのVMインポート(Linux編)

例として「CUPS」と書いてあるゲストをインポートする
ちなみにCUPSはプリントサーバです。我が家でスマートフォンやChromeBookから一般プリンターを使うために踏み台にしています。
https://www.cups.org/

接続先のESXiの状態

仮想ハードウェアの情報はこんな感じ

仮想マシンのプロパティ

それでは早速インポートしてみよう。先ほどESXiの認証情報を使って接続したストレージの配下に仮想マシンの仮想ディスクリストが表示されるので選んでインポートをクリックする。
[データセンタ]-[ノード名]-[ESXi名]-[Virtual Guests]-[インポート]

「CUPS」をインポートしてみる

インポート用の設定ウインドウが開くので以下を参考に設定する。
 VM ID   :既存とぶつからない番号
 ソケット :ESXiからの引継ぎ数または任意の数値
 コア   :ESXiからの引継ぎ数または任意の数値
 メモリ  :ESXiからの引継ぎ数または任意の数値
 名前   :ESXiからの引継ぎ名または任意の名称
 CPU type :既定値(動作可能なタイプに修正)
 OS種別  :既定値
 バージョン:既定値
 Default Storage :インポート先のストレージ
 形式     :qcow2
 Default Bridge  :VM割り当て用のBridge用NIC名
 Live Import  :□インポート後に起動する場合はチェック

「SATA」を使ってると「警告」が表示される?
事前に細かな調整する場合はここ

インポートが開始されると進捗が表示される。ちなみに、今回のゲストは・・・16GBで42分かかった。前にテストした感じだと6分もあれば終わってるハズだった。環境の違いか?

最後に「TASK OK」と出てくれば終了
転送後の仮想マシンの状態

【インポート後の対応】

ここは一発インポートした仮想マシンを「開始」してみる。普通に起動する・・・おそらく元からSCSI系のドライバーでディスクが認識されていることが理由らしい。

Linux系はいきなり起動してもOKらしい

移行直後のハードウェア設定については少し最適化しておく。基本的にハードウェア設定の修正が反映されるタイミングは仮想マシンが再起動ではなくシャットダウンされた状態となるので設定変更タイミングは注意すること。

ここを弄って調整する

①「SCSIコントローラ」をVirtIO SCSIに変更
 ここは仮想マシンをシャットダウンしてから実施する。

選択して「編集」をクリック
「VirtIO SCSI」を選択
「VirtIO SCSI」になったことを確認

②ネットワークデバイス
 [ネットデバイス(net0)]-[編集]-[モデル]
 ・Vmware vmxnet3 → VirtIO(準仮想化)

モデルを「VirtIO(準仮想化)」に変更

仮想マシンを起動してコンソールを開いて以下のコマンドを実行してインターフェースを認識しているか確認する。

# ip add
「enp6s18」が認識されたNIC

エディタでネットワーク設定を編集する

cd /etc/netplan
sudo vi  00-installer-config.yaml
 :ens160 → enp6s18

編集前がこの状態

ESXiの時は「ens160」として認識

編集後はこの状態

「enp6s18」に変更するだけ

ネットワーク設定を有効化する

sudo netplan apply

Pingを実行してネットワークが開通したことを確認する

ping 192.168.1.254

今回はインターネットに接続できる環境なのでチョイチョイとエージェントをインストールしてみる。

sudo apt install -y qemu-guest-agent
sudo systemctl enable qemu-guest-agent
sudo systemctl start qemu-guest-agent

できればエージェントをインストールしておきたいが、できなかった場合はそのまま使うことになるかな。

ESXiからのVMインポート(コマンド編)

インポートとの流れとしてはProxmoxサーバから VMDK ファイルにアクセス可能な環境をつくりディスクイメージを QCOW2 に※変換。仮想マシンのディスクとして紐づけする。
※Proxmox自体はvmdkに対してアクセスできるのでqcow2への変換は必須ではないけれど、ケジメ?

ESXiのデータストア[NAS]をマウント

ESXi側のストレージは様々な形態であるため、環境にあった方法でVMDKにアクセスできるようにすること。

「esxiDatastore」としてマウントした

今回はESXi上で動かしていた「Minecraft」サーバをインポートしてみる。
まずはインポート先となる仮想マシン「フォルダ」を作成する。
Proxmoxで仮想マシンを作成するが、ポイントは新規で仮想ディスクを作成せずに仮想マシンの構成のみ手動で実施する。
[VMを作成]-[全般]-[OS:メディアを使用しない]-[システム]-[ディスク:なし]-[CPU]-[メモリ]-[ネットワーク]

仮想マシン構成を作成(ディスクは接続しない)

イメージのコンバートを実行する

# qemu-img convert -f vmdk /mnt/pve/esxiDatastore/Minecraft/Minecraft.vmdk -O qcow2 /mnt/pve/NAS_Storage/images/1001/vm-1001-disk-0.qcow2

動きをみる限り vmdk を読み出しながら qcow2 として書き出している。その進捗が表示されるとわかりやすいが、コマンドの実行としては応答待機状態となるのでわかりにくい。 書き出し先で ls -la を実行すると徐々にファイルサイズが大きくなるのがわかる。

移行元のディスクサイズ 40GB 、 移行先のディスクサイズ 18GB
タイムスタンプから推測すると 18GBの転送:16分くらい? これも環境によると思われる。転送容量は実用量と思われる。1GBで1分くらいの感覚。

disk-0とdisk-1ができた

ディスクを追加する。WebGUIから既存のディスクイメージを接続できれば良いが現在はコマンドのみで実行可能。

■パスは環境に合わせて変更する
qm set <VMID> -virtio0 /mnt/pve/NAS_Storage/images/<VMID>/vm-<VMID>-disk-0.qcow2

「update VM <VMID>」が表示されればOK
「ハードディスク:40GB」が追加されたことがわかる

とりあえず、起動してみる。。。

ディスクを認識してない?

なにが不味かったのか調査。
ディスクのコンバートのやり直し・・・vmdkとしてマウントする。scsiやideとしてマウントやり直す。色々試したけどダメだった。
あと、コンバートをやり直したらディスクは1個だけとなった。理由は不明。

色々悩んでいると、ふと気になったので仮想マシンの構成データを直接確認してみる。

■普通に起動できるLinux系設定
/etc/pve/qemu-server# cat 1000.conf
boot: order=sata0;scsi0
■今回起動できないLinux系設定
/etc/pve/qemu-server# cat 1001.conf
boot: order=net0

なるほど、起動対象情報としてディスクがなかったのね。

「ブート順」を編集

[編集]をクリックして起動情報を編集する

「virtio0」を有効化して先頭に移動
この状態となるよう編集
「ブート順」の先頭に[virtio0]が表示

はい、起動してみる。
わかってしまえば簡単である。

正常に起動

あとはネットワークの修正です。仮想マシンをインポートした場合はNIC名称が変更となるので新しく認識したインターフェース名に修正すれば完了。


いいなと思ったら応援しよう!