Proxmox Backup Server: Complete Setup Guide for Homelab VM and Container Backups
Proxmox Backup Server (PBS) is a dedicated backup solution built by the same team behind Proxmox VE. It's designed specifically for backing up VMs, containers, and host configurations from Proxmox VE nodes. Where generic backup tools like Borg or Restic treat your VMs as opaque files, PBS understands Proxmox's storage format natively and can do incremental, deduplicated backups at the block level.
Photo by Piotr Janota on Unsplash
The result is dramatically faster backups, efficient storage usage (deduplication ratios of 5:1 or better are common), optional client-side encryption, and tight integration with the PVE web interface. For any homelab running Proxmox, PBS should be your first choice for VM backup infrastructure.

Installation
PBS runs as a standalone server -- don't install it on the same machine as your Proxmox VE hypervisor. The whole point of backups is surviving hardware failure, and backing up to the same machine that runs your VMs defeats that purpose. A low-power mini PC, an old desktop, or even a Raspberry Pi 4 with a USB drive will work.
Dedicated Machine Install
Download the PBS ISO from the Proxmox website and install it like any other Linux distribution. The installer is text-based and straightforward:
# After installation, access the web interface at:
https://your-pbs-ip:8007
The default login is root with the password you set during installation. The web interface is where you'll manage datastores, users, and sync jobs.
Install on Existing Debian
If you already have a Debian machine you want to add PBS to:
# Add the Proxmox repository
echo "deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription" > /etc/apt/sources.list.d/pbs.list
# Add the repository key
wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
# Install PBS
apt update && apt install proxmox-backup-server
Datastore Setup
A datastore is where PBS stores backup data. You need at least one. Each datastore maps to a directory on a filesystem -- ideally on a dedicated disk or ZFS pool.
Create a Datastore
Through the web interface: Datastore > Add Datastore. Or via CLI:
# Create the backing directory
mkdir -p /mnt/backup-storage/pbs-datastore
# Add it as a PBS datastore
proxmox-backup-manager datastore create homelab-backups /mnt/backup-storage/pbs-datastore
Storage Recommendations
For a small homelab (5-15 VMs): A single large HDD (4-8TB) formatted with ext4 or XFS is fine. Deduplication means your actual storage usage will be much less than the sum of all VM disk sizes.
For a larger homelab or long retention: A ZFS mirror (two drives) gives you redundancy. ZFS compression (lz4) stacks with PBS's deduplication for even better space efficiency:
# Create a ZFS mirror for the datastore
zpool create backup-pool mirror /dev/sdb /dev/sdc
zfs set compression=lz4 backup-pool
zfs create backup-pool/pbs-store
# Create the datastore on the ZFS dataset
proxmox-backup-manager datastore create homelab-backups /backup-pool/pbs-store
SSD vs HDD: HDDs are fine for backup storage. PBS writes sequentially during backups and reads sequentially during restores. The deduplication index benefits from some fast storage, but PBS caches this in RAM. An SSD is nice to have but not necessary.
Connecting PVE to PBS
Add PBS as a Storage Target
On your Proxmox VE node, go to Datacenter > Storage > Add > Proxmox Backup Server:
- Server: IP address of your PBS machine
- Username:
root@pam(or a dedicated backup user -- see below) - Password: Your PBS password
- Datastore: The datastore name you created
- Fingerprint: PBS shows this on the dashboard; copy-paste it
Or via CLI on the PVE node:
pvesm add pbs pbs-storage \
--server 10.0.0.20 \
--username root@pam \
--password your-password \
--datastore homelab-backups \
--fingerprint AB:CD:EF:...
Create a Dedicated Backup User
Running backups as root works but isn't ideal. Create a dedicated user with only the permissions needed:
# On PBS: create a backup user
proxmox-backup-manager user create backup@pbs --comment "PVE backup agent"
# Set permissions -- DatastoreBackup is enough for backups
proxmox-backup-manager acl update / Backup --auth-id backup@pbs
# Generate an API token (more secure than password)
proxmox-backup-manager user generate-token backup@pbs pve-agent
Use the token instead of a password when adding the storage target in PVE.
Like what you're reading? Subscribe to HomeLab Starter — free weekly guides in your inbox.
Backup Scheduling
Create Backup Jobs
In PVE, go to Datacenter > Backup > Add:
- Storage: Select your PBS storage
- Schedule: Choose a cron schedule (e.g., daily at 2 AM)
- Selection mode: Include or exclude specific VMs/containers
- Mode: Snapshot (recommended -- doesn't stop VMs)
- Compression: ZSTD (best ratio for the CPU cost)
- Retention: Set how many backups to keep
The equivalent CLI command:
# Create a backup job for all VMs, daily at 2 AM, keep 7 daily + 4 weekly
pvesh create /cluster/backup \
--storage pbs-storage \
--schedule "0 2 * * *" \
--all 1 \
--mode snapshot \
--compress zstd \
--prune-backups keep-daily=7,keep-weekly=4,keep-monthly=6
Backup Modes
- Snapshot: Creates a point-in-time snapshot without stopping the VM. This is what you want for most workloads. For databases, ensure your DB flushes to disk properly (most modern databases handle this fine with snapshot-consistent backups).
- Suspend: Pauses the VM briefly to ensure a consistent state. Adds a few seconds of downtime but guarantees consistency.
- Stop: Shuts down the VM, backs it up, restarts it. Maximum consistency but significant downtime. Only use this for VMs where data consistency is critical and the downtime is acceptable.
Deduplication
PBS deduplicates at the chunk level. When a backup runs, PBS splits the VM disk into fixed-size chunks (typically 4MB), hashes each chunk, and only stores chunks it hasn't seen before. This means:
- The first backup of a 100GB VM stores roughly 100GB (minus any zero blocks).
- The second backup might only store 2-5GB of changed chunks.
- Multiple VMs running the same OS share common chunks across backups.
Check deduplication stats in the PBS web interface under Datastore > Content, or via CLI:
# Show datastore usage and dedup ratio
proxmox-backup-manager datastore list
# Run garbage collection to reclaim space from expired backups
proxmox-backup-manager garbage-collection start homelab-backups
Garbage Collection
When backup retention policies expire old backups, the chunks aren't immediately deleted. PBS marks them for garbage collection, which you should schedule regularly:
# Schedule GC to run weekly (via the PBS web interface or cron)
# PBS web: Datastore > Options > Garbage Collection Schedule
GC is I/O intensive on HDDs. Schedule it during off-hours, not during backup windows.
Encryption
PBS supports client-side encryption, meaning data is encrypted on the PVE node before it's sent to PBS. The PBS server never sees unencrypted data. This is important if your PBS server is in a less-secure location (a different room, a friend's house for offsite backups, etc.).
Set Up Encryption
# On PVE: generate an encryption key
proxmox-backup-client key create --kdf scrypt /etc/pve/priv/pbs-encryption-key.json
# Add the key to your PBS storage configuration
pvesm set pbs-storage --encryption-key /etc/pve/priv/pbs-encryption-key.json
Critical: Back up the encryption key separately. If you lose it, your backups are permanently unrecoverable. Store a copy on a USB drive in a safe, print it as a QR code, or save it in a password manager. Do not store it only on the PVE node being backed up -- that defeats the purpose.
Key Management
Create a master key if you want the ability to recover without the original encryption key:
# Create a master key pair (store the private key VERY securely)
proxmox-backup-client key create-master-key
# This produces master-public.pem and master-private.pem
# Include the master public key in your PBS storage config
pvesm set pbs-storage --master-pubkey-file /path/to/master-public.pem
Remote Sync
For offsite backups, PBS can sync a datastore to another PBS instance over the internet. This gives you geographic redundancy -- your backups survive even if your entire homelab is destroyed.
Set Up a Sync Job
On the remote PBS (the target), create a user and datastore. Then on the local PBS:
# Add the remote PBS as a remote
proxmox-backup-manager remote add offsite-pbs \
--host remote-pbs-ip \
--auth-id sync@pbs \
--password sync-password \
--fingerprint AB:CD:EF:...
# Create a sync job
proxmox-backup-manager sync-job create offsite-sync \
--store homelab-backups \
--remote offsite-pbs \
--remote-store offsite-datastore \
--schedule "0 6 * * *" \
--remove-vanished true
Sync jobs are incremental -- only changed chunks are transferred. With a good internet upload speed, even large datastores can be synced daily with minimal bandwidth usage.
Restoring Backups
Full VM Restore
From the PVE web interface: select the backup in the PBS storage, click Restore, and choose the target node and storage. The VM is recreated with all its configuration and disk data.
File-Level Restore
PBS can mount a backup and let you browse individual files without restoring the entire VM:
# Mount a backup for file browsing
proxmox-backup-client mount <backup-snapshot> /mnt/restore --repository <pbs-repo>
# Browse and copy individual files
ls /mnt/restore/
cp /mnt/restore/etc/nginx/nginx.conf /tmp/recovered-config
# Unmount when done
umount /mnt/restore
This is invaluable when you just need to recover a single config file or database dump, not an entire VM.
Monitoring and Maintenance
Backup Verification
Schedule periodic verification to ensure your backups are actually restorable:
# Verify backup integrity (checks all chunks are readable and checksums match)
proxmox-backup-client verify <backup-snapshot> --repository <pbs-repo>
PBS also has a built-in verification scheduler in the web interface under Datastore > Verify Jobs.
Notifications
Configure email notifications for backup job failures. In the PBS web interface, go to Configuration > Notifications and add your email. PBS will alert you when a backup job fails, a sync job fails, or a datastore is running low on space.
Space Monitoring
Keep an eye on datastore utilization. PBS's deduplication means you can store a lot of backups in a small space, but it's not infinite. Set up alerts at 80% usage and plan for expansion before you hit 90%.
# Check datastore space usage
proxmox-backup-manager datastore list
# Shows total size, used space, and dedup factor
PBS is one of those tools that pays for itself the first time you need to recover a VM. The setup takes an afternoon, but the peace of mind of having deduplicated, encrypted, verified backups with offsite sync is worth far more than the time investment.
