When Proxmox VE breaks, the difference between a five-minute fix and a four-hour outage comes down to having a repeatable process. This guide gives you a structured workflow — inventory, safe change practices, targeted diagnostics, and step-by-step recovery — for the most common failures. Every command is tested, copy-pastable, and includes expected output so you can verify before moving on.
Audience: DevOps engineers, platform teams, and technical founders running Proxmox nodes or clusters who need reliable, low-risk troubleshooting patterns.
Scope: Core services (pveproxy, pvedaemon, pve-cluster, corosync), QEMU VMs (qm), LXC containers (pct), storage (LVM-thin, ZFS, Ceph RBD), and Linux bridge networking.
Assumptions: Debian-based Proxmox VE, console access (physical, IPMI/iKVM, or hypervisor console), and at least one recent backup or snapshot of critical guests.
---
1. Version and Environment Inventory
Before changing anything, capture a complete snapshot of the environment. This ensures your diagnostics match what is actually running and gives you a baseline for rollback.
Prerequisites
- Console access in case network connectivity is lost.
- A maintenance window for disruptive steps (service restarts, storage repairs).
- Current backups of critical guests or snapshots where appropriate.
Read-Only Inventory Commands
System and Proxmox versions
pveversion -v
uname -r
cat /etc/debian_version
Cluster and quorum status (if clustered)
pvecm status
pvecm nodes
systemctl status corosync
journalctl -u corosync --since "-1h"
Core services
systemctl status pveproxy pvedaemon pve-cluster
journalctl -u pveproxy -u pvedaemon -u pve-cluster --since "-1h"
Network overview
ip -br a
ip -br link
cat /etc/network/interfaces
ss -tulpn | grep 8006 # Web UI (HTTPS)
Storage inventory
pvesm status
lvs -a -o+seg_monitor
vgs
df -hT | sort -k6
zpool status # if ZFS is used
Virtual machines and containers
qm list
pct list
Optional Ceph (if configured on the node)
ceph -s
ceph health detail
What to Record
- Proxmox version and kernel.
- Node role (standalone, cluster member), quorum status, and number of online nodes.
- Bridges (vmbrX) and physical NIC mapping.
- Storage type per guest (LVM-thin, ZFS, Ceph RBD, NFS, etc.).
- Which services are degraded or failed.
Quick Triage Mapping Table
| Symptom | First Place to Look | Quick Command |
|---|---|---|
| Web UI not loading | pveproxy, port 8006, logs | systemctl status pveproxy; ss -tlnp | grep 8006 |
| VM fails to start | Storage free space, lock, qemu log | qm status <id>; lvs; df -h; journalctl -xe |
| No quorum | Corosync network and vote count | pvecm status; systemctl status corosync |
| Disk full | Filesystem, thinpool, ZFS | df -hT; lvs -a; zpool status |
| Slow backups | vzdump logs, I/O load | tail -n 200 /var/log/vzdump/*; iostat -xz 5 |
---
2. Safe Configuration Path
The goal is to make the smallest change that proves or disproves a hypothesis while keeping your way back open.
Principles
- Prefer read-only commands first; make changes only after confirming a likely cause.
- Protect access: do disruptive network edits from local console; test with ifupdown2 where possible.
- Avoid cluster-wide restarts; fix the smallest failing component.
- Observe locks and running tasks before forcing unlocks.
Practical Guardrails
- Preserve a working shell before applying network or storage changes: keep one SSH root shell and one console session open. If you lose SSH, the console remains.
- If the node is part of a cluster, only restart the service on the affected node unless you are addressing a cluster-wide issue.
- Before unlocking a guest, confirm no backup/replication task is still running.
Commonly Safe vs. Modifying Commands
| Command | Type | Purpose |
|---|---|---|
pveversion -v | Read-only | Full version inventory |
journalctl -u <svc> | Read-only | Recent service logs |
pvesm status | Read-only | Storage plugin status |
qm list / pct list | Read-only | Guest inventory |
ifreload -a | Modifying | Apply network interface changes |
systemctl restart <svc> | Modifying | Restart a failing service |
qm unlock <vmid> | Modifying | Clear guest lock after validation |
lvextend / zpool replace | Modifying | Storage repair/expansion |
Safe Network Changes with ifupdown2
Proxmox VE includes ifupdown2, which allows applying and validating interface changes with lower risk:
ifquery --list
ifquery --state
ifreload -a
Always test with ifreload -a from console, not SSH, when modifying bridge or physical NIC configuration.
---
3. Verification and Diagnostics
Use these targeted checks to confirm the most likely root causes quickly and safely.
3.1 Web UI Not Responding (Port 8006)
systemctl status pveproxy
ss -tlnp | grep 8006
curl -k https://127.0.0.1:8006
Expected: pveproxy active, port 8006 listening on 0.0.0.0 or ::, and curl returns HTML.
If not listening, inspect recent logs:
journalctl -u pveproxy --since "-15m"
Common findings: certificate issues, out-of-disk on root or /var/log, or port conflicts with another service.
Check disk space on root and log partitions:
df -hT | sort -k6
journalctl -p err --since "-1h"
3.2 VM Fails to Start (Example VMID 101)
qm status 101
qm config 101
ls -l /etc/pve/qemu-server/101.conf
Check for a locked state:
qm list | grep 101 # shows lock=backup or lock=snapshot if present
Check storage utilization and thinpool:
lvs -a -o+data_percent,metadata_percent
pvesm status
If logs mention I/O or image not found, inspect syslog and qemu logs:
journalctl -xe --since "-15m" | grep -i -E "qemu|kvm|storage|i/o|ioerror"
Expected: a clear lock reason, insufficient space, missing disk path, or permission error.
3.3 Cluster Lost Quorum (Example: 3-Node Cluster, Only 1 Node Up)
pvecm status
systemctl status corosync
journalctl -u corosync --since "-30m"
Verify time sync and network reachability on the corosync ring interface (typically ring0):
timedatectl
ping -c3 <peer-ring0-ip>
Expected: corosync unhealthy, node count below expected, possible network partition or time drift > 50ms.
3.4 Slow or Failing Backups
ls -1 /var/log/vzdump/
tail -n 200 /var/log/vzdump/*
Check I/O pressure and storage latency:
iostat -xz 5 3
pvesm status
Expected: network-backed storage saturation, thinpool near full, or compression CPU bound (single-threaded gzip on large VMs).
---
4. Failure Modes and Recovery
Step-by-step fixes with rollback notes and verification checks.
A) Web UI Down Due to pveproxy Failure
- Verify and capture logs:
systemctl status pveproxy
journalctl -u pveproxy --since "-30m"
- If disk space is low, free space safely (see Section D). If port 8006 is occupied by another service, stop the conflicting service.
- Restart pveproxy safely:
systemctl restart pveproxy
- Verify:
ss -tlnp | grep 8006
curl -k https://127.0.0.1:8006
Rollback: If restart causes wider issues, revert by restarting only pveproxy back to a known-good state or reboot during a maintenance window if service dependencies are tangled.
---
B) VM Stuck with Lock or Will Not Start
- Confirm no backup is running for that VM:
ps aux | grep vzdump | grep 101 || true
- If a stale lock is present and no task is running, clear it:
qm unlock 101
- Recheck config and start:
qm config 101
qm start 101
Verification: qm status 101 shows running; console connects.
Rollback: Do not delete or move disk images. If you changed config, keep a backup of /etc/pve/qemu-server/101.conf before edits and restore it if the VM fails to start after changes.
- If storage is full or thinpool metadata is 100%, fix storage first (see Section D).
---
C) No Quorum in a Cluster
Preconditions: Understand that starting HA-managed VMs without quorum risks split-brain. Work from console if networking is unstable.
- Identify which nodes are up:
pvecm nodes
pvecm status
- Fix network reachability on the corosync ring interfaces (often ring0). Check link up and IP reachability to peers. Correct cabling, VLAN, or bridge issues first.
- Verify time is sane and synchronized:
timedatectl
- Restart corosync on affected nodes only after network is stable:
systemctl restart corosync
- Verify:
pvecm status # look for Quorate: Yes and expected node count
Rollback: If quorum cannot be restored quickly, it may be safer to keep the minority partition powered down (or keep HA services stopped) until connectivity is restored. Avoid forcing services up without quorum unless you fully isolate the other partition.
---
D) Disk Full: Root Filesystem or Thinpool
Root Filesystem Full
- Identify space usage:
df -hT
journalctl -p err --since "-1h"
- Clean common culprits carefully:
apt-get clean
journalctl --vacuum-time=7d
rm -f /var/lib/vz/template/iso/*.iso # only if safe to remove
find /var/log -type f -name "*.log" -size +200M -print
- Check for deleted-open files (space not freed yet):
lsof +L1 | head -n 20
- Verify free space:
df -hT
Rollback: If a cleanup removed needed artifacts, restore them from backup or recreate as needed (for example, ISO images).
LVM-Thin Nearly or Fully Used (Example Thinpool: pve/data)
- Inspect usage:
lvs -a -o+data_percent,metadata_percent pve/data
- If data is near 100%, extend the thinpool (ensure free VG space is available):
lvextend -L +20G pve/data
- If metadata is high (for example >85%) or full, extend metadata safely:
lvextend --poolmetadatasize +1G pve/data
- Recheck:
lvs -a -o+data_percent,metadata_percent pve/data
Rollback: If you over-extended, you can reduce other LVs or add a new PV and vgextend the VG, but shrinking thinpools is risky; prefer adding capacity rather than reversing thin changes.
- Start/retry the affected VM.
ZFS Pool Degraded
- Inspect pool:
zpool status
- Identify the failed device and map to a physical disk by serial:
ls -l /dev/disk/by-id/
- Replace or reattach (example):
zpool replace rpool /dev/disk/by-id/old-disk-id /dev/disk/by-id/new-disk-id
- Monitor resilver:
zpool status
Rollback: If the wrong disk was detached, online it back quickly:
zpool online rpool /dev/disk/by-id/that-disk
---
E) Network Change Locked You Out
- Use the console to log in.
- Restore the previous known-good interfaces file:
cp /etc/network/interfaces.bak /etc/network/interfaces
ifreload -a # ifupdown2
- If ifreload fails, use ifdown/ifup on the specific interface/bridge:
ifdown vmbr0 && ifup vmbr0
- Validate link and address:
ip -br a
ping -c3 default-gateway
Rollback: Keep a dated backup of /etc/network/interfaces before every change. If the bridge lost its enslaved NIC, ensure the physical NIC stanza is manual and enslaved by vmbr0, not configured with an IP.
---
F) Corrupted or Missing VM Configuration
- Check whether the config exists:
ls -l /etc/pve/qemu-server/
- If missing but disk images exist on storage, recreate a minimal config and reattach disks (example VMID 101, disk path
local-lvm:vm-101-disk-0):
qm create 101 --name recovered-101 --memory 4096 --cores 2 --net0 virtio,bridge=vmbr0
qm set 101 --scsi0 local-lvm:vm-101-disk-0
qm set 101 --boot order=scsi0
qm start 101
Rollback: Back up the re-created config before further changes so you can revert to the minimal working baseline if needed.
- If an old config backup exists, restore it, then verify hardware matches the attached disks.
---
G) Backups Failing or Too Slow
- Inspect vzdump logs and recent tasks:
tail -n 200 /var/log/vzdump/*
cat /var/log/pve/tasks/index
- Check target storage latency and space:
pvesm status
- Triage fixes:
- Move the backup window to lower I/O periods.
- If network storage, verify MTU and path (no asymmetry), and test with a simple file copy.
- Reduce compression or enable pigz if CPU bound:
# In /etc/vzdump.conf or per-job:
pigz: 1
Rollback: Revert any compression or schedule changes if they cause higher load elsewhere.
- Verify: run a single small VM backup to confirm improvements.
---
5. Operations Checklist
Use this as a quick routine before and during incidents.
Daily/Weekly Health
pveversion -vandapt list --upgradableduring maintenance windows only.pvecm statusshowsQuorate: Yesin clusters.df -hT,lvs -a, andzpool statusshow healthy headroom (target >20% free).journalctl -p err --since "yesterday"is empty or expected.pvesm statusshowsOKfor all storages.
Before Making Changes
- Take or confirm a recent backup/snapshot of critical guests.
- Save
/etc/network/interfacesto/etc/network/interfaces.bak. - Keep a console session open in case of SSH loss.
- Plan a rollback: know the command to revert the last change.
During Incident Triage
- Identify a single primary symptom and run the first two read-only checks.
- Form a narrow hypothesis; test with the smallest safe change.
- After each change, verify improvement or revert immediately.
Post-Fix Verification
- Confirm services:
systemctl status pveproxy pvedaemon pve-cluster. - Confirm guest state:
qm list,pct list. - Confirm storage and network health.
- Document cause, fix, and a guardrail to prevent recurrence.
Rollback Triggers and Actions
| Trigger | Action | Verification |
|---|---|---|
| Loss of UI after change | Revert config or restart pveproxy | Port 8006 listening, curl OK |
| Network loss after edit | Restore interfaces.bak; ifreload -a | SSH restored; ping gateway |
| VM start fails after edit | Restore prior VM config | VM boots; console works |
| Quorum remains lost | Stop changes; stabilize network | pvecm status shows quorum |
---
Conclusion
Troubleshooting Proxmox VE reliably is about discipline: gather versions and topology first, prefer read-only checks, change one thing at a time, and always keep a clear way back. With the inventories, safe command sets, verification steps, and recovery workflows in this guide, you can handle the most common failures quickly and confidently. Start with the smallest plausible fix, verify the expected result, and document the learning. Over time, these patterns lower incident duration and make your Proxmox operations more predictable.