Proxmox VEI · FoundationsArchitecture
Proxmox VE architecture and daemons
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
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
| Daemon | Role | Logs |
|---|---|---|
pveproxy | Reverse proxy fronting the API; serves the GUI. | journalctl -u pveproxy |
pvedaemon | Listens on the local socket, dispatches API calls, spawns workers. | journalctl -u pvedaemon |
pvestatd | Collects VM/container status, syncs to pmxcfs. | journalctl -u pvestatd |
pvescheduler | Runs scheduled tasks (backups, HA rebalance, etc.). | journalctl -u pvescheduler |
pve-firewall | iptables/ipset manager for host and VM firewalls. | journalctl -u pve-firewall |
pve-ha-crm | Cluster Resource Manager; runs on the master node. | journalctl -u pve-ha-crm |
pve-ha-lrm | Local Resource Manager; runs on every node. | journalctl -u pve-ha-lrm |
spiceproxy | SPICE console proxy for VMs. | journalctl -u spiceproxy |
qmeventd | Watches 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/:
| File | Content |
|---|---|
qemu-server/<vmid>.conf | VM configs |
lxc/<ctid>.conf | Container configs |
storage.cfg | Storage backend definitions |
user.cfg, acl.cfg, domains.cfg | Auth, RBAC |
ha/manager.cfg, ha/resources.cfg, ha/rules.cfg | HA configuration (PVE 9) |
ceph.conf | Cluster-shared Ceph configuration |
nodes/<node>/<file> | Per-node configuration (host firewall, network, replication) |
private/ | Sensitive material (Ceph keyrings, SSH keys) — only root, never replicated |
.members | Cluster 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)
| Path | Content |
|---|---|
/var/log/pve/tasks/ | Task history — every operation logged here. First place to look after an outage. |
/var/log/pve/qemu/<vmid>.log | Per-VM QEMU log. |
/var/log/pve-firewall.log | Firewall decisions. |
/var/log/ceph/ | Ceph OSD/MON/MGR logs if Ceph is in use. |
/etc/network/interfaces | Host 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/
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.cfgon 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. Checkpmxcfs-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.
pmxcfsis 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
Q1. Where is the authoritative copy of a VM configuration file stored?
Q2. When a cluster loses quorum, pmxcfs becomes read-only.
Q3. Which systemd unit logs cluster-resource-manager decisions?
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.