Migrating from ESXi to Proxmox VE: Practical Issues and Hidden Pitfalls

13 min read

ESXi to Proxmox migration became a mainstream SMB discussion after Broadcom licensing changes pushed many smaller environments off vSphere. The hypervisor swap itself is usually manageable. The operational layer around it — networking, storage, backups, clustering, and Windows driver handling — is where ESXi to Proxmox migration projects become expensive.

This article covers the recurring pitfalls we see across community reports and forum threads, with the goal of helping you avoid the failures that typically eat 4-8 hours of a migration window.

What changes besides the hypervisor

Networking is rebuilt during ESXi to Proxmox migration. Linux bridges (or OVS) replace vSwitch and vDS, with no central management plane. Configuration lives in /etc/network/interfaces rather than a vCenter UI. Any NSX integration doesn’t translate.

Storage changes more than people expect. The datastore concept is gone. You pick a backend (LVM-thin, ZFS, Ceph, or NFS), and each has different snapshot, performance, and resilience trade-offs.

Backup tooling needs rework. Veeam and Nakivo support Proxmox now, though commercial licensing carries over and partly defeats the cost rationale for migrating from ESXi to Proxmox in the first place.

Automation needs rewrites. Ansible and Terraform modules differ between platforms. Equivalents exist (community.general.proxmox_*, the Telmate Terraform provider), though they’re separate codebases with different abstractions.

API access flips. ESXi free is read-only. Proxmox is full read-write at zero cost.

The operational mental model shifts too. You’re SSH’ing into nodes and reading journalctl more than you’re clicking through vCenter. If your team isn’t comfortable in a Linux terminal, an ESXi to Proxmox migration will hurt regardless of the guide you follow.

When ESXi to Proxmox migration is the wrong call

The honest answer depends on your environment. Several scenarios where staying on VMware typically makes more sense:

Regulated industries with vendor-validation requirements. vSphere has the audit trail and vendor-cert ecosystem. Retrofitting Proxmox usually costs more than the licensing it would save.

Heavy NSX, vSAN, or Aria investment. You’re not migrating one product but rebuilding ten. Migration cost will likely exceed several years of VMware licensing.

Hard DRS dependency. Proxmox HA is reactive (failover after failure), not predictive (proactive rebalancing under load). Environments running near capacity feel the gap.

Windows-only shops without Linux ops experience. Hyper-V is often the cheaper transition than retraining the team on Linux fundamentals.

For most homelabs, SMBs, and mid-market deployments, none of these apply. The math works clearly in favor of moving.

Which migration approach to choose

Three main paths exist for ESXi to Proxmox migration. The right one depends on how much manual work you want per VM and how clean you need the result.

OVA export to Proxmox import

ESXi exports .ova files, and Proxmox 8.x imports them through the web UI. The official Proxmox migration wiki documents this path in detail.

  • ✅ One-click in modern Proxmox versions
  • ❌ Often breaks networking config and bootloaders
  • ❌ Single-stream copy, slow on large VMs

This works fine for simple Linux VMs with single disks. For anything more complex, expect manual fixup. Worth testing on a non-prod VM before committing to it as the primary approach.

VMDK to QCOW2 conversion

Pull .vmdk files off the ESXi datastore via SCP or NFS export, then convert with qemu-img:

qemu-img convert -O qcow2 source.vmdk destination.qcow2

Attach manually to a new VM in Proxmox. This gives you full control over disk format, controller type, and network adapter. You can run conversions in parallel.

The trade-off is manual per-VM work, which is acceptable for VMs you actually care about.

Fresh install plus data migration

Build a new VM in Proxmox with the right OS, then migrate data and applications separately. This is the most thorough ESXi to Proxmox migration path.

  • ✅ Cleanest result with no legacy ESXi-specific config
  • ✅ Forces an OS update if one was overdue
  • ❌ Most labor per VM, requires application-level migration knowledge

Best for production workloads where you’d be touching the OS anyway, or for stateful apps with complex storage layouts that don’t translate well through conversion.

Pre-migration checklist

Before touching production VMs, work through this list. Most failed ESXi to Proxmox migration attempts skip 2-3 items below and discover them mid-cutover.

Source environment audit:

  • Record BIOS vs UEFI mode for every VM (you’ll need this in Proxmox config)
  • Document VLAN tags and port-group mappings from ESXi
  • Note disk controller types currently in use (PVSCSI, LSI, SATA)
  • List installed VMware Tools versions and any guest-side dependencies

