Skip to content

[Feature] VM migration Zero DowntimeΒ #553

Description

@ThibautBascoulergue

Got an idea? Nice! πŸ’‘ We love hearing what features would make PegaProx better for you.

A friendly reminder: PegaProx is built by volunteers in our spare time. We can't promise timelines or guarantee every feature will be implemented β€” but every suggestion helps shape the roadmap!

Want to help move things faster?

  • πŸ’– Become a Sponsor β€” sponsored features get prioritized
  • ⭐ Star the project β€” helps with visibility
  • 🀝 Even better: submit a PR with your idea!

Describe the feature

Add a VDDK/NFC-based disk transport (e.g. nbdkit-vddk + qemu-img) for reading powered-on source VMs, as an alternative to the current file-level transports (HTTP /folder, SSH dd, SSHFS) used by snapshot_zero.

On standard ESXi, those file-level methods cannot read the base -flat.vmdk of a running VM: ESXi refuses raw opens of an active snapshot-chain extent, regardless of lock state. A VDDK transport reads the snapshot disk through the VMware management stack (NFC, port 902) and works while the VM is running β€” the same mechanism Veeam and virt-v2v rely on.

Use Case

Migrating of VMs from ESXi 8.0 (VMFS on FC) to Proxmox, I want the low-downtime path snapshot_zero advertises (copy the base live, then a short cutover). In practice the live path never works:

  • Snapshot S0 is created fine; the base goes to lock mode 2 (RO) as expected.
  • dd of the -flat β†’ Device or resource busy
  • HTTP /folder GET of the -flat β†’ HTTP 500, even with the correct dcPath=ha-datacenter (the directory listing works, the flat GET doesn't)
  • SSHFS β†’ Operation not permitted
  • Adding disk.locking = "FALSE" to the VMX changes nothing β€” so it isn't the lock, it's the vmkernel guarding active chain extents

As a result, snapshot_zero only succeeds with the VM powered off, which defeats its purpose. A VDDK transport would make genuine near-zero-downtime migration possible, and with CBT (QueryChangedDiskAreas β€” the -ctk.vmdk is already present) it could do iterative deltas + a ~10 s cutover.

Implementation pointers: nbdkit + vddk plugin exposing the snapshot disk as NBD, then qemu-img convert straight to the Proxmox block device. Works host-direct against standalone ESXi (no vCenter required).

Alternatives considered

  • Offline mode β€” works (VM off β†’ -flat unlocks β†’ any method reads), but full downtime. Fine for most VMs, not for those that can't take an extended window.
  • Fixing the /folder URL (adding dcPath) β€” required for the directory listing, but the flat GET still returns 500 on a running VM, so it doesn't unblock the live path.
  • disk.locking = "FALSE" β€” confirmed no effect, and unsafe (split-brain corruption risk on an HA/FC cluster).

How important is this for you?

Blocking my use case for low-downtime migrations β€” as it stands, snapshot_zero is effectively offline-only on standard ESXi.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions