Skip to main content
RunBook Academy

Proxmox VEI · FoundationsArchitecture

Proxmox VE architecture and daemons

Intermediate⏱ ~18 min

What you'll learn

  • Map each management operation to the daemon that performs it
  • Explain how pmxcfs keeps cluster-wide configuration consistent
  • Identify which daemons matter for a given failure scenario
  • Find each daemon’s log in journalctl

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 something breaks, you triage by understanding which subsystem owns which responsibility. “Is the cluster filesystem stale?”, “Is the API daemon alive?”, “Is the QEMU process wedged?” — these are different questions, addressed by different daemons, with different log locations.

Mental model

A Proxmox node is a Debian system with a set of cooperating daemons layered on top. The GUI, CLI, and API all funnel through the same internal services.

flowchart TB
  subgraph CLIENT[Clients]
    GUI[Web GUI]
    CLI[qm / pct / pvesh]
    API[REST API]
  end
  subgraph MANAGEMENT[Management stack]
    PROXY[pveproxy + pveapi]
    DAEMON[pvedaemon]
    WORKER[pvefw firewall worker]
  end
  subgraph CORE[Core cluster]
    PMXCFS[pmxcfs cluster filesystem]
    STATUS[pvestatd status collector]
    SCHED[pvescheduler]
  end
  subgraph HYPERVISOR[Hypervisor]
    QEMU[QEMU/KVM]
    LXC[LXC runtime]
  end
  subgraph OPTIONAL[Optional]
    HA[HA: pve-ha-crm + pve-ha-lrm]
    CEPH[pveceph services]
    BACKUP[vzdump / PBS client]
  end

  CLIENT --> PROXY
  CLI --> DAEMON
  API --> PROXY
  PROXY --> DAEMON
  DAEMON --> PMXCFS
  DAEMON --> QEMU
  DAEMON --> LXC
  DAEMON --> HA
  DAEMON --> CEPH
  STATUS --> PMXCFS
  SCHED --> DAEMON
  QEMU --> PMXCFS

The core daemons

DaemonRoleLogs
pveproxyReverse proxy fronting the API; serves the GUI.journalctl -u pveproxy
pvedaemonListens on the local socket, dispatches API calls, spawns workers.journalctl -u pvedaemon
pvestatdCollects VM/container status, syncs to pmxcfs.journalctl -u pvestatd
pveschedulerRuns scheduled tasks (backups, HA rebalance, etc.).journalctl -u pvescheduler
pve-firewalliptables/ipset manager for host and VM firewalls.journalctl -u pve-firewall
pve-ha-crmCluster Resource Manager; runs on the master node.journalctl -u pve-ha-crm
pve-ha-lrmLocal Resource Manager; runs on every node.journalctl -u pve-ha-lrm
spiceproxySPICE console proxy for VMs.journalctl -u spiceproxy
qmeventdWatches QEMU monitor socket for guest lifecycle events.journalctl -u qmeventd

pmxcfs — the cluster filesystem

The most distinctive piece of Proxmox architecture. pmxcfs is a FUSE filesystem mounted at /etc/pve/. It replicates configuration files across the cluster using Corosync, provides distributed locking, and becomes read-only if quorum is lost.

flowchart LR
  N1[pve-01 /etc/pve] --> C[Corosync]
  N2[pve-02 /etc/pve] --> C
  N3[pve-03 /etc/pve] --> C

Key files under /etc/pve/:

FileContent
qemu-server/<vmid>.confVM configs
lxc/<ctid>.confContainer configs
storage.cfgStorage backend definitions
user.cfg, acl.cfg, domains.cfgAuth, RBAC
ha/manager.cfg, ha/resources.cfg, ha/rules.cfgHA configuration (PVE 9)
ceph.confCluster-shared Ceph configuration
nodes/<node>/<file>Per-node configuration (host firewall, network, replication)
private/Sensitive material (Ceph keyrings, SSH keys) — only root, never replicated
.membersCluster membership view (the only file written by the membership layer)

How a “Start VM” operation flows

sequenceDiagram
  participant User
  participant GUI as Web GUI
  participant Proxy as pveproxy
  participant Daemon as pvedaemon
  participant Cfs as pmxcfs
  participant Qemu as QEMU
  participant Stat as pvestatd

  User->>GUI: click "Start"
  GUI->>Proxy: POST /api2/json/nodes/pve-02/qemu/100/status/start
  Proxy->>Daemon: dispatch over local socket
  Daemon->>Cfs: write lockfile, update status
  Daemon->>Qemu: qm start (fork QEMU process)
  Qemu-->>Daemon: PID, monitor socket
  Daemon->>Cfs: release lock, update status
  Stat->>Cfs: periodic status updates

Important files (continued)

PathContent
/var/log/pve/tasks/Task history — every operation logged here. First place to look after an outage.
/var/log/pve/qemu/<vmid>.logPer-VM QEMU log.
/var/log/pve-firewall.logFirewall decisions.
/var/log/ceph/Ceph OSD/MON/MGR logs if Ceph is in use.
/etc/network/interfacesHost network configuration (managed by ifupdown2).
/etc/pve/sdn/SDN configuration (zones, VNets, controllers).

CLI walkthrough

systemctl list-units 'pve*' 'spiceproxy*' --no-pager
pmxcfs-tool status
ls -la /etc/pve/
Read-only / Safe
cat /var/log/pve/tasks/active 2>/dev/null || ls /var/log/pve/tasks/

Production considerations

  • Daemon health is observable via systemd. A node with degraded daemons will surface in the GUI dashboard. Do not silence alerts about service restarts.
  • pmxcfs is the thing to inspect first when “the GUI is wrong.” Either a config change did not propagate (check the file), or the daemon is wedged (check journalctl).
  • pvestatd writes can be heavy on large clusters. It refreshes VM status every few seconds. On very large clusters (1000+ VMs), consider tuning the cache TTLs in /etc/pve/datacenter.cfg.

Common mistakes

  • Trying to “fix” a cluster-wide change by editing /etc/pve/foo.cfg on one node and not seeing the change on another. The change does propagate — but if pmxcfs has lost sync with that node, it will lag. Check pmxcfs-tool status.
  • Hunting for logs in /var/log/syslog. Proxmox is opinionated about where logs go; check the table above.
  • Treating /etc/pve/ as “just a directory.” It is a distributed filesystem with strong consistency semantics.

Key takeaways

  • Proxmox is a set of cooperating systemd services on top of Debian. Knowing which daemon owns what operation is the difference between a 5-minute triage and a 2-hour triage.
  • pmxcfs is the cluster filesystem that holds configuration. It is read-only on quorum loss.
  • Logs are in journalctl -u <unit> and under /var/log/pve/.

Knowledge check

Knowledge check · 4 questions

  1. Q1. Where is the authoritative copy of a VM configuration file stored?

  2. Q2. When a cluster loses quorum, pmxcfs becomes read-only.

  3. Q3. Which systemd unit logs cluster-resource-manager decisions?

  4. Q4. Which files live under /etc/pve/ and are replicated cluster-wide? (Select all that apply.)

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