Does Proxmox VE Support Safe Configuration Rollback After a Schema Change?
0 reputation · 10 Mar 2023, 11:57 UTC
0 reputation · 10 Mar 2023, 11:57 UTC
Determine whether a configuration backup created after upgrading a Proxmox VE cluster can be restored on a node running an earlier Proxmox VE release without manual edits or encountering parse errors.
The cluster configuration resides in pmxcfs under /etc/pve, and newer Proxmox VE releases may introduce new VM, storage, or cluster options that older versions do not recognize. No official downgrade path or schema versioning is published, and package downgrades via apt are not supported, leaving the safety of rolling back the configuration uncertain.
Does restoring a post‑upgrade configuration backup on an older Proxmox VE version always succeed without errors? Are there any safe procedures to strip or ignore newly added schema fields when attempting a downgrade?
34275 reputation · 10 Mar 2023, 14:06 UTC
Short answer: No, there is no guaranteed “drop‑in” rollback path. The parser in most Proxmox components tolerates unknown keys, so a configuration file that contains only newer options will usually load on an older node without a hard parse error. However, a handful of files (e.g., corosync.conf, datacenter.cfg, and newer VM/container spec fields that are treated as mandatory) can cause startup failures or runtime crashes when the older code encounters them. Because Proxmox publishes no schema version and does not ship a downgrade tool, the safest approach is to manually strip or comment out any keys that are not present in the target release before restoring the backup.
/etc/pve/*.conf files are simple key=value lists. The underlying pve-manager parser will silently ignore keys it does not recognise.tpmstate0 block in a VM config) the older pve-qemu code may abort the whole parse, even if the rest of the file is valid.corosync.conf have version‑gated options (e.g., token format, link_mode) that will make corosync refuse to start./etc/pve:
systemctl stop pve-cluster corosync
/tmp/restore.
mkdir -p /tmp/restore
tar -xzf /path/to/backup.tar.gz -C /tmp/restore
grep -R "^[a-zA-Z0-9_-]:" /tmp/restore | cut -d: -f1 | sort -u
Cross‑reference each key with the PVE/*/Config.pm allow‑list that ships with the older release (viewable with dpkg -L pve-manager | grep Config.pm)./tmp/restore or use a simple sed loop:
for f in $(find /tmp/restore -type f -name "*.conf"); do
sed -i '/^\s*unknown_key:/d' "$f"
done
Replace unknown_key with the actual names you identified.rsync -av /tmp/restore/ /etc/pve/
corosync and pve-cluster start cleanly:
systemctl start corosync pve-cluster
journalctl -u corosync -n 20
journalctl -u pve-cluster -n 20
qm start 101 --debug
If it boots, the configuration is compatible.corosync.conf with a newer token format or link‑mode that the older corosync binary can’t parse.ceph.conf or /etc/pve/ceph may cause the ceph daemon to exit.To fine‑tune the cleanup script, it would help to know which older Proxmox VE version you are targeting (e.g., 7.4 vs 7.2). The set of unknown keys that need removal differs between releases.
Proxmox VE does not provide a formal downgrade mechanism. A direct restore of a post‑upgrade backup on an older node will usually work because the parser is tolerant, but you must manually audit and strip any keys that the older code does not recognise. The safest path is to perform the steps above on a dedicated staging node, validate all VMs, and only then copy the cleaned configuration into the production cluster.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.