Proxmox VE 9.2 VM migration after storage changes

Proxmox VE 9.2 VM migration after storage changes

Storage changes are where Proxmox VE 9.2 VM migration gets awkward. A VM can still point at a path or storage ID that no longer matches what the cluster can see, and migration fails for reasons that look vague until you trace the disk mapping.

The failure is usually plain enough once the moving parts are lined up: disk images on one backend, a VM config that still references another, and a network path that is only half fit for live migration. Fix the mapping first, or the rest is just noise.

When storage moves but the VM still points at the old path

A storage move changes more than where the bits live. It changes how the VM configuration names those bits, which backend owns them, and whether the target node can resolve them at all.

That matters most when the old storage ID still exists in the cluster config but no longer matches the real storage layout. The VM may still start on its original node, then fail when migration tries to reproduce the same device mapping elsewhere. Live state does not rescue a broken disk reference.

The cleanest approach is to check three things together:

  • the disk image name on the source node
  • the volume name on the target backend
  • the storage ID in the VM config

If any one of those has drifted, migration behaviour becomes inconsistent. The VM may boot, but the move path will not be repeatable across nodes.

Rebuilding the migration path without breaking live state

A migration path only works when both nodes see the same storage layout in a way Proxmox understands. That does not mean the backend has to be identical everywhere, but it does mean the VM disks, snapshot state, and migration method all need to agree.

Check the disk images, volumes, and storage IDs first

Disk images and storage volumes are easy to confuse when a move has already happened once. The volume may exist under a new backend, while the VM still points at the old storage ID, or at a path that only makes sense on one node.

For virtual machine migration, that mismatch is enough to break both offline and live attempts. If the VM is holding a snapshot chain, the storage naming matters even more because the migration process has to preserve the chain, not just copy a flat disk.

At this point, the practical check is boring and useful: verify the volume exists where the config expects it, and verify the storage definition on each node describes the same backend behaviour. If the names do not line up, fix the config before trying again.

Decide whether the move needs a cold stop or can stay live

Live migration is only clean when the storage backend and network path can support it without inventing extra work for the cluster. If the backend cannot provide the needed behaviour, forcing a live move usually buys a failure in the middle of traffic, which is a fine way to waste an afternoon.

A cold stop is the safer option when:

  • the storage backend changed in a way that breaks shared visibility
  • the disk is on local storage that cannot be seen by the target node
  • the VM has snapshot state that is awkward to preserve across the new path
  • the network placement is changing at the same time

If the move stays live, the backend has to support that style of migration cleanly. If it does not, stop the VM first and move it with a simple, predictable disk hand-off.

Getting the cluster side clean enough for the move to work

Cluster networking and storage backend behaviour have to match the migration method. If one node sees a storage target differently from the other, or if the network path is tight, migration may start and then stall on a detail that should have been obvious before the first packet moved.

Match storage backend behaviour to the migration method

Different storage backends behave differently under migration. Some can present the same volume to multiple nodes, which suits live migration. Others are local by design, which means the VM disk has to move with the guest rather than stay put.

That distinction matters more after a storage change than before it. A VM that used to rely on shared storage may now sit on a backend that is local, replicated, or mounted with different rules on each node. The migration job does not care why the backend changed. It only cares whether the target can access the disk in the way the VM config expects.

A sensible boundary is simple: if the storage backend does not behave the same on source and target nodes, do not treat live migration as the default. Make the disk path boring again first.

Confirm snapshot state and network placement before you push traffic

Snapshot state can make migration uglier than the disk move alone. A VM with active snapshots or an awkward chain can still run, but the migration path now has to preserve more than the current block device. That adds failure points, and most of them only show up when the guest is already under load.

Network placement causes a different sort of failure. If the VM is moving to a node with different cluster networking, the migration may succeed technically and still leave traffic in the wrong place for a while. That is common when storage changes are done at the same time as network changes, which is a nice way to combine two sources of misery.

Before moving traffic, check that the VM lands on the correct network segment and that the snapshot state is something the backend can carry cleanly. If either side is messy, fix that first. A migration that completes but leaves the guest stranded is just a slower outage.

Related posts

Detecting hosting infrastructure abuse in transit

A clean brand can hide a dirty transport chain, and that is where hosting infrastructure abuse detection starts to matter. I care less about the logo than the packets, because if the upstream changes...

Proxmox VE 9.2 VM migration after storage changes

Proxmox VE 9.2 VM migration gets awkward the moment storage changes underneath it. I have seen a VM boot happily on one node, then fall over on the next because the disk still points at the old...

Gitea | v1.27.0

Gitea v1 27 0: security hardening, breaking change for reusable workflows, Actions features and performance, API and tooling updates, UI and repo fixes