How to: Migration from VMware ESXi to Proxmox — Cheat notes, Gotchas, performance improvement tricks, and other notes people don’t tell you.

Truvis Thornton
6 min readApr 13, 2024

--

We all heard about how Broadcom bought out VMWare and killed off ESXi. While still usable, we can only wonder how licensing will change and updates as time progresses. For me, I’ve decided to migrate all my servers to Proxmox and it has been great. While different, it has been great.

While there are many guides out there, each with their pros and cons, this is what I found to be quick and easy for a homelab environment. Proxmox does have an entire lengthy guide of options to use at https://pve.proxmox.com/wiki/Migrate_to_Proxmox_VE if you so choose to follow that route.

One thing to keep in mind, is that the VMs will run best with the VirtIO driver installed. Since Windows does not come with VirtIO driver support out of the box, use IDE or SATA for the disk bus type at first when migrating existing Windows VMs. After the migration, additional steps are necessary for Windows to switch the (boot) disk to VirtIO SCSI. Otherwise, while these work, performance will be capped for high performing systems.

Linux-based VMs will support the paravirtualized VirtIO drivers out of the box, unless they are ancient. Support has been present since kernel 2.6.x.

You can get the latest ISO with the drives and agent here:

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/?C=M;O=D

Prepare for Migration

Enable SSH Access:

Navigate to services and start the SSH service. If you have any firewall rules blocking this, you will also need to disable them.

Shut the machines down:

Need to turn the machines off in order to properly pull the machines over.

Migrating

We need to download the OVFTool to our Proxmox machine.

As of writing the latest version of ovftool is 4.6.2. The downloads can be found here. The top link points to the VMware customer connect site where the installer variants can be found for Windows, Linux and MacOS. All the other links point to the ZIP based variants for the same OS’es.

Installing:

After the Linux installer is downloaded, mark it as executable.

kitten@prox:~/Downloads$ chmod +x VMware-ovftool-4.6.2-22220919-lin.x86_64.bundles

Run the installed and accept the license.

kitten@prox:~/Downloads$ sudo ./VMware-ovftool-4.6.2-22220919-lin.x86_64.bundle

Now you should be able to run it

kitten@prox:~$ ovftool --version
VMware ovftool 4.6.2 (build-22220919)

Possible Errors during migration.

If you get an error about an ISO not found like below see if the VM has an ISO loaded and remove it.


Windows.iso was not found,
Fault cause: vim.fault.FileNotFound

If you get this error you need to see if there is a pass-through video card or another device that needs to be removed.

Error:
— Unknown device: ‘PCI device 0’.
Completed with errors

If your machines have these, go ahead and remove these devices from your VMs.

VM Exporting:

Run the OVFTool on the proxmox machine to bring over the VM.

ovftool vi://{USER}@{FQDN/IP}/{MACHINE NAME} /{PATH}/{TO}/{DOWNLOAD}

Example:

ovftool vi://root@192.168.2.100/machine /root

You should see something like this:

root@prox:~# ovftool vi://root@192.168.2.13/edge /root
Enter login information for source vi://192.168.2.13/
Username: root
Password: **********
Opening VI source: vi://root@192.168.2.13:443/edge
Opening OVF target: /root
Writing OVF package: /root/edge/edge.ovf
Disk progress: 10%
...

VM Importing:

Now we have two options. We can either import the machine directly, or creating the machine manually in Proxmox and then attach the drive. I personally went with manually creating the machine and adding the drive. I found this to be easier for me and this is the direction I will go. If you choose to just do an import, there is nothing else needed other than to run the comand and power on the machine.

NOTE: Remember, when you create the machines to properly set them as BIOS or UEFI so the disk boots properly. You can check on VMWare side here:

You will also be able to see the status of the export:

VM Import: (not created):

qm importovf {NEW ID} {VM NAME}/{VM NAME}.ovf local-lvm

Disk Import: (vm already created):

{INSTANCE ID} {VM NAME}/{VM NAME}.ovf local-lvm

You should see something like this:

root@prox:~# qm importdisk 106 edge/edge-disk1.vmdk local-lvm
importing disk 'edge/edge-disk1.vmdk' to VM 106 ...
Logical volume "vm-106-disk-0" created.
transferred 0.0 B of 30.0 GiB (0.00%)
transferred 307.2 MiB of 30.0 GiB (1.00%)
transferred 614.4 MiB of 30.0 GiB (2.00%)
...
transferred 30.0 GiB of 30.0 GiB (100.00%)
transferred 30.0 GiB of 30.0 GiB (100.00%)
Successfully imported disk as 'unused0:local-lvm:vm-106-disk-0'

If you go the disk import method, on creation do this:

You will need to add the disk after import

Lets set the disk order so the disk boots first. It also will need to be enabled if you did an import.

Now lets boot the machines up and fix the networking:

On Windows install the drivers and agent by attaching the ISO. After install, reboot. Then navigate to the Device Manager to show hidden devices and remove the old network adapters as we will be using the VirtIO (make sure you set that under the network settings (its default on creation):

continue and now delete. Now do a reboot and configure the new adapter as needed.

On Linux we do the same but we don’t have to do the driver install or device removal. We need to change the device name. Do an ip addr to find the device and then update that in the correct config file. This will vary depending on your Linux machine.

Agent Install:

You can follow the full steps here if you choose to add it.

https://pve.proxmox.com/wiki/Qemu-guest-agent

And that is all. Once you do a few it goes pretty fast!

Useful links

OVF Tool — Downloads (Installer via Customer Connect)

OVF Tool — Downloads (ZIP)

OVF Tool — User Guide

OVF Tool — Release notes

☕ Like what you read? Did it help you?

Send some coffee and love https://buymeacoffee.com/truvis :)
Your support helps pay for licenses, research & development, and other costs that allow me to bring you new guides and content!

❗If you are new to my content, be sure to follow/connect with me on all my other socials for new ideas and solutions to complicated real world problems and jump start your career! New content drops daily/weekly along with tips and tricks :)

👉 W: https://truv.is
👉 T: https://twitter.com/thattechkitten
👉 Y: https://www.youtube.com/@TRUValueInformationSecurity
👉 G: https://github.com/truvis
👉 L: https://www.linkedin.com/in/truvisthornton
👉 M: https://medium.com/@truvis.thornton

--

--

Truvis Thornton

🛡Cyber Defense Architect 🕵🏼‍♂️Threat Hunter/Researcher 👨🏻‍🔬Detection Engineer 👨🏻‍💻SIEM/SOAR/SOC 💡Follow for new ideas and solutions