Target environment preparation:

  • Download VirtIO drivers ISO (virtio-win.iso from Fedora’s official repo) for Windows guests
  • Confirm Proxmox storage backend has free space for VM disks plus snapshots
  • Validate cluster network latency before enabling HA or Ceph (Corosync wants <5ms)
  • Check ZFS ARC sizing if using ZFS — see the ARC trap section below

Safety nets:

  • Verify backup restore actually works on a non-critical VM (not just that backups complete)
  • Validate rollback path back to ESXi — keep source VMs powered off but intact during cutover
  • Test migration end-to-end on one non-production VM before scheduling production cutovers
  • Plan maintenance window with 2x your estimate — first migration always exposes something

Skipping the test migration is the most common cause of multi-hour outages. The forum threads where someone migrated 30 VMs and 28 worked but 2 needed manual rebuild are usually missing this step.

Why Windows VMs fail to boot after migration

The most common ESXi to Proxmox migration failure across community reports is a Windows VM that won’t boot after the controller switch. This trips up experienced admins regularly enough that it deserves its own section.

Symptoms you’ll see

The errors that show up repeatedly in Proxmox forum threads:

  • INACCESSIBLE_BOOT_DEVICE on Windows 10, Server 2019, and Server 2022
  • BSOD 0x0000007B (“inaccessible boot device” — Microsoft documentation) on older versions like Windows 2008 and 2012R2
  • BSOD 0xc0000225 (boot configuration data error) in some cases
  • VM boots successfully but has no network connectivity

Why it happens

ESXi presents vmxnet3 for network and PVSCSI or LSI Logic SAS for storage. Windows has these drivers built in. Proxmox uses VirtIO for both by default, which is a different paravirtualization family. Windows does not have VirtIO drivers built in.

Switching directly to VirtIO without preparing Windows first means the OS boots, sees unrecognized hardware, and fails into recovery.

The fix sequence that works

Order matters. Skipping steps is what produces the failure modes above.

  1. Boot the VM with emulated devices first. Set network to e1000 and disk to IDE or SATA. Windows has these drivers built in, so the VM boots.
  2. Add a temporary 1GB VirtIO SCSI disk as a second drive on the running VM. Windows detects it and prompts for drivers.
  3. Mount the VirtIO ISO (virtio-win.iso from Fedora’s official build) and install network and storage drivers.
  4. Shut down, remove the temporary disk, switch the boot disk controller to VirtIO SCSI, and switch the network adapter to VirtIO.
  5. Boot again. The VM should come up cleanly with proper performance.

Why the dummy disk trick is needed

This step confuses people most often, and it appears repeatedly in forum threads as the solution. Windows won’t load VirtIO SCSI drivers as Boot Critical unless it sees a SCSI device requiring them at the time of installation. The temporary disk is the trigger that registers the driver in the boot path. Without it, drivers install but won’t activate at boot, so the controller switch fails the same way it would have without drivers at all.

Skipping step 1 entirely puts you in a worse position. You’ll spend an hour with bootrec /rebuildbcd from recovery media, and even then it’s not guaranteed to recover.

When the staged migration still doesn’t work

A pattern that comes up regularly during ESXi to Proxmox migration: someone follows the staged migration, drivers appear installed in Device Manager, but the controller switch still drops to recovery. Common causes worth checking in roughly this order:

Wrong SCSI controller variant. “VirtIO SCSI single” works more reliably than “VirtIO Block” because SCSI presents as a more familiar disk interface to Windows.

Boot order changed. Proxmox sometimes re-orders devices after migration. Check the VM BIOS and confirm the boot disk is first.

Drivers installed but not slipstreamed for boot. Some Windows versions need explicit driver injection via dism from recovery media:

dism /image:C:\ /add-driver /driver:E:\vioscsi\<windows-version>\amd64

Multiple forum threads report this as the only thing that worked after standard installation appeared successful.

Bootloader confused. bootrec /rebuildbcd from Windows recovery, or bcdedit adjustments depending on Windows version, often resolves these cases.

Linux equivalent of this failure

For Linux VMs, the equivalent is GRUB getting confused about disk paths post-migration. Boot rescue media, chroot in, regenerate initramfs with VirtIO modules included, then reinstall GRUB. Standard Linux recovery, but unexpected if you weren’t planning for it.

Practical takeaway

  • Always boot first with emulated devices, install VirtIO drivers, then switch controllers
  • The dummy disk step is non-negotiable for Windows — Boot Critical Drivers need SCSI presence to register
  • VirtIO SCSI single is the safer controller choice over VirtIO Block
  • If standard install fails, dism driver injection from recovery media is the fallback that works
  • Linux migrations need initramfs regeneration with VirtIO modules

