Proxmox Backup Server (PBS): The Complete Homelab Setup Guide for 2026
homelab

Proxmox Backup Server (PBS): The Complete Homelab Setup Guide for 2026

Ricardo Gil
August 19, 2026
9 min read
#proxmox #homelab #self-hosted #backup #pbs

Why Your Homelab Needs Proxmox Backup Server (PBS)

If you're running a Proxmox VE homelab with VMs and LXC containers, you've probably been relying on the built-in backup feature that dumps .vma or .tar.zst archives to a local directory or NFS share. It works β€” until you realize you have no deduplication, no incremental backups, no tape-friendly verify-and-restore workflow, and you're burning through storage with each full backup.

Proxmox Backup Server (PBS) is the purpose-built solution to all of that. It runs as a standalone service (either in its own VM, LXC, or on dedicated hardware), speaks natively with Proxmox VE, and gives you efficient incremental backups with client-side deduplication, encryption, and a proper garbage collection system. This guide walks through a complete PBS setup on Proxmox VE in 2026 β€” from installing PBS in an LXC container to scheduling automated backups and verifying restores.

Architecture Overview

The cleanest homelab PBS setup uses a dedicated LXC container (privileged) on a Proxmox node, with a mounted disk or ZFS dataset as the backup datastore. You can also run PBS on a separate mini PC β€” especially useful if you want off-node resilience. For a single-node homelab, an LXC container on the same Proxmox host with a secondary disk works great and is what this guide covers.

Here's the target architecture:

  • Proxmox VE node: your main hypervisor running VMs and containers
  • PBS LXC container: runs the Proxmox Backup Server daemon, mounted to a backup disk
  • Backup datastore: a dedicated ZFS pool or raw disk/partition mounted into the PBS container
  • Proxmox VE storage: PBS added as a storage target in the PVE UI

Step 1: Prepare the Backup Disk

PBS works best with a dedicated disk. If you have a spare NVMe or SATA drive, identify it on the Proxmox host:

bash
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE

Let's say your backup disk is /dev/sdb. Create a ZFS pool for it directly on the Proxmox host (you'll pass the mountpoint into the LXC later):

bash
# Create a single-disk ZFS pool named "pbspool"
zpool create -f pbspool /dev/sdb

# Verify
zpool status pbspool
zfs list

If you'd rather use an ext4 partition instead of ZFS, format it and note the mount path:

bash
mkfs.ext4 /dev/sdb1
mkdir -p /mnt/pbsdisk
echo "/dev/sdb1  /mnt/pbsdisk  ext4  defaults  0  2" >> /etc/fstab
mount -a

For a NVMe SSD, the WD Black 2TB SN850X NVMe SSD (~$129) πŸ’Ώ offers excellent sequential write speeds that keep backup windows short, and its endurance rating handles the constant write loads backup workloads generate.

Step 2: Create the PBS LXC Container

PBS must run in a privileged LXC container because it needs direct access to the backup datastore and uses features that unprivileged containers can't access. In the Proxmox shell:

bash
# Download the Debian 12 LXC template if you don't have it
pveam update
pveam available | grep debian-12
pveam download local debian-12-standard_12.7-1_amd64.tar.zst

Now create the container via CLI (adjust CTID and storage pool as needed):

bash
pct create 200 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
  --hostname pbs \
  --memory 2048 \
  --cores 2 \
  --net0 name=eth0,bridge=vmbr0,ip=dhcp \
  --storage local-lvm \
  --rootfs local-lvm:8 \
  --unprivileged 0 \
  --features nesting=1 \
  --password YourSecurePassword

If you're using a ZFS pool as your datastore, add a bind mount so the container can access it:

bash
# Edit the container config to add the bind mount
echo "mp0: /pbspool,mp=/mnt/datastore,backup=0" >> /etc/pve/lxc/200.conf

If using a raw disk/partition mounted at /mnt/pbsdisk:

bash
echo "mp0: /mnt/pbsdisk,mp=/mnt/datastore,backup=0" >> /etc/pve/lxc/200.conf

Start the container:

bash
pct start 200
pct enter 200

Step 3: Install Proxmox Backup Server

Inside the PBS container:

bash
# Add the PBS repository
echo "deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription" \
  > /etc/apt/sources.list.d/pbs.list

# Import the Proxmox GPG key
curl -fsSL https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg \
  -o /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg

# Update and install
apt update && apt install -y proxmox-backup-server

# Start and enable the PBS service
systemctl enable --now proxmox-backup
systemctl status proxmox-backup

PBS runs on port 8007 by default. Get the container IP and access the web UI at https://<PBS_IP>:8007. The default credentials are root@pam with the password you set during container creation.

Step 4: Create the Backup Datastore

In the PBS web UI (or via CLI), create a datastore pointing to your mounted backup disk:

bash
# CLI method β€” create a datastore named "homelab"
proxmox-backup-manager datastore create homelab /mnt/datastore

# Verify
proxmox-backup-manager datastore list

Via the web UI: go to Administration β†’ Datastores β†’ Add Datastore, set the name to homelab and the path to /mnt/datastore.

Next, configure garbage collection to run automatically. GC reclaims chunks no longer referenced by any snapshot. Weekly is a good default:

bash
proxmox-backup-manager datastore update homelab \
  --gc-schedule "sun 02:00"

Step 5: Create a PBS User and API Token

Never use root@pam for Proxmox VE to connect to PBS. Create a dedicated user and an API token:

bash
# Create a user
proxmox-backup-manager user create backup@pbs --password BackupUserPass

# Grant the user DatastoreBackup role on the homelab datastore
proxmox-backup-manager acl update /datastore/homelab DatastoreBackup \
  --auth-id backup@pbs

# Create an API token for this user
proxmox-backup-manager user generate-token backup@pbs pve-token
# Save the token secret from the output β€” you won't see it again

Step 6: Add PBS as Storage in Proxmox VE

In your Proxmox VE node, go to Datacenter β†’ Storage β†’ Add β†’ Proxmox Backup Server:

  • ID: pbs-homelab
  • Server: IP of your PBS container
  • Datastore: homelab
  • Username: backup@pbs!pve-token
  • Password: the API token secret from Step 5
  • Fingerprint: copy from PBS UI (Dashboard β†’ Certificate Fingerprint)

Or via the CLI on your PVE node:

bash
pvesm add pbs pbs-homelab \
  --server 192.168.1.200 \
  --datastore homelab \
  --username "backup@pbs!pve-token" \
  --password "YOUR_TOKEN_SECRET" \
  --fingerprint "XX:XX:..." \
  --content backup

Step 7: Schedule Automated Backups

In Proxmox VE, go to Datacenter β†’ Backup β†’ Add. Select pbs-homelab as the storage, choose your VMs and containers, and set a schedule. A good homelab schedule:

yaml
# Example backup job settings
Storage: pbs-homelab
Schedule: mon..fri 22:00    # Weeknights at 10 PM
Mode: Snapshot              # For VMs; use Stop for LXC if needed
Compression: ZSTD
Max Protected Backups: 0
Keep Last: 7
Keep Weekly: 4
Keep Monthly: 6

The retention settings above keep daily backups for a week, weekly for a month, and monthly for 6 months β€” a solid RPO for a homelab without burning through storage.

PBS's deduplication means that if your VMs share a base image (e.g., multiple Debian LXC clones), the duplicate chunks are stored only once. In practice, a homelab with 500GB of VMs might only use 200–300GB on the PBS datastore after deduplication kicks in.

Step 8: Enable Client-Side Encryption (Optional but Recommended)

PBS supports AES-256-GCM encryption performed on the Proxmox VE client before data ever hits the PBS server. This is especially useful if PBS is on a separate machine or if you're backing up to a remote PBS.

