Skip to main content
RunBook Academy

Proxmox VEXXII · Operating as a Business ServiceBusiness of the platform

Change classification and approval

Advanced⏱ ~28 min

What you'll learn

  • Classify a Proxmox change by blast radius, reversibility and detectability rather than by intuition
  • Place a change into standard, normal or emergency and know what each entitles it to
  • Name the Proxmox operations that cannot be reversed, and treat them accordingly
  • Write a change record an approver can act on, including a backout that has been tested

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.

Change management has a poor reputation among engineers, mostly deserved. It is frequently a form that adds three days to a ten-minute task and is approved by somebody who could not evaluate it.

That is a criticism of bad change management, and the answer is not to abandon it. The overwhelming majority of self-inflicted Proxmox outages were approved changes — approved because the record said “add a firewall rule” and nobody asked which chain, on which level, and whether the person running it would still be able to reach the node afterwards.

The purpose of classification is to route each change to the amount of scrutiny it actually needs. Get the classification right and most changes get almost none, which is what makes the process survivable.

Classify by three properties, not by intuition

“Risky” is not a property of a change. These three are, and they can each be answered in a sentence.

Blast radius — how far can this reach if it goes wrong?

RadiusExamples on a Proxmox cluster
One guestResize a disk, change a guest firewall rule, add a NIC, snapshot
One nodeKernel update, NIC driver change, node firewall rule, local storage change
All guests on one nodeAnything requiring a node reboot; a network change on the node
The whole clustercorosync.conf, datacenter.cfg, shared storage definitions, HA rules, cluster firewall, pveum roles, certificate changes
The dataCeph pool parameters, ZFS pool geometry, storage removal, retention policy

The line that catches people is between the third and fourth rows. A change made on one node to a file inside /etc/pve is a cluster-wide change, because /etc/pve is replicated. Editing the datacenter firewall on pve-01 applies it to pve-03 before you have finished reading it back.

Reversibility — can you undo it, and how fast?

ClassMeaningExample
Trivially reversibleOne command, seconds, no data implicationGuest firewall rule, qm set --description
Reversible with disruptionUndo requires a restart or migrationKernel pin and reboot, machine-version change
Reversible with effortRestore from backup, rebuildNode reinstall, storage reconfiguration
IrreversibleNo path back at allSee the list below

Detectability — how quickly will you know it went wrong?

ClassMeaningExample
ImmediateFails visibly within secondsA guest that will not start
Same sessionVisible during verificationA migration that fails
DelayedSurfaces hours or days laterA backup job that now silently skips a guest
LatentSurfaces only under failureA corosync change that works fine until a link drops; a min_size change that only matters when an OSD dies

The changes that cannot be undone

Every platform has a list. This is Proxmox’s, and it is worth knowing by heart because these are the ones where “we can always roll it back” is false.

OperationWhy there is no way back
volblocksize on a zvolSet at creation only. Changing it means creating a new zvol and copying the data
Removing a vdev from a RAIDZ poolNot supported. The pool must be destroyed and rebuilt
Reducing a Ceph pool’s sizeThe extra replicas are deleted immediately. Raising it back rebuilds from what remains, which is now fewer copies than you had
pvecm delnode on a node you want backThe node must be reinstalled; rejoining a previously removed node with its old identity is not supported
Destroying a guest with --purgeRemoves the configuration, the disks, and the backup job and replication references
Removing a storage that still holds contentThe definition goes; whether the data goes depends on the backend, and you will find out afterwards
Reducing a filesystem inside a guest without shrinking the disk firstOrdering error, not a Proxmox one, and it is the classic route to an unbootable guest
Deleting a pveum role that ACLs referenceThe ACL entries are dropped, not preserved. Recreating the role does not restore them
Pruning a PBS backup groupSnapshots are gone. Retention protects you only until somebody runs a prune with different parameters

The three classes, and what each entitles you to

ClassDefinitionApprovalScheduling
StandardPre-approved, repeatedly executed, documented procedure, well-understood outcomeNone per instance — the procedure was approved onceAny time
NormalEverything else that is plannedApproval before schedulingIn an agreed window
EmergencyRequired to restore service or remediate an active threatRetrospective, with a named authoriser at the timeImmediately

What qualifies as standard on a Proxmox cluster

A change is standard when it satisfies all of: blast radius of one guest or smaller, trivially reversible, immediate detectability, and a written procedure that has been executed successfully at least a handful of times.

Realistic standard changes:

  • Create a guest from an approved template
  • Extend a guest disk (extending, never shrinking)
  • Add or remove a guest firewall rule from an approved rule set
  • Take or delete a guest snapshot
  • Start, stop or reboot a guest inside its own maintenance window
  • Live-migrate a guest between nodes on shared storage
  • Add a guest to an existing backup job

The point of the standard class is that these should be fast. If your process makes creating a VM from a template take two days, engineers will route around the process, and then you will have no change record for anything.

Normal changes, with their real classification

ChangeBlast radiusReversibilityDetectabilityHandling
Node kernel or microcode updateAll guests on the nodeReversible — kernel pin to the previous versionImmediate at boot, delayed for driver regressionsRolling, one node, verify before the next
Add a node to the clusterClusterReversible with effortImmediateNormal, in a window
Add or change a storage definitionClusterReversibleDelayed — failures show at the next backup or migrationNormal, verify by exercising it
Change datacenter firewall rulesClusterReversible, if you still have accessImmediate, possibly to your own sessionNormal, with console access confirmed first
Change corosync.confCluster, and quorumReversible with effortLatentHigh-risk normal, tested by inducing failure
PVE minor version upgradeRolling, per nodeReversible with effortMixedNormal, one node first, soak, then the rest
PVE major version upgradeClusterReversible only by restoreMixedHigh-risk normal — own window, own plan
Ceph release upgradeThe dataEffectively irreversible once OSDs are convertedDelayedHigh-risk normal
Change Ceph pool size or min_sizeThe dataReducing size is irreversibleLatentHigh-risk normal, and reducing needs an explicit data-loss review
Certificate replacement on pveproxyCluster accessReversibleImmediateNormal, but hold a shell open

