Verified against Proxmox VE 9.2.4 · Proxmox Backup Server 4.2.5 · Ceph Squid / Tentacle · Debian 13 (Trixie) · Linux kernel 7.0 (PVE 9.2 default) · 2026-08-12
○Not yet marked complete on this device.
Every lesson in this part so far has been about arriving. This one is about
leaving, and it belongs in the course for the same reason a building has fire
exits: not because you expect to use it, but because a route you have never
walked is not a route.
It is also the lesson that makes the rest of the part honest. A course that
teaches migration to a platform and is silent about migration from it is
selling something.
What Proxmox actually offers
Start with the uncomfortable fact. Proxmox VE has qm importovf and
qm disk import. It has no matching export command. There is no
qm exportovf, and there is no single operation that produces a portable
appliance from a running guest.
That is not a gap in the product so much as an accurate reflection of what a
virtual machine is: a disk image plus a hardware description, where only the
first half is portable. So the export is two jobs.
What you need
How you get it
The disk data
qemu-img convert from the path pvesm path resolves
The guest definition
Read qm config, and rebuild it on the destination
A container’s filesystem
vzdump, which produces a tar of the root filesystem
The backup archives themselves
PBS and vzdump formats are Proxmox-specific
Converting a disk
Read-only / Safefind out what and where the disk actually is— Read-only. qm config names the volume; pvesm path resolves it to a file or block device; qemu-img info reports the real format and the actual allocated size, which is what determines how long the conversion takes and how much space it needs.
VMID=141
qm config "$VMID" | grep -E '^(scsi|virtio|sata|ide|efidisk|tpmstate)[0-9]'
qm status "$VMID"
VOL="$(qm config "$VMID" | sed -n 's/^scsi0: \([^,]*\).*/\1/p')"
pvesm path "$VOL"
qemu-img info "$(pvesm path "$VOL")"
Read-only / Safe
$ qemu-img info /dev/zvol/rpool/data/vm-141-disk-0
image: /dev/zvol/rpool/data/vm-141-disk-0
file format: raw
virtual size: 500 GiB (536870912000 bytes)
disk size: 0 B
Service impact possibleconvert a stopped guest's disk to a portable image— Requires the guest to be STOPPED. Converting a running guest's disk produces a crash-consistent image at best and a corrupt one at worst. -p shows progress; -O selects the output format. Ensure the destination has room for the full converted size.
VMID=141
OUT=/srv/export
qm stop "$VMID"
qm status "$VMID"
VOL="$(qm config "$VMID" | sed -n 's/^scsi0: \([^,]*\).*/\1/p')"
SRC="$(pvesm path "$VOL")"
qemu-img convert -p -O qcow2 "$SRC" "${OUT}/vm-${VMID}-disk0.qcow2"
qemu-img info "${OUT}/vm-${VMID}-disk0.qcow2"
The -O argument chooses the destination’s language:
Destination
Format
KVM/libvirt, oVirt, another Proxmox
qcow2 — thin, snapshot-capable
Anything wanting a bare block image, or a cloud import
raw
VMware
vmdk
Hyper-V
vhdx
Preparing the guest to arrive, not just to leave
A converted disk is necessary and not sufficient. The guest was configured for
QEMU/KVM with VirtIO devices, and the destination may not speak that dialect.
Read-only / Safecapture the guest definition before it leaves— Read-only. The guest configuration is the hardware description that has to be recreated on the destination by hand. Save it with the exported disks, in the same directory, so the two never separate.
An LXC container has no virtual firmware, no emulated controller and no driver
problem. vzdump produces an archive of its root filesystem plus its
configuration, and a root filesystem tarball is the most portable artefact in
this entire lesson.
Service impact possibleexport a container— Stops the container for a consistent archive. The resulting tar is a root filesystem plus configuration, which any LXC or LXD host can consume and which can also be unpacked to inspect or to rebuild elsewhere.
The configuration inside is Proxmox-specific — mount points, resource limits,
unprivileged, the network definition — but the filesystem itself is just a
filesystem. Where the destination is another LXC host, that is close to a
one-step migration.
What does not travel
Does not travel
Consequence
The guest configuration semantics
Firmware, machine type, CPU model, controller and boot order must be recreated by hand
Snapshots
The destination’s snapshot mechanism is different; convert the state you want and abandon the tree, or export several states
Cloud-Init configuration
Proxmox generates a Cloud-Init drive from guest options; the destination has its own mechanism
Firewall rules
/etc/pve/firewall/<VMID>.fw is Proxmox configuration
HA membership, pool membership, tags
Cluster configuration, not guest configuration
Backup history
PBS backup groups and vzdump archives are Proxmox-specific formats
Replication jobs
pvesr is Proxmox-specific
Resource mappings and passthrough
PCI and USB mappings are host and cluster configuration
Why this belongs in a procurement conversation
An exit path is not a comment on the platform. It is a property of the risk, and
it is worth stating in those terms:
It is leverage. A platform you can leave is a platform you can negotiate
with. A platform you cannot leave sets its own terms at renewal.
It is continuity planning. Vendors change ownership, licensing models and
strategy. The estates that suffered most in the 2024 virtualisation upheaval
were the ones that had never costed an exit.
It is a testable claim. “We could migrate away in three months” is either a
number somebody has derived from a rehearsal, or it is a feeling.
It is cheap while you have the skills. The exit is hardest to rehearse at
exactly the moment you most need it, because by then the people who knew the
old platform have moved on.
The proportionate version is small: export one representative guest per class —
a Linux server, a Windows server, a container — onto the platform you would
plausibly move to, boot it, and write down how long it took and what broke.
Once a year. That converts an assumption into an estimate, and it is the same
exercise this whole part has been describing, run in the other direction.
Key takeaways
Proxmox VE has qm importovf and qm disk import and no matching export
command. Leaving is a disk conversion plus a guest definition you rebuild.
pvesm export is documented as used internally and produces a framed stream
(qcow2+size, raw+size, vmdk+size, tar+size, zfs, btrfs). For
leaving, use pvesm path plus qemu-img convert.
qemu-img convert -O selects the destination’s language: qcow2 for
KVM/libvirt, raw for bare images and cloud imports, vmdk for VMware,
vhdx for Hyper-V.
Convert only while the guest is stopped. A live conversion is
crash-consistent at best. If downtime is impossible, snapshot and convert the
snapshot.
Prepare the guest to arrive: initramfs with the destination’s drivers,
UUID= references in fstab and the bootloader, destination integration tools
installed on Windows before conversion, VirtIO drivers left in place for
rollback, and fstrim to shrink the copy.
Save qm config --current beside the exported disks. It is the only
description of the virtual hardware once the guest has gone.
Containers are the easy case: vzdump yields a root filesystem tarball, which
is the most portable artefact here.
Backup history does not travel. Keep a PBS instance for the retention
period, restore and re-archive what must be kept, or record an explicit
decision to lose it.
Rehearse the exit annually with one guest per class. It is leverage, continuity
planning, and a claim you can defend with a number.
Knowledge check
Knowledge check · 5 questions
Q1. A team needs to move guests off Proxmox VE to another hypervisor and looks for the export equivalent of qm importovf. What do they find, and what is the correct approach?
Q2. Why must a guest be stopped before qemu-img convert is run against its disk?
Q3. Which of these do NOT travel with a guest exported out of Proxmox VE? Select all that apply.
Q4. VirtIO drivers should be left installed in a Windows guest being exported to another hypervisor, because a driver that is present and unused is harmless while a missing one makes rollback unbootable.
Q5. An exported guest will not boot on the destination hypervisor. What single test most quickly separates a bad image from a wrong guest definition?
Passing score: 75%. Answers are checked in this browser.