Skip to main content
RunBook Academy

Proxmox VEI · FoundationsArchitecture

Where configuration actually lives

Foundation⏱ ~12 min

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

Not yet marked complete on this device.

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:

  1. Cluster-wide (/etc/pve/) — replicated via pmxcfs. Anything here is automatically consistent across the cluster (assuming quorum).
  2. Node-local (/etc/pve/nodes/<nodename>/ plus traditional /etc/ paths) — written per-node. Survives cluster reconfiguration, but must be backed up per node.
  3. 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/)

PathOwnerFormat
qemu-server/<vmid>.confVM hardware configkey: value
lxc/<ctid>.confContainer configkey: value
storage.cfgStorage backendsINI-like
user.cfgLocal usersINI-like
acl.cfgAccess control listpath-based roles
domains.cfgExternal auth realms (LDAP, AD, OIDC)INI-like
ha/manager.cfgHA manager settingskey-value
ha/resources.cfgHA-managed VMs/containerssection-per-resource
ha/rules.cfgHA node/resource affinity rulessection-per-rule
sdn/zones.cfgSDN zonessection
sdn/vnets.cfgSDN VNetssection
sdn/subnets.cfgSDN subnetssection
sdn/controllers.cfgSDN controllers (BGP/EVPN)section
ceph.confCeph global configINI-like
datacenter.cfgDatacenter-wide settingskey-value
firewall/cluster.fwCluster-wide firewall rulescustom
firewall/<node>.fwPer-host firewall rulescustom

Node-local (/etc/pve/nodes/<nodename>/ and /etc/)

PathOwner
nodes/<nodename>/qemu-server/<vmid>.confSymlink to cluster-wide VM config (for symmetry)
nodes/<nodename>/lxc/<ctid>.confSame, for containers
nodes/<nodename>/host.fwPer-host firewall overrides
nodes/<nodename>/repl/<vmid>.confReplication schedules
nodes/<nodename>/priv/Per-node secrets (Ceph keyrings, replication SSH keys)
/etc/network/interfacesHost network — managed by ifupdown2
/etc/default/grubBootloader kernel command line
/etc/resolv.confDNS — managed by the host
/etc/hostsHostname mappings
/etc/pve/cpu-models.confNamed CPU model definitions
/etc/pve/storage.cfg local edits(none — replicated, but locally cached)

VM disks and runtime state

PathOwner
/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

ToolWhat it writes
GUIGoes through API → pvedaemon → pmxcfs
qm, pctDirect pmxcfs write + QEMU command
pveshAPI client — same path as the GUI
pvesmWrites storage.cfg
pvecephWrites Ceph config files + Ceph MON/OSD config
ha-managerWrites ha/manager.cfg, ha/resources.cfg, ha/rules.cfg
pvecmWrites corosync.conf, manages membership in pmxcfs
Manual editSame — 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 (or etckeeper) 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

  1. Q1. Where do per-node Ceph keyrings live?

  2. Q2. All VM configuration under /etc/pve/qemu-server/ is replicated cluster-wide.

  3. Q3. Which command lists the recent versions of every pmxcfs file?

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