Proxmox VEI · FoundationsArchitecture
Where configuration actually lives
What you'll learn
- Locate the configuration file for any subsystem in under a minute
- Distinguish cluster-wide config from node-local config
- Back up the right files for full restoration
- Recognise which tools write to which files
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-07
Why this matters in production
When a disk fills up, a configuration file corrupts, or a node is rebuilt, the first question is: where is the configuration I need to preserve? This lesson gives a complete map, so you never have to guess.
The mental model
Proxmox has three layers of configuration:
- Cluster-wide (
/etc/pve/) — replicated via pmxcfs. Anything here is automatically consistent across the cluster (assuming quorum). - Node-local (
/etc/pve/nodes/<nodename>/plus traditional/etc/paths) — written per-node. Survives cluster reconfiguration, but must be backed up per node. - Per-VM / per-container (
/etc/pve/qemu-server/<vmid>.conf,/etc/pve/lxc/<ctid>.conf) — these are cluster-wide because the VM must be live-migrable.
flowchart LR
subgraph CW[Cluster-wide — pmxcfs]
A["/etc/pve/qemu-server/"]
B["/etc/pve/lxc/"]
C["/etc/pve/storage.cfg"]
D["/etc/pve/user.cfg"]
E["/etc/pve/ha/"]
F["/etc/pve/sdn/"]
G["/etc/pve/ceph.conf"]
end
subgraph NL[Node-local]
H["/etc/pve/nodes/<node>/"]
I["/etc/network/interfaces"]
J["/etc/default/grub"]
K["/etc/pve/priv/"]
L["/etc/pve/nodes/<thisnode>/priv"]
end
The complete map
Cluster-wide (/etc/pve/)
| Path | Owner | Format |
|---|---|---|
qemu-server/<vmid>.conf | VM hardware config | key: value |
lxc/<ctid>.conf | Container config | key: value |
storage.cfg | Storage backends | INI-like |
user.cfg | Local users | INI-like |
acl.cfg | Access control list | path-based roles |
domains.cfg | External auth realms (LDAP, AD, OIDC) | INI-like |
ha/manager.cfg | HA manager settings | key-value |
ha/resources.cfg | HA-managed VMs/containers | section-per-resource |
ha/rules.cfg | HA node/resource affinity rules | section-per-rule |
sdn/zones.cfg | SDN zones | section |
sdn/vnets.cfg | SDN VNets | section |
sdn/subnets.cfg | SDN subnets | section |
sdn/controllers.cfg | SDN controllers (BGP/EVPN) | section |
ceph.conf | Ceph global config | INI-like |
datacenter.cfg | Datacenter-wide settings | key-value |
firewall/cluster.fw | Cluster-wide firewall rules | custom |
firewall/<node>.fw | Per-host firewall rules | custom |
Node-local (/etc/pve/nodes/<nodename>/ and /etc/)
| Path | Owner |
|---|---|
nodes/<nodename>/qemu-server/<vmid>.conf | Symlink to cluster-wide VM config (for symmetry) |
nodes/<nodename>/lxc/<ctid>.conf | Same, for containers |
nodes/<nodename>/host.fw | Per-host firewall overrides |
nodes/<nodename>/repl/<vmid>.conf | Replication schedules |
nodes/<nodename>/priv/ | Per-node secrets (Ceph keyrings, replication SSH keys) |
/etc/network/interfaces | Host network — managed by ifupdown2 |
/etc/default/grub | Bootloader kernel command line |
/etc/resolv.conf | DNS — managed by the host |
/etc/hosts | Hostname mappings |
/etc/pve/cpu-models.conf | Named CPU model definitions |
/etc/pve/storage.cfg local edits | (none — replicated, but locally cached) |
VM disks and runtime state
| Path | Owner |
|---|---|
/var/lib/vz/ | Default local storage for ISO images, templates, backups |
<storage>/<vmid>/... | Actual VM disks (path depends on the storage backend) |
How tools write
| Tool | What it writes |
|---|---|
| GUI | Goes through API → pvedaemon → pmxcfs |
qm, pct | Direct pmxcfs write + QEMU command |
pvesh | API client — same path as the GUI |
pvesm | Writes storage.cfg |
pveceph | Writes Ceph config files + Ceph MON/OSD config |
ha-manager | Writes ha/manager.cfg, ha/resources.cfg, ha/rules.cfg |
pvecm | Writes corosync.conf, manages membership in pmxcfs |
| Manual edit | Same — pmxcfs watches and propagates |
GUI walkthrough
The GUI exposes config through “Configuration” sections in the tree:
- Datacenter → Configuration — clustering, users, storage, firewall, SDN, HA, replication.
- Node → Configuration — network, DNS, certificates, subscription.
Each section has a Revert button that restores the previous file from the pmxcfs snapshot. This is invaluable when an edit went wrong.
CLI walkthrough
ls -la /etc/pve/
cat /etc/pve/storage.cfg
pmxcfs-tool status && pmxcfs-tool versions
Production considerations
- Version-control your config. A simple cron job that
tars/etc/pve/and pushes to a Git repo (oretckeeper) gives you auditability and roll-back. The files are text. - Back up
/etc/pve/off-host. pmxcfs replicates across the cluster but is not a backup. If all nodes lose their disks, the config is gone. - Restoration on a fresh node is fast. Drop the old
/etc/pve/(cluster-join process handles sync) and the new node joins with all VM configs intact.
Common mistakes
- Trying to back up
/etc/pve/<file>per node. Files in/etc/pve/are the same on every node (pmxcfs replicates). Backing up from one node is sufficient. - Confusing
/etc/pve/priv(cluster-wide keys for things like PBS storage credentials) with/etc/pve/nodes/<local>/priv(node-local secrets like Ceph keyrings). - Editing config files on a node that has lost quorum. Edits succeed locally but cannot propagate.
Key takeaways
/etc/pve/is the cluster filesystem (pmxcfs); replicated, authoritative./etc/pve/priv/is per-node secrets; not replicated.- All config is text and human-readable. This is a feature.
Knowledge check
Knowledge check · 3 questions
Q1. Where do per-node Ceph keyrings live?
Q2. All VM configuration under /etc/pve/qemu-server/ is replicated cluster-wide.
Q3. Which command lists the recent versions of every pmxcfs file?
Passing score: 75%. Answers are checked in this browser.