bash
# On the Proxmox VE node, generate an encryption key
proxmox-backup-client key create /etc/pve/priv/pbs-encryption.key
# Back up this key file somewhere safe β€” without it you cannot restore

# Reference it in the backup job via UI or CLI
# In the backup job config: encryption=1, keyfile=/etc/pve/priv/pbs-encryption.key

Step 9: Test Your Backups with a Restore

A backup you've never tested is not a backup. Run a restore to a temporary VM/container to verify:

bash
# List snapshots in the PBS datastore
proxmox-backup-client list --repository backup@pbs!pve-token@192.168.1.200:homelab

# Restore a specific snapshot to a new VMID (101 in this example, restore to VMID 999)
qmrestore pbs-homelab:backup/vm/101/2026-08-19T22:00:00Z 999 --storage local-lvm

Via the UI: Storage β†’ pbs-homelab β†’ Backups β†’ select a snapshot β†’ Restore. Test that the restored VM boots and data is intact, then delete it. Set a calendar reminder to do this quarterly.

Troubleshooting Common Issues

PBS container can't write to datastore mount

bash
# Check ownership inside the container
ls -la /mnt/datastore
# Should be owned by root. If not:
chown root:backup /mnt/datastore
chmod 750 /mnt/datastore

Fingerprint mismatch when adding PBS storage in PVE

bash
# Get the correct fingerprint from PBS
proxmox-backup-manager cert info | grep "Fingerprint"

Backup fails with "lock" error

This usually means a previous backup job didn't clean up its lock file. Check:

bash
proxmox-backup-manager garbage-collection start homelab
# Also check for stale .lock files in the datastore chunks directory
find /mnt/datastore -name "*.lock" -mmin +60 -delete

PBS web UI unreachable after container restart

bash
systemctl status proxmox-backup
# If the service failed to start, usually due to the mount not being ready yet:
systemctl restart proxmox-backup

Hardware Recommendations for a PBS Setup

For a dedicated PBS node, a mini PC with enough RAM and a fast NVMe drive is ideal. The Beelink EQ12 Mini PC (~$189) πŸ–₯ runs PBS very efficiently β€” it idles at around 6–8W and has two M.2 NVMe slots, so you can run the OS on one drive and dedicate the second entirely to PBS backups. Pair it with a Crucial 32GB DDR4 SODIMM (~$59) πŸ’Ύ if you plan to run other services alongside PBS β€” though PBS itself is happy with 2–4GB.

If you're connecting the PBS node to a 2.5GbE switch for faster backup transfers, the TP-Link 2.5G USB Ethernet Adapter (~$22) πŸ”Œ adds 2.5GbE to any mini PC without an internal port, and it works out of the box on Debian 12 and Ubuntu 22.04.

Monitoring and Alerts

PBS has a built-in notification system. Configure email alerts for failed backups in Administration β†’ Notifications. For a self-hosted stack, you can also point PBS notification hooks at an n8n webhook to route alerts to Telegram, Discord, or Slack:

bash
# PBS supports custom notification scripts via the hook system
# /etc/proxmox-backup/notifications.cfg example:
[sendmail: default-matcher]
  mailto root
  mode all

For deeper observability, PBS exposes a /metrics endpoint compatible with Prometheus β€” useful if you're already running a Grafana stack on Proxmox.

Final Thoughts

Proxmox Backup Server is one of those tools that feels like it should cost money β€” and on the enterprise tier with the subscription it does β€” but the community edition works perfectly for homelabs. The deduplication alone justifies the setup time: a typical homelab with 10 VMs might store 6 months of backup history in the same space that 3 weeks of full backups would take without PBS.

The setup is straightforward once you've done it once, and the restore workflow is reliable enough that you can actually trust it. Set up a quarterly restore test reminder, enable encryption if you're backing up anything sensitive, and you'll have one of the most solid backup pipelines available in the self-hosted world.

πŸ“¬Weekly Newsletter

Get the best home lab & AI content

No spam. One email per week. Unsubscribe anytime.

Share this article