Why VMs sometimes won’t boot at all (BIOS/UEFI mismatch)

Older ESXi VMs typically run in legacy BIOS mode. Newer ones use UEFI. If the BIOS mode in Proxmox doesn’t match the source ESXi VM after ESXi to Proxmox migration, the VM won’t boot.

A specific failure pattern keeps appearing in the Proxmox forums: users follow the official wiki migration guide, which suggests adding an EFI disk and switching to OVMF (UEFI) BIOS. The problem is that this advice doesn’t account for the source VM’s actual mode. If the original VM was running legacy BIOS in ESXi, switching to OVMF in Proxmox produces a VM that won’t boot. The fix that comes up consistently in those threads: delete the EFI disk and switch BIOS back to SeaBIOS. The VM boots immediately.

The lesson is to match the source. Check ESXi VM settings first, where they show “BIOS” or “EFI”, then set Proxmox BIOS to match.

For VMs that were genuinely UEFI in ESXi, two additional things matter in Proxmox:

Attach an EFI disk of about 4MB to the VM. UEFI requires NVRAM-style persistent storage for boot variables like boot order and secure boot keys. On physical hardware that’s motherboard NVRAM. In a VM, this small disk holds that state.

Set machine type to q35 rather than the default i440fx. The q35 profile is the modern emulation that supports the chipset features UEFI assumes are present.

When a UEFI Linux VM doesn’t boot after migration, check that the EFI disk exists, that the machine type is q35, and that boot order points to the right disk. Forum threads suggest these three together cover the majority of UEFI boot failures post-migration.

When ZFS becomes a problem

ZFS is the popular default storage backend on Proxmox and where most “Proxmox got slow” complaints originate after an ESXi to Proxmox migration. The cause is almost always operator error rather than a platform problem.

The ARC sizing trap

One specific gotcha keeps trapping new users. Proxmox 8.1+ caps ARC at 10% of host RAM by default, but only when Proxmox itself is installed on ZFS. If you install Proxmox on ext4 and then add a ZFS pool afterward through the GUI (a common SMB pattern), ARC defaults back to 50% of RAM.

Several forum threads document the same outcome: a 256GB host with an 11TB pool added post-install ends up with ARC happily eating 100GB+ of RAM that the VMs needed. The fix is creating /etc/modprobe.d/zfs.conf manually with options zfs zfs_arc_max=<bytes>. Worth checking actual ARC size with arc_summary -s arc even if you assumed defaults were applied.

Why ZFS bites under load

ARC pressure is the biggest factor. ZFS aggressively caches metadata and frequently-read blocks in RAM. The community rule of thumb is 2GB base plus 1GB per 1TB of pool capacity, with more required if dedup or compression is enabled. Undersized ARC produces frequent eviction of working-set blocks, which in turn produces latency spikes that look like storage problems but are actually RAM problems.

Snapshot churn is the second factor. Heavy snapshot create-and-delete cycles under sustained load fragment metadata. This is more visible at SMB scale than in homelab use.

Background scrub and resilver operations consume IO bandwidth. A complaint that surfaces regularly: VMs become essentially unusable during a resilver event. Schedule scrubs off-hours via cron, and accept that resilver after a disk failure will impact production until it completes.

Write amplification is the fourth factor. ZFS does copy-on-write, which means small random writes hit the underlying disk harder than equivalent ext4 writes. This matters for database VMs more than for static-ish workloads.

What ZFS actually needs to run well

In practice, 16GB RAM is the reasonable minimum for production ZFS use. 32GB or more becomes typical for clustered or VM-heavy workloads. Use SSD for any pool that hosts active VM disks because write amplification on rotating disks gets ugly under sustained writes. Tune zfs_arc_max proactively rather than waiting for problems to surface. Test against your actual workload rather than synthetic benchmarks, which mislead more often than they help.

Practical takeaway

  • ZFS works extremely well when RAM is sized correctly
  • ARC sizing mistakes are responsible for many perceived “Proxmox storage problems”
  • SSD-backed pools matter more than synthetic benchmark numbers
  • Check arc_summary -s arc early — don’t trust defaults if Proxmox wasn’t installed on ZFS
  • Resilver impact on production is unavoidable; plan for it during disk failures

When LVM-thin is the right choice

LVM-thin is the boring, predictable backend. It uses less RAM than ZFS but also drops features like checksumming, deduplication, and compression. For many small homelabs that trade-off makes sense.

