“Backups are for people who can’t rebuild from scratch” sounds
clever until your ZFS pool degrades, your NVMe dies mid-upgrade,
or you fat-finger rm -rf in the wrong LXC container. Proxmox
makes good backups easy — but great backups require intentional
architecture.
This guide covers four tiers of Proxmox backup strategy, from a single USB drive all the way to encrypted off-site replication. Every config is tested on Proxmox VE 8.x+.
Proxmox Backup Modes — Stop vs Suspend vs Snapshot
Before writing backup jobs, understand the tradeoffs:
| Mode | VM Downtime | Consistency | Use Case |
|---|---|---|---|
| Stop | Full downtime | Guaranteed FS | Critical databases, AD DCs |
| Suspend | ~Seconds | Good (RAM saved) | General workloads |
| Snapshot | Zero | Good (fs-freeze) | Production with guest agent |
Proxmox defaults to snapshot mode for VMs with the QEMU guest
agent installed. The guest agent calls fsfreeze before the
snapshot, ensuring filesystem-consistent backups without downtime.
For LXCs, stop mode is often safest — containers start in seconds, and the consistency guarantee is absolute. Use snapshot mode only for stateless or application-aware containers.
Tier 1 — Basic Vzdump to Local Storage
Every Proxmox install ships with vzdump. Minimal config:
|
|
Set retention via --remove or --maxfiles:
--remove 0— keep all backups (dangerous)--remove 2— keep 2 latest, delete older--maxfiles 5— keep up to 5 backups
Configure defaults in /etc/vzdump.conf:
|
|
Schedule via Proxmox UI: Datacenter → Backup → Add a new backup job. Set schedule in standard cron format:
|
|
Limitation: Vzdump creates full backups only. With a dozen VMs, a 500 GB ZFS pool fills up in days. This is fine for one or two critical VMs, but for a real homelab you need deduplication.
Tier 2 — Proxmox Backup Server (PBS)
PBS is the upgrade path from vzdump. It gives you:
- Incremental forever — first backup is full, subsequent backups are delta-only. A daily 10 GB VM change becomes ~200 MB on disk.
- Deduplication — identical blocks across VMs are stored once. Five Ubuntu server VMs cost barely more than one.
- Integrity verification — every backup chunk is verified against its SHA-256 hash on verify schedules.
- Garbage collection — prunes orphaned chunks after retention changes.
Deploy PBS in an LXC Container
PBS runs best as a Debian LXC on your Proxmox host:
|
|
Inside the container:
|
|
Connect Proxmox to PBS
From the Proxmox web UI: Datacenter → Storage → Add → Proxmox Backup Server.
ID: pbs-remote
Server: 10.0.20.50
Port: 8007
Datastore: pbs-main
Username: backup-admin@pbs
Password: <generated password>
Fingerprint: <SHA-256 from PBS UI → Dashboard → Fingerprint>
Or via CLI:
|
|
Create a backup job targeting the PBS datastore. The first run takes as long as a full vzdump. Every subsequent run takes seconds to minutes depending on changes.
Verify and Prune
PBS garbage collection and verification should run on schedule. In the PBS web UI: Datastore → Options:
|
|
Or via CLI:
|
|
Tier 3 — The 3-2-1 Rule
PBS on the same server protects against VM corruption, not hardware failure. The 3-2-1 rule means:
- 3 copies of your data
- 2 different media types
- 1 copy off-site
PBS container on local storage = copy 1
PBS datastore on separate external HDD (USB) = copy 2
Encrypted backup sync to a remote server or cloud = copy 3
Add a USB Backup Target
Mount a USB drive on the PBS host:
|
|
Sync Jobs Between Datastores
PBS syncs datastores with full deduplication:
|
|
This syncs only new chunks. After the initial sync, each nightly sync transfers a few hundred megabytes at most.
Tier 4 — Off-Site Replication
The off-site copy should survive total site loss — fire, flood, theft. Options from simplest to most robust:
Option A — Rsync PBS Chunks to a Remote Server
|
|
Drawback: No deduplication on the remote side. Transfer size equals total deduplicated size of the datastore.
Option B — PBS Remote Sync
PBS can sync to another PBS instance over the WAN:
|
|
First sync transfers all data. Subsequent syncs transfer only new chunks. WireGuard or Tailscale between sites keeps the traffic encrypted in transit.
Option C — Encrypted Backup to Cloud Storage
For homelabs without a second physical site, use rclone to
push PBS backups to Backblaze B2, Wasabi, or any S3-compatible
storage:
|
|
For the budget-conscious homelab: Backblaze B2 costs ~$6/TB/mo for storage with a $10/TB download fee only on restore. A 500 GB PBS store costs about $3/month.
Automating Restore Tests
A backup you never test is a backup you don’t have. Automate a weekly restore-to-scratch:
|
|
Add to cron: 0 8 * * 6 root /usr/local/bin/test-restore.sh
Retention Policy — What to Keep
Homelab retention needs differ from enterprise. A practical policy:
| Frequency | Retention | Why |
|---|---|---|
| Daily | 7 days | Fast rollback for bad updates |
| Weekly | 4 weeks | Recovery after missed daily window |
| Monthly | 3 months | Catch configuration drift |
| Yearly | Keep one | Long-term archival |
Set this in your PBS datastore or vzdump job:
|
|
LXCs that change infrequently (DNS, reverse proxy, DHCP) need less retention. VMs with databases (PostgreSQL, MariaDB) benefit from more frequent backups with shorter retention.
Disaster Recovery Sequence
When things go wrong, the recovery order matters:
- Reinstall Proxmox on the same or replacement hardware
- Restore PBS from your off-site copy (or reinstall PBS and point it at the USB drive)
- Restore critical VMs first: DNS, auth (Authentik/LDAP), reverse proxy
- Restore data VMs: databases, file servers
- Restore stateless apps: everything else
Label your VMs by criticality in Proxmox with custom notes (VM → Options → Notes) so you know restore priority without digging up documentation.
Summary
A practical Proxmox backup stack for the homelab:
- PBS in an LXC on local storage — incremental, deduplicated
- USB HDD as a second datastore — protection against disk failure
- Rsync/rclone to off-site — protection against site loss
- Weekly restore test cron — protection against silent failure
Start with tier 2 (PBS on local storage). Add the USB drive next. Schedule the off-site sync when you have a destination. The incremental nature of PBS makes this affordable in both time and storage even for a single-node homelab.