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.
Of everything PDM does, this is the feature people repeat to each other. Move a
running virtual machine from a cluster in one building to a cluster in another,
from a dialog box, without downtime.
It is real. It has been in the product since the first alpha. And it is
surrounded by more sharp edges per square metre than anything else in this
part, starting with a two-word label in the Proxmox VE command reference that
almost nobody who uses the feature has read.
What it is, underneath
PDM’s Migrate action moves a guest to another node, within the same remote
(cluster) or across remotes. It is not offered for templates.
Across remotes, PDM is driving the Proxmox VE remote-migration API — the same
mechanism reachable on a cluster as qm remote-migrate for a virtual machine
and pct remote-migrate for a container. The PDM CLI exposes it directly:
Service impact possiblecross-remote migration from the PDM CLI— Moves VM 141 from site-a to site-b. Both mappings are mandatory. Read the whole lesson before running this against anything you care about.
The container form is pve lxc remote-migrate with the same shape. For a move
inside one cluster, the command is pve qemu migrate <remote> <vmid> <target>,
which is the ordinary intra-cluster migration you already know from Part IX and
carries none of the hazards below.
Prerequisite one: map every bridge
The two clusters are independent. They do not share an SDN configuration, a
bridge namespace or a VLAN scheme, and nothing guarantees that vmbr1 on
site-A means what vmbr1 means on site-B.
So the mapping is mandatory. In the PDM CLI it is --map-bridge FROM:TO, which
may be given more than once — once per source bridge. The PVE-side equivalent,
--target-bridge, offers two shorthands worth knowing because they explain the
semantics: providing a single bridge ID maps all source bridges to that one
bridge, and providing the special value 1 maps each source bridge to itself.
That last shorthand is where estates get hurt. --target-bridge 1 reads as
“keep the networking the same” and means “assume the target cluster has a
bridge of the same name, and that it is attached to the same layer-2 domain”.
The first half of that assumption fails loudly — the migration errors. The
second half fails silently: the guest arrives, attaches to a bridge that has
the right name and the wrong VLAN, and is unreachable on an IP it still
believes it owns.
Prerequisite two: map every storage
Same reasoning, larger consequences. --map-storage FROM:TO, once per source
storage. The PVE-side --target-storage has the same two shorthands: a single
storage ID maps everything to it, and 1 maps each source storage to itself.
The storage map is where the physics of the operation shows up. Within a
cluster with shared storage, migrating a running VM moves memory and leaves the
disks where they are — a few gigabytes of RAM over a fast local link. Across
clusters there is no shared storage by definition, so every disk is copied
over the network.
That changes the arithmetic completely:
Intra-cluster, shared storage
Cross-cluster
What moves
Memory, plus dirty-page convergence
Every disk, then memory
Dominant cost
RAM size
Disk size divided by link bandwidth
Typical link
Cluster network, 10 GbE and up
Whatever runs between the sites
A 2 TB VM
seconds to a minute
hours
A 2 TB guest over a 1 Gbit/s inter-site link is, at perfect efficiency, about
four and a half hours of copying. Real links are not perfectly efficient and
are not idle. Plan cross-cluster migrations in hours, size the maintenance
window from the disk, and use --bwlimit (in KiB/s) to keep the copy from
consuming the link that everything else at both sites depends on.
Prerequisite three: the VMID
Two independent clusters have two independent VMID spaces, and 141 is a popular
number. PDM 1.1 added a helpful behaviour here: when migrating a guest to a new
cluster, PDM queries the remote cluster for its next free VMID and uses it to
pre-fill the migration dialog.
Accept that gratefully and then think about it for ten seconds, because a
changed VMID has consequences that outlive the migration:
Backup history does not follow the guest. A PBS backup group is keyed by
guest type and ID. VM 141 arriving at site-B as VM 3141 starts a fresh backup
chain; the old chain remains under 141 and is now orphaned from the running
workload. Your retention policy is quietly protecting a guest that no longer
exists while the live one has one backup.
Backup jobs do not follow either. A PVE backup job is cluster
configuration, not guest configuration. The job on site-A still names 141;
site-B has no job for 3141 until you create one. The window between migration
and noticing is a window with no backups.
Monitoring, CMDB and runbooks refer to the old ID. Anything keyed on
vmid needs updating, and nothing will tell you which.
The --target-vmid option exists so you can keep the number when it is free at
the destination. Prefer that where you can; where you cannot, treat the ID
change as a small migration of its own with its own checklist.
The default that surprises people
Read this option description from the qm reference slowly:
--delete <boolean> (default = 0) — Delete the original VM and related data
after successful migration. By default the original VM is kept on the source
cluster in a stopped state.
A successful cross-cluster migration, run with defaults, leaves you with two
copies of the guest: one running on the target, one stopped on the source,
with the same hostname, the same configuration, the same static IP addresses,
the same service identity and, if it is a cluster member of something, the same
node name.
Online, offline, and what the dialog offers
--online performs a live migration if the guest is running; it is ignored if
the guest is stopped. For containers there is also --restart, which uses
restart migration.
One honest note about the interface. The roadmap lists, under guest and
resource management, “more options in the migration dialog, such as a bandwidth
limit and an online/offline preference”. That wording indicates the dialog
does not yet offer those two controls, even though the API and the PDM CLI
both do.
So: the capability exists, and if you need to set a bandwidth limit or force an
offline migration on PDM 1.1.7, reach for the CLI. Verify against your own
version before writing it into a runbook — this is precisely the kind of gap
that closes in a point release.
What this is not a substitute for
Cross-cluster migration is a planned, operator-initiated, both-ends-healthy
operation. Four things it is repeatedly mistaken for:
It is not high availability. HA restarts a guest automatically when a node
fails, inside one cluster, driven by quorum. Nothing about remote migration is
automatic and nothing about it survives the source cluster being down. Part XII
is unchanged.
It is not disaster recovery. A migration requires the source cluster to be
up, reachable and healthy enough to read every disk. A site that has burned
down cannot be migrated from. DR is Part XIV: backups at a second site,
replication, a tested restore, and an RPO and RTO somebody has signed. The
roadmap acknowledges the gap directly, listing “off-site replication copies of
virtual guests for manual recovery on a datacenter failure” as future work, with
the parenthetical “(not HA)” attached.
It is not a load balancer. There is no scheduler, no placement policy and
no automation. Someone decides, and someone clicks.
It is not a substitute for capacity planning. Being able to move a workload
does not create anywhere to move it to. If site-B has no headroom, the migration
either fails or succeeds and makes site-B the new problem. Part II and Part XVII
still own that question.
Key takeaways
PDM’s cross-remote migration drives PVE’s qm remote-migrate and
pct remote-migrate, which the PVE command reference labels EXPERIMENTAL and
which has no prose documentation chapter.
Bridge and storage mappings are mandatory and are not validated for meaning.
A bridge with the right name on the wrong network is the silent failure.
Every disk crosses the network. Size the window from disk over bandwidth, not
from RAM, and set --bwlimit so the copy does not become the incident.
The default leaves the source guest on the origin cluster in a stopped state.
Rename it immediately and delete it on a schedule.
PDM pre-fills the next free VMID at the destination. A changed VMID orphans
the PBS backup chain and leaves the guest outside every existing backup job.
Bandwidth limit and online/offline preference are CLI options today; the
roadmap lists them as future additions to the migration dialog.
Migration is not HA, not DR, not a load balancer, and not capacity planning.
Knowledge check
Knowledge check · 4 questions
Q1. A 2 TB database VM with 64 GB of RAM is migrated from site-A to site-B over a 1 Gbit/s inter-site link, using PDM, with no bandwidth limit set. What dominates the duration and what is the likely collateral effect?
Q2. A cross-cluster migration completes successfully with default options. Six weeks later, an operator tidying up starts a stopped VM at the source site. What went wrong, and when?
Q3. A guest is migrated from site-A to site-B and PDM pre-fills a new VMID because the original was taken. Which of these are genuine consequences that need handling? Select all that apply.
Q4. The Proxmox VE command reference labels qm remote-migrate and pct remote-migrate as EXPERIMENTAL, and the administration guide has no prose chapter describing remote migration prerequisites or limitations.
Passing score: 75%. Answers are checked in this browser.