Proxmox Backup Server: Protect Your Homelab VMs

Proxmox Backup Server: Protect Your Homelab VMs

Why Proxmox Backup Server Matters for Your Homelab

Losing a production VM to storage failure or misconfiguration happens fast—restoring it without proper backups happens even faster, and it hurts. Proxmox Backup Server (PBS) gives you enterprise-grade deduplication and incremental backups without the licensing cost, and it's designed specifically for backing up Proxmox VEs.

This post covers setting up PBS 3.1 on a dedicated LXC or bare-metal node, configuring storage with ZFS deduplication, scheduling automated backups from your Proxmox cluster, and the restore procedures you'll actually need when things go wrong.

Prerequisites and System Requirements

You'll need:

  • Proxmox VE 7.2+ or 8.0+ (I'm running 8.1 on my T5810 with 24GB RAM)
  • Proxmox Backup Server 3.1 installed on a separate node (bare-metal or LXC)
  • A dedicated storage device or partition for backups—minimum 500GB for any real workload, ideally separate from your Proxmox datastores
  • Network connectivity between your PVE cluster and PBS node (1Gbps+ recommended)
  • ZFS available on your backup storage device (ext4 works, but you lose deduplication)

Installing Proxmox Backup Server

PBS is lightweight enough to run in an LXC container, but I run it bare-metal on a dedicated NAS-grade machine to avoid the hypervisor layer. You can install on Debian 12 with the PBS repository:


# Add the Proxmox Backup Server repository
curl https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -o /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg

echo "deb [signed-by=/etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg] http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription" | tee /etc/apt/sources.list.d/pbs.list

apt update
apt install proxmox-backup-server

# Start and enable the service
systemctl start proxmoxbackup
systemctl enable proxmoxbackup

Access the web UI at https://<pbs-ip>:8007. Log in with your system root account or create a local user in PBS's own authentication database.

Gotcha #1: If you're behind a reverse proxy or load balancer, PBS will reject your login with certificate verification failures. Set up a proper certificate in the PBS web UI (Administration → Certificates) or use your existing Let's Encrypt certificate.

Configuring ZFS Storage for Deduplication

PBS shines when backed by ZFS because deduplication and compression happen at the block level. Create a ZFS pool on your backup device first:


# Create a ZFS pool on a dedicated disk (replace sdX with your device)
zpool create -f backuppool /dev/sdX

# Enable deduplication (warning: uses RAM—roughly 320GB per TB deduplicated)
zfs set dedup=on backuppool

# Enable compression (LZ4 is fast)
zfs set compression=lz4 backuppool

# Set a 10% reservation to prevent filling completely
zfs set reservation=10% backuppool

# Check pool status
zpool status backuppool

Now add this pool as a datastore in PBS. Open the web UI, go to Administration → Storage, and click Add:


ID: backuppool
Path: /backuppool
Content: Backups
Nodes: pbs (or your PBS hostname)
Disable: (unchecked)
Prune Options:
  keep-last: 7
  keep-hourly: 24
  keep-daily: 7
  keep-weekly: 4
  keep-monthly: 12

These prune settings are conservative—7 daily, weekly, and monthly snapshots plus hourly for the last 24 hours. Adjust based on your recovery RPO/RTO.

Gotcha #2: If you enable deduplication on an existing ZFS pool with data, it won't retroactively deduplicate—only new writes benefit. Plan ahead.

Integrating PBS with Your Proxmox Cluster

Tell your Proxmox VE nodes how to reach PBS. On each PVE node, go to Datacenter → Storage, click Add, select Proxmox Backup Server:


ID: pbs-backups
Server: <pbs-ip-or-hostname>
Username: root@pam (or your PBS user)
Password: <your-pbs-password>
Fingerprint: <PBS certificate fingerprint>
Disable: (unchecked)

To get the fingerprint, run this on your PBS node:


proxmox-backup-client cert info /etc/proxmox-backup/proxy.pem

Look for Fingerprint (SHA256): and copy that hex string.

Scheduling Automated Backups

Create a backup schedule in Proxmox VE. Navigate to Datacenter → Backup, click Create:


Node: (select all nodes, or specific ones)
Storage: pbs-backups
Schedule: "0 2 * * *" (02:00 daily; cron format)
Selection: All VMs (or choose specific VMs)
Mode: Snapshot (consistent, doesn't pause VMs)
Retention: Prune using storage settings (delegate to PBS)
Enabled: Yes
Bandwidth limit: (set if your network is constrained; e.g., 100MB/s)

Verify the schedule works by manually triggering a backup first. Go to the VM, click Backup Now, select the PBS storage, and watch the logs in Datacenter → Backups.

Check backup logs on the PBS node directly:


# List recent backups
proxmox-backup-client backup list --repository root@pam@localhost:pbs-backups

# Monitor backup jobs
journalctl -u proxmox-backup-server.service -f

Verifying Deduplication and Performance

After a week of backups, run ZFS statistics to see deduplication in action:


# Check dedup ratio and compression
zfs list -o space backuppool

# Expected output shows DEDUP and COMPRESSRATIO columns
# With identical VMs, you'll see 5x–10x dedup ratios

# Monitor PBS datastore usage
proxmox-backup-client datastore-usage --repository root@pam@localhost:pbs-backups backuppool

On my setup with five identical Ubuntu VMs, I see a 6.2x dedup ratio after the third backup cycle. ZFS compression adds another 1.8x on top of that.

Restore Procedures

Restoring a full VM is straightforward. In the PVE web UI, go to Datacenter → Backups, find your backup, click the three-dot menu, and select Restore. PBS handles the rest.

For granular file restores (single files from within a guest), use the PBS client directly:


# List files in a backup
proxmox-backup-client restore --repository root@pam@localhost:pbs-backups \
  vm/100/2024-01-15T02:05:21Z /tmp/restore-staging

# Extract specific files
cd /tmp/restore-staging && find . -name "important-file.txt"
tar xzf qemu-server.tar.zst -C /tmp/extracted

For disaster recovery on a fresh Proxmox node, create the PBS storage first (using the fingerprint from your old setup), then restore VMs from the backup list.

Common Issues and Troubleshooting

Backup fails with "Permission denied" on storage: Ensure the proxmox-backup system user has read/write access to your ZFS pool. Check with ls -la /backuppool and fix permissions if needed.

Deduplication not working: Verify it's enabled on the ZFS pool (zfs get dedup backuppool). If you added it after data existed, existing blocks won't be deduplicated—only new backups benefit.

Backups hang or timeout: Check network MTU between PVE and PBS nodes. Jumbo frames (MTU 9000) help with large backup streams. Run ip link show and adjust if needed. Also monitor PBS memory usage—if ZFS dedup is using too much RAM, reduce the number of concurrent backups.

Certificate verification failures in PVE: Regenerate the PBS certificate using proxmox-backup-manager cert update on the PBS node, then re-add the storage in PVE with the new fingerprint.

You now have automated, deduplicated backups protecting your Proxmox VMs with retention policies enforced at the storage layer. From here:

  • Test a full VM restore in a lab environment to practice your RTO
  • Set up email notifications for failed backups (Administration → Notifications in PBS)
  • Monitor ZFS pool health regularly—zpool status and zfs list should be in your weekly checks
  • Consider replicating your backups off-site using Proxmox Backup's remote sync feature (Administration → Remote in PBS)

Disclosure: This post contains affiliate links. If you purchase through these links, we may earn a small commission at no extra cost to you. We only recommend services we've tested and trust.

Read more