What you give up: data integrity guarantees and storage efficiency.
What you gain: simpler operations and lower RAM requirements.

For a 2-3 VM homelab on a single host, LVM-thin is often the right trade-off. For production workloads with snapshot dependencies or data integrity requirements, ZFS is usually worth the additional tuning effort.

Why Ceph needs proper hardware

Ceph is built into Proxmox, but it needs hardware to match. For most production setups, three nodes is the practical minimum and 10GbE is the recommended floor for the cluster network.

Why three nodes minimum

Ceph requires quorum to write. With two nodes, losing one breaks consensus and writes stop. Three nodes provide a tiebreaker.

Two-node setups with a dedicated quorum device, like a Raspberry Pi running Corosync qdevice, work in homelab contexts. Worth validating failover behavior in lab before depending on it for anything real.

Why fast networking matters

Ceph writes synchronously across nodes, so slow cluster networking becomes write latency. Every write hits multiple OSDs before acknowledging. On 1GbE, that synchronous replication serializes through a 125 MB/s pipe, which becomes the bottleneck under any concurrent VM IO.

10GbE removes that bottleneck for typical SMB workloads. 25GbE adds headroom for sustained heavy IO, though whether you actually need 25GbE depends on your workload pattern.

Smaller homelab Ceph clusters on 1GbE technically work, and we’ve seen them run, but performance degrades quickly under concurrent load. Worth knowing what you’re committing to before you build it.

Practical takeaway

  • Three nodes minimum for production; two-node + qdevice for homelab with caveats
  • 10GbE cluster network is the practical floor — slower networks become write latency
  • Ceph performance is bounded by the slowest synchronous replication path
  • Validate failover behavior in lab before depending on Ceph for production

Why Proxmox snapshot habits differ from ESXi

A subtle but operationally important difference between platforms that affects routine maintenance after ESXi to Proxmox migration.

On ESXi, long snapshot chains degrade VM performance significantly. Each layer adds overhead, which is why “delete snapshots monthly” is a known operational practice in VMware shops.

On Proxmox with ZFS or qcow2 backends, snapshots stay cheap. Performance impact is minimal even with deep chains. The reason is architectural: ZFS snapshots are metadata-only references to existing blocks, and qcow2 snapshots use file-level layering. Neither requires the kind of full-block tracking that ESXi’s older snapshot model uses.

LVM-thin behaves closer to ESXi’s chain behavior because snapshots are tied to volume management.

If your team had “delete snapshots monthly” as an operational habit on ESXi, that habit becomes unnecessary on ZFS-backed Proxmox. It’s a different mental model worth being explicit about during the transition.

How to handle backups without Veeam licensing

Most VMware shops run Veeam, Nakivo, or similar tooling. These tools support Proxmox now, though commercial licensing carries over and partly defeats the cost rationale for an ESXi to Proxmox migration in the first place.

The Proxmox-native path uses two complementary tools.

vzdump is built into Proxmox VE and produces full or differential backups to local disk or NFS. Fine for small setups or as a secondary backup layer.

Proxmox Backup Server (PBS) is a separate but free product from the same project. It provides deduplicated, incremental-forever, encrypted, verified backups, and it’s comparable to Veeam in capability at zero license cost.

Most production migrations end up running PBS on a separate machine or VM as the dedicated backup target. It’s not as polished as Veeam, but the math works and the feature set covers what most SMBs actually use.

A common SMB mistake worth flagging: relying only on vzdump to local disk on the same server. That’s a redundant copy, not backup. PBS or Veeam-class tooling matters once you care about retention testing and recovery validation. Test your recovery before you need it.

Where Proxmox can still bite you

Proxmox is flexible, which means it lets you misconfigure things in ways ESXi wouldn’t have allowed. Post-ESXi to Proxmox migration, these aren’t bugs but design decisions you have to make, and the platform doesn’t hold your hand through them.

Underprovisioned cluster networks

Corosync wants low latency for quorum. Ceph wants throughput. The two have different requirements that often conflict in single-NIC setups, and underprovisioning produces HA instability and storage slowdowns in the same incident. They’re related symptoms but get diagnosed separately, which slows down recovery.

Network bridge misconfiguration

Typos in VLAN tags or bridge interface names isolate VMs without producing a visible error. You get a VM that can ping itself and nothing else. Validate with bridge vlan show rather than trusting visual config inspection.

GPU passthrough versus vGPU

Full-GPU passthrough via VFIO works fine in most cases. Slicing one GPU across multiple VMs (the equivalent of NVIDIA vGRID) is significantly less polished than VMware’s NVIDIA integration, mostly due to driver model differences and licensing constraints. If your use case requires vGPU specifically, validate it works with your hardware before committing to migration.

Wrong storage backend for the workload

Database VMs on LVM-thin without a snapshot strategy, or snapshot-heavy workloads on ZFS without enough RAM, both produce predictable problems. Test against your actual IO pattern rather than against generic Reddit advice for a different workload.

Where VMware ESXi still wins

VMware isn’t dead, and an ESXi to Proxmox migration isn’t always the right move. There are real scenarios where paid vSphere (not free ESXi) still beats Proxmox.

Mature ecosystem integration. vCenter, NSX, Aria, and vRealize have years of polish and deep third-party vendor certification. If you’re integrated with this ecosystem, leaving costs more than the licensing.

DRS for predictive scheduling. Distributed Resource Scheduler does dynamic VM placement and load balancing across the cluster. Proxmox HA is reactive (move VMs after failure) rather than predictive. For environments running near capacity, this difference is operationally significant.

Compliance and audit posture. Auditors know vSphere. Switching to Proxmox in a compliance-heavy environment becomes an audit conversation rather than a technical decision.

VMware Tools depth. Guest OS integration, quiesced snapshots, and the VSS provider on Windows are all more battle-tested in edge cases than QEMU Guest Agent.

For an SMB or homelab, none of these are dealbreakers. For a Fortune 500 bank, they often are. Knowing where the line is matters more than picking sides.

FAQ

Can I do an ESXi to Proxmox migration without downtime?

Per-VM downtime is unavoidable during the cutover. You shut down the VM on ESXi and start it on Proxmox. The rest of your VMs keep running on ESXi while you migrate one at a time. With careful sequencing and parallel infrastructure, end-user-visible disruption can be limited to a brief window per service.

What’s the most common Windows ESXi to Proxmox migration error?

INACCESSIBLE_BOOT_DEVICE on Windows 10/Server 2019/2022, or BSOD 0x0000007B on older versions. The cause is almost always missing VirtIO drivers when switching from ESXi’s PVSCSI to Proxmox’s VirtIO SCSI. The fix is the staged migration: boot first with emulated SATA/IDE, install VirtIO drivers (with a temporary SCSI disk to trigger Boot Critical Driver registration), then switch controllers.

How long should I budget for an ESXi to Proxmox migration?

It depends on VM count, disk sizes, and network speed. As a rough planning number, expect 30-90 minutes per VM for VMDK-to-QCOW2 conversion plus boot validation, with the first few VMs taking longer while you debug platform-specific issues. Plan a maintenance window of 2x your estimate for production cutovers.

Do I need to uninstall VMware Tools before migrating?

Recommended but not strictly required. Uninstalling VMware Tools from the source VM in ESXi before migration produces cleaner Windows guest behavior post-migration. If you forget, post-migration cleanup of leftover VMware Tools services usually works without serious problems.

Can Proxmox use my existing VMware backups?

Not directly. Veeam and similar tools support Proxmox now, so the same backup infrastructure can target both platforms during migration. The backup files themselves aren’t cross-compatible — you’ll either restore VMs into ESXi and then migrate them, or set up Proxmox-native backups (vzdump or Proxmox Backup Server) for the new environment.

What’s the equivalent of vCenter in Proxmox?

There isn’t one. Proxmox uses a distributed cluster model where any node can manage any other node through the web UI. Configuration is synchronized across nodes via pmxcfs (Proxmox cluster file system) and Corosync. There’s no separate management server to license, configure, or back up. Some teams initially miss the centralized control panel; others appreciate not having a single point of failure for cluster management.

Does Proxmox support nested virtualization?

Yes. Both Intel VT-x and AMD-V nested virtualization work in Proxmox. Enable it on the VM by setting CPU type to host and adding the vmx or svm CPU flag. Performance is reduced compared to bare-metal virtualization, but it’s serviceable for development and testing scenarios.

A note on context

This article reflects behavior observed across homelab and small-to-medium business environments and recurring patterns from the Proxmox community forums and Reddit. It doesn’t cover certified enterprise vSphere replacements, regulated industries with strict vendor validation requirements, or hyperscale environments, which all have different constraints and often different correct answers.

Performance, stability, and ESXi to Proxmox migration outcomes depend on hardware configuration, storage design, network topology, and operational expertise. Test on non-production VMs before touching prod. What works in our research and across forum reports may not match your specific IO pattern, hardware, or workload.


Where to go next