What the approver actually needs

Most change records answer “what are you doing”. An approver cannot evaluate risk from that. Six questions, and a record that answers them can be approved in two minutes.

QuestionWhat a bad answer looks likeWhat a usable answer looks like
What changes, exactly?“Update the firewall”“Add one rule to the datacenter security group mgmt-in, permitting TCP 8006 from 192.0.2.0/24. No other rule modified”
On which hosts?“The cluster”“Datacenter level, therefore all 5 nodes simultaneously”
Who is affected if it goes wrong?“Nobody, it is low risk”“All GUI and API access from outside the management network. Guests unaffected. 3 automation systems use the API from that range”
How will you know within 5 minutes?“We will check it works”“From an external host: curl the API on each node, expect 200. From inside: confirm the 3 automation systems still poll successfully”
How do you undo it, and has that been run?“Revert the change”pvesh delete the rule, tested in the lab cluster on 2026-08-05. Console open on all 5 nodes throughout”
What if the backout fails?(usually blank)“Console access to each node; the firewall can be disabled locally with pve-firewall stop, which is node-local and does not need the cluster”

The fifth and sixth questions are the ones that separate a real record from a ceremonial one, and the sixth is nearly always blank. It is also the one that matters most, because the incidents that become long incidents are the ones where the backout did not work.

Read-only / Safethe pre-change evidence pack, gathered before you touch anything
set -euo pipefail
CHANGE=CHG-2026-0412
OUT="/root/change-evidence/$CHANGE"
mkdir -p "$OUT"

# Cluster state before.
pvecm status                      > "$OUT/pvecm-status.txt"
pvesm status                      > "$OUT/pvesm-status.txt"
ha-manager status                 > "$OUT/ha-status.txt"
pveversion -v                     > "$OUT/pveversion.txt"

# Guest inventory and run state.
qm list                           > "$OUT/qm-list.txt"
pct list                          > "$OUT/pct-list.txt"

# The cluster configuration itself. This is the artefact a backout needs.
tar czf "$OUT/etc-pve.tar.gz" -C /etc pve

# Storage-specific state, where applicable.
ceph -s                           > "$OUT/ceph-status.txt" 2>/dev/null || true
zpool status                      > "$OUT/zpool-status.txt" 2>/dev/null || true

# Copy it OFF the cluster before making the change.
echo "evidence in $OUT - copy it off-cluster now"

Post-implementation review, in five minutes

Not a ceremony. Five questions, written into the change record when it is closed, and reviewed in bulk once a quarter:

  1. Did it do what it was supposed to? Yes, partially, no.
  2. Did the verification actually verify? Would it have caught a failure, or was it “it looked fine”?
  3. Was the classification right? In hindsight, was the blast radius larger than assessed?
  4. Did anything unexpected happen? Including things that turned out harmless.
  5. Should this become a standard change? After the third or fourth uneventful execution of the same normal change, promoting it is what keeps the process from becoming overhead.

Question 5 is the one that makes the whole system sustainable. A change process that only ever adds scrutiny becomes a tax; one that promotes proven procedures into the standard class gets faster over time, and that is what keeps engineers using it.

Common mistakes

  • Classifying by how hard the change feels, rather than by blast radius, reversibility and detectability.
  • Forgetting that /etc/pve is cluster-wide. A change made on one node is a change made everywhere.
  • Never assessing detectability, so latent failures are approved as low-risk.
  • A backout plan that has never been executed.
  • No answer to “what if the backout fails”.
  • Making an access-affecting change without a console already open.
  • Rolling changes with no soak, so the first backup on the new version runs after every node is committed.
  • Emergency drift, and treating the resulting rate as a discipline problem.
  • Never promoting proven changes to standard, so the process becomes a tax and gets bypassed.

Key takeaways

  • Classify on blast radius, reversibility and detectability. Latent detectability is the property that is never assessed and matters most.
  • Anything written into /etc/pve has cluster-wide blast radius regardless of which node you typed it on.
  • Know the irreversible list. For those changes the backout is a restore, and the restore must have been tested.
  • Standard changes must be genuinely fast, or the process gets bypassed.
  • The approver needs six answers, and the two usually missing are “has the backout been run” and “what if it fails”.
  • Soak a rolling change for at least one full backup cycle.
  • A high emergency rate is a process-design signal, not a discipline problem.

Knowledge check

Knowledge check · 5 questions

  1. Q1. An engineer proposes adding a rule to the datacenter-level firewall on one node of a five-node cluster. What is the blast radius?

  2. Q2. Which of these Proxmox operations are effectively irreversible? Select all that apply.

  3. Q3. A change whose failure mode only appears during a subsequent failure has to be tested by inducing that failure, because verifying it immediately afterwards cannot distinguish success from the failure mode.

  4. Q4. A cluster reports that 40% of its changes over the last quarter went through the emergency path. What does this most likely indicate?

  5. Q5. Why should a rolling cluster upgrade soak on the first node for at least one full backup cycle before proceeding?

Passing score: 75%. Answers are checked in this browser.