Skip to main content
RunBook Academy

Proxmox VEXXI · Migration to ProxmoxRunning the migration

Exporting out of Proxmox

Advanced⏱ ~28 minqmpvesmqemu-img

What you'll learn

  • State honestly what Proxmox VE offers for export and what it does not
  • Convert a guest disk to qcow2, raw, VMDK or VHDX from any storage backend
  • Prepare a guest so it will boot on the destination hypervisor rather than only leave this one
  • List what does not travel with an exported guest
  • Argue for a tested exit path as a procurement and risk-management requirement

Prerequisites

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 needHow you get it
The disk dataqemu-img convert from the path pvesm path resolves
The guest definitionRead qm config, and rebuild it on the destination
A container’s filesystemvzdump, which produces a tar of the root filesystem
The backup archives themselvesPBS and vzdump formats are Proxmox-specific

Converting a disk

Read-only / Safefind out what and where the disk actually is
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
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:

DestinationFormat
KVM/libvirt, oVirt, another Proxmoxqcow2 — thin, snapshot-capable
Anything wanting a bare block image, or a cloud importraw
VMwarevmdk
Hyper-Vvhdx

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
VMID=141
OUT=/srv/export

qm config "$VMID" --current > "${OUT}/vm-${VMID}.conf"
qm showcmd "$VMID" --pretty > "${OUT}/vm-${VMID}.qemu-cmdline.txt"

cat "${OUT}/vm-${VMID}.conf"
Read-only / Safe
$ qm config 141 --current
agent: enabled=1
bios: ovmf
boot: order=scsi0
cores: 4
cpu: x86-64-v3
efidisk0: local-zfs:vm-141-disk-1,efitype=4m,pre-enrolled-keys=1,size=1M
machine: q35
memory: 8192
name: app-frontend-01
net0: virtio=BC:24:11:1A:2B:3C,bridge=vmbr0,tag=120
numa: 0
scsi0: local-zfs:vm-141-disk-0,discard=on,size=500G,ssd=1
scsihw: virtio-scsi-single
sockets: 1

Containers are the easy case

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
CTID=205
OUT=/srv/export

pct shutdown "$CTID" --timeout 120
vzdump "$CTID" --dumpdir "$OUT" --mode stop --compress zstd

ls -lh "$OUT"
pvesm extractconfig "${OUT}/$(ls "$OUT" | grep "lxc-${CTID}-" | tail -1)"

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 travelConsequence
The guest configuration semanticsFirmware, machine type, CPU model, controller and boot order must be recreated by hand
SnapshotsThe destination’s snapshot mechanism is different; convert the state you want and abandon the tree, or export several states
Cloud-Init configurationProxmox 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, tagsCluster configuration, not guest configuration
Backup historyPBS backup groups and vzdump archives are Proxmox-specific formats
Replication jobspvesr is Proxmox-specific
Resource mappings and passthroughPCI 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

  1. 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?

  2. Q2. Why must a guest be stopped before qemu-img convert is run against its disk?

  3. Q3. Which of these do NOT travel with a guest exported out of Proxmox VE? Select all that apply.

  4. 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.

  5. 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.