<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Migration on rHomelab</title><link>https://rhomelab.com/tags/migration/</link><description>Recent content in Migration on rHomelab</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Tue, 15 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://rhomelab.com/tags/migration/index.xml" rel="self" type="application/rss+xml"/><item><title>Migrating from VMware ESXi to Proxmox: What Actually Breaks (and How to Avoid It)</title><link>https://rhomelab.com/proxmox/migrating-esxi-to-proxmox/</link><pubDate>Tue, 15 Sep 2026 00:00:00 +0000</pubDate><guid>https://rhomelab.com/proxmox/migrating-esxi-to-proxmox/</guid><description>A practical walkthrough of moving VMs off VMware ESXi and onto Proxmox VE - export paths, disk format conversion, the network and boot-firmware gotchas that actually break guests, and how to avoid a mid-migration mess.</description><content:encoded><![CDATA[<p>The Proxmox-vs-ESXi comparison on this site already covers why so many homelabbers are moving off VMware since the Broadcom licensing changes gutted the free ESXi tier. This one skips the &ldquo;should I switch&rdquo; question and gets into the part that actually trips people up: what breaks when you move a real VM from ESXi to Proxmox, and how to get ahead of it instead of debugging a guest that won&rsquo;t boot at 11pm.</p>
<p>None of this is exotic. It&rsquo;s the same category of friction you&rsquo;d hit moving between any two hypervisors with different virtual hardware models. The fixes are well understood, but only if you know to expect them before you start.</p>
<h2 id="plan-before-you-export-anything">Plan before you export anything</h2>
<p>Before touching a single VM, build a short inventory: guest OS and version, disk size, how many NICs, and whether it&rsquo;s using anything ESXi-specific like a VMware-only storage adapter or a distributed virtual switch port group. This takes ten minutes and saves you from being surprised mid-migration.</p>
<p>Also clean up before you export. Delete old snapshots on the source VM first, a live snapshot chain complicates the export and drags stale data along with it. And if the guest is disposable or trivial to reinstall, seriously consider just doing that instead of migrating it. Migration is worth the effort for anything with real configuration or data baked in; it&rsquo;s not worth the effort for a five-minute Ubuntu box you spun up to test something once.</p>
<h2 id="getting-the-disk-out-of-esxi">Getting the disk out of ESXi</h2>
<p>You have two realistic paths, depending on the tooling you have available.</p>
<p><strong>Path one: <code>ovftool</code>.</strong> VMware&rsquo;s OVF Tool exports a VM as an OVA/OVF package, disk and metadata bundled together. If you have access to it (it doesn&rsquo;t require ESXi&rsquo;s paid licensing tier to download and run from your desktop), this is the cleaner path:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ovftool vi://root@esxi-host/vm-name /path/to/export/vm-name.ova
</span></span></code></pre></div><p><strong>Path two: pull the VMDK directly.</strong> If you don&rsquo;t have <code>ovftool</code> handy, or the VM is simple enough not to need the metadata, SCP or SFTP the VMDK files straight off the ESXi datastore. Every VM&rsquo;s files live under <code>/vmfs/volumes/&lt;datastore&gt;/&lt;vm-name&gt;/</code>. Grab the flat VMDK (the actual disk data, not the small descriptor file alone, though you need both) and copy it to your Proxmox host or a staging location it can read from.</p>
<p>Either path gets you a disk image in VMware&rsquo;s format. The conversion step is where Proxmox actually takes over.</p>
<h2 id="converting-the-disk-and-building-the-vm-shell">Converting the disk and building the VM shell</h2>
<p>Proxmox&rsquo;s <code>qm importdisk</code> handles VMDK-to-target-storage conversion directly, no separate <code>qemu-img</code> step required for the common case:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">qm create <span class="m">210</span> --name migrated-vm --memory <span class="m">4096</span> --cores <span class="m">2</span> --net0 virtio,bridge<span class="o">=</span>vmbr0
</span></span><span class="line"><span class="cl">qm importdisk <span class="m">210</span> /path/to/vm-name-disk1.vmdk local-lvm
</span></span></code></pre></div><p><code>importdisk</code> reads the VMDK and writes it into whatever storage you point it at, converting format as needed. Attach the resulting disk to the VM the same way you would for any other:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">qm <span class="nb">set</span> <span class="m">210</span> --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-210-disk-0
</span></span><span class="line"><span class="cl">qm <span class="nb">set</span> <span class="m">210</span> --boot <span class="nv">order</span><span class="o">=</span>scsi0
</span></span></code></pre></div><p>At this point you have a VM shell with the migrated disk attached, but it will very likely not boot cleanly on the first try. That&rsquo;s expected, not a sign something went wrong. The next three sections are why.</p>
<h2 id="the-boot-firmware-mismatch">The boot firmware mismatch</h2>
<p>If the source VM was running with EFI firmware on ESXi, the Proxmox VM needs EFI too, not the default SeaBIOS. Check this before you ever hit start:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">qm <span class="nb">set</span> <span class="m">210</span> --bios ovmf --efidisk0 local-lvm:1,efitype<span class="o">=</span>4m
</span></span></code></pre></div><p>Guessing wrong here is the single most common reason a freshly imported VM just sits at a blank screen or drops into a UEFI shell instead of booting the OS. If you don&rsquo;t know which firmware the source used, check the VM&rsquo;s settings in the vSphere/ESXi client before you export, it&rsquo;s a five-second lookup that saves a confusing troubleshooting session later.</p>
<h2 id="the-disk-controller-and-network-adapter-arent-the-same-hardware">The disk controller and network adapter aren&rsquo;t the same hardware</h2>
<p>ESXi VMs almost always use VMware-specific virtual hardware: an LSI Logic or PVSCSI disk controller, and a vmxnet3 network adapter. None of that exists in Proxmox&rsquo;s KVM-based virtual hardware model. Proxmox wants VirtIO SCSI and VirtIO network devices instead, and the guest OS needs a driver for that hardware before it&rsquo;ll come up cleanly.</p>
<p><strong>Linux guests</strong> usually have VirtIO drivers built into the kernel already, so this is often a non-event, boot it and it just works. If it doesn&rsquo;t come up on the network, check <code>ip a</code> from the console; the interface name may have changed (predictable network interface naming keys off PCI slot and device ID, and a different virtual NIC model changes that), which breaks a network config file hardcoded to the old interface name like <code>ens192</code>.</p>
<p><strong>Windows guests are the real risk here.</strong> Windows does not ship VirtIO drivers out of the box, and if you switch straight to a VirtIO disk controller, the guest can blue-screen on boot because it has no driver for the disk it&rsquo;s trying to read from. The safe sequence:</p>
<ol>
<li>Boot the imported VM first with a SATA or IDE disk controller (something Windows already has a driver for) instead of VirtIO SCSI, just to get it running at all.</li>
<li>Mount the <a href="https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md">VirtIO driver ISO</a> as a second CD-ROM device and install the storage and network drivers from inside Windows while it&rsquo;s still running on the compatible controller.</li>
<li>Shut down, switch the disk to VirtIO SCSI and the NIC to VirtIO, and boot again. It should come up clean now that the drivers are already installed.</li>
</ol>
<p>Skipping straight to VirtIO on a Windows guest that&rsquo;s never seen those drivers is the number one cause of &ldquo;the migrated VM won&rsquo;t boot&rdquo; reports in homelab migration threads, and it&rsquo;s entirely avoidable with this two-step boot sequence.</p>
<h2 id="clean-up-vmware-specific-software-inside-the-guest">Clean up VMware-specific software inside the guest</h2>
<p>Once the VM boots reliably, uninstall VMware Tools from inside the guest, it&rsquo;s dead weight now and occasionally interferes with things like time sync or the guest reporting incorrect resource stats. Install <code>qemu-guest-agent</code> in its place (<code>apt install qemu-guest-agent</code> on Debian/Ubuntu, or the equivalent package on other distros; for Windows, it&rsquo;s a separate installer packaged alongside the VirtIO driver set). Enable the agent on the Proxmox side too:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">qm <span class="nb">set</span> <span class="m">210</span> --agent <span class="nv">enabled</span><span class="o">=</span><span class="m">1</span>
</span></span></code></pre></div><p>Without this, Proxmox can&rsquo;t report the VM&rsquo;s real IP in the summary tab, can&rsquo;t do a clean guest shutdown, and can&rsquo;t quiesce the filesystem for consistent backups, the same reasons this matters for any Proxmox VM, cloud-init templates included.</p>
<h2 id="static-ips-mac-addresses-and-dhcp-reservations">Static IPs, MAC addresses, and DHCP reservations</h2>
<p>If anything on your network keys off MAC address, a DHCP reservation, a firewall rule, whatever, know that the migrated VM will get a new MAC unless you explicitly set the old one on the new NIC:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">qm <span class="nb">set</span> <span class="m">210</span> --net0 virtio,bridge<span class="o">=</span>vmbr0,macaddr<span class="o">=</span>&lt;original-mac&gt;
</span></span></code></pre></div><p>Pulling the original MAC from the ESXi VM&rsquo;s network adapter settings before you decommission it, and setting it explicitly here, saves you from chasing down every DHCP reservation and firewall rule that referenced the old address.</p>
<h2 id="dont-decommission-the-old-host-until-youve-actually-verified-the-new-one">Don&rsquo;t decommission the old host until you&rsquo;ve actually verified the new one</h2>
<p>This sounds obvious, but under time pressure it&rsquo;s the step that gets skipped. Keep the source ESXi VM powered off (not deleted) until you&rsquo;ve confirmed the migrated VM on Proxmox does everything the original did: the services start, the data is intact, and anything else on your network that talks to it still works. A powered-off VMware VM costs you nothing but disk space, and it&rsquo;s a much better rollback plan than restoring from a backup if something surfaces a week later that you didn&rsquo;t test on day one.</p>
<h2 id="bottom-line">Bottom line</h2>
<p>Migrating from ESXi to Proxmox isn&rsquo;t hard, but it&rsquo;s not zero-friction either. The disk itself converts easily, <code>qm importdisk</code> handles that part for you. Nearly every real problem comes from the virtual hardware model changing underneath the guest: firmware type, disk controller, and network adapter. Check the firmware before you start, expect Windows guests to need the two-step VirtIO driver dance, and keep the original VM around as a safety net until the new one has proven itself. Do those three things and the actual migration is a couple of commands per VM, not a debugging project.</p>
]]></content:encoded></item></channel></rss>