How to Install and Configure Proxmox Backup Server (PBS) for Automated VM Backups

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

A Real Story: Losing a VM at 2 AM

I run a homelab with Proxmox VE managing 12 VMs and containers — a playground for testing everything before it goes to production. One time, I updated the kernel on a VM running PostgreSQL, and after the reboot, it never came back up. I had forgotten to take a snapshot. The result: three hours of struggling to restore from a manual backup file that was a week old. If I’d had PBS back then, the entire restore process would have taken about 15 minutes.

After that incident, I switched to Proxmox Backup Server. If you’re running Proxmox VE and backing up on a “when I remember” basis — this guide will help you set up proper automated backups, once and for all.

What Is Proxmox Backup Server and Why Use It

PBS isn’t a generic backup tool — it’s software built by the Proxmox team themselves, designed specifically for the Proxmox VE ecosystem. Compared to manual backups with rsync or Clonezilla, there are a few key differences:

  • Incremental backup — only stores what changed since the last backup. A 50GB VM that only changed 2GB uploads just 2GB
  • Deduplication — eliminates duplicate data across VMs. My homelab saves ~65% of storage space thanks to this feature
  • Zero-downtime backup — VMs keep running normally while PBS backs them up (live snapshot)
  • Flexible restore — restore an entire VM or extract a specific file from inside a backup
  • Prune policy — automatically deletes old backups according to predefined rules, so you never have to worry about running out of disk space

The biggest advantage for PVE users: PBS integrates directly into the Proxmox VE Web UI. Configure, monitor, and trigger manual backups — all from the familiar interface, without opening any extra tabs.

Installing Proxmox Backup Server

System Requirements

PBS must run on a separate machine — never install it on the same host or run it as a VM on the Proxmox VE you’re backing up. The reason is simple: if the main host fails, PBS needs to still be alive to restore from.

  • CPU: 2 cores or more (x86_64)
  • RAM: 2GB minimum, 4GB or more recommended
  • Storage: roughly 1.5–2x the total size of all VMs you plan to back up
  • OS: Debian 12 (PBS is Debian-based, installed from its own ISO)

My PBS machine is an old PC: 4GB RAM, 2TB HDD. Backing up 12 VMs with a 30-day retention runs comfortably with storage to spare.

Downloading the ISO and Installing

Download the PBS ISO from proxmox.com/en/downloads. The installation process is identical to Proxmox VE — boot from USB, choose your disk, set a static IP, hostname, and root password. Nothing surprising.

# After installation, access the Web UI at:
https://<PBS_IP>:8007

# Log in with:
# Username: root
# Realm: Linux PAM
# Password: the password you set during installation

The PBS interface looks a lot like PVE. If you’re already familiar with Proxmox VE, it takes about 5 minutes to get oriented.

Configuring PBS and Proxmox VE in Detail

Creating a Datastore on PBS

The datastore is where PBS stores all your backups. Point it to a dedicated disk — don’t share the OS disk, or a full disk will take down both.

# Mount the backup disk (e.g., /dev/sdb)
fdisk /dev/sdb          # Create a partition if the disk is new
mkfs.ext4 /dev/sdb1
mkdir -p /mnt/backup-disk
mount /dev/sdb1 /mnt/backup-disk

# Add to /etc/fstab to auto-mount on reboot
echo "/dev/sdb1  /mnt/backup-disk  ext4  defaults  0  2" >> /etc/fstab

Once mounted, go to Administration → Datastore → Add Datastore in the PBS Web UI:

  • Name: vm-backups
  • Backing Path: /mnt/backup-disk

Connecting PBS to Proxmox VE

On Proxmox VE, go to Datacenter → Storage → Add → Proxmox Backup Server and fill in:

  • ID: pbs-main
  • Server: IP address of your PBS machine (e.g., 192.168.1.50)
  • Username: root@pam
  • Datastore: vm-backups
  • Fingerprint: copy from PBS at Dashboard → Show Fingerprint
# Or add via CLI on the Proxmox VE node:
pvesm add pbs pbs-main \
  --server 192.168.1.50 \
  --datastore vm-backups \
  --username root@pam \
  --password YourPBSPassword \
  --fingerprint AA:BB:CC:DD:...   # Get the fingerprint from the PBS Web UI

Creating an Automated Backup Job

Go to Datacenter → Backup → Add on Proxmox VE. This is the core step — once configured, backups run automatically without you having to remember.

  • Storage: select pbs-main
  • Schedule: 0 2 * * * — backs up every day at 2:00 AM
  • Selection: All (back up all VMs) or select specific VMs/CTs
  • Mode: Snapshot — VMs stay running during the backup
  • Compression: Zstandard — fast, compresses well, just use it
  • Send email to: enter an email address to receive alerts when a backup fails
# Run a manual backup immediately for testing (no need to wait for the schedule)
vzdump 100 --storage pbs-main --mode snapshot --compress zstd

Configuring Prune Policy — Automatically Cleaning Up Old Backups

Without a prune policy, your disk will fill up within weeks. Go to PBS Web UI: Datastore → vm-backups → Prune & GC.

The policy I use for my homelab:

  • Keep Last: 3 — keep the 3 most recent backups
  • Keep Daily: 7 — 1 backup per day for the past 7 days
  • Keep Weekly: 4 — 1 backup per week for the past 4 weeks
  • Keep Monthly: 3 — 1 backup per month for the past 3 months
# Preview what prune will delete (--dry-run: nothing is deleted yet)
proxmox-backup-manager prune-datastore vm-backups \
  --keep-last 3 \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 3 \
  --dry-run

# Run Garbage Collection after pruning to actually reclaim disk space
proxmox-backup-manager garbage-collection start vm-backups

Verifying and Monitoring Backups

Checking Logs and Status

PBS Web UI → Dashboard shows an overview: deduplication ratio, used storage, and the last backup time. Go to Datastore → vm-backups → Content to see a list of backups for each VM by date.

# View backup logs on PBS
journalctl -u proxmox-backup -n 50

# On Proxmox VE, view vzdump task logs
pvesh get /nodes/<node-name>/tasks --typefilter vzdump

# List all backups in the datastore
proxmox-backup-client list \
  --repository root@[email protected]:vm-backups

Test Restore — a Step You Should Never Skip

A backup you’ve never tested restoring is technically not a backup at all. After setting everything up, I always do a test restore of a VM into a new ID to confirm the data is intact.

# Restore VM 100 as a new VM with ID 200 for testing
qmrestore pbs-main:backup/vm/100/2025-03-01T02:00:00Z 200 \
  --storage local-lvm \
  --unique   # Generate a new MAC address to avoid network conflicts

Boot the test VM, verify your data, then delete it. The whole process takes 10–15 minutes — do it once and sleep soundly from then on.

Notifications and Alerts

PBS sends an email when a backup fails. Configure SMTP at Configuration → Notifications or via CLI:

# Configure SMTP
proxmox-backup-manager smtp-config set \
  --server smtp.gmail.com \
  --port 587 \
  --mode starttls \
  --username [email protected] \
  --password "app-password-here"

# Send a test email
proxmox-backup-manager smtp-config test --email [email protected]

Monitoring Performance via Dashboard

The PBS Dashboard has a few numbers worth checking regularly:

  • CPU/RAM usage during active backup jobs
  • Deduplication ratio — storage savings rate (typically 2x–4x)
  • Backup size over time — track data growth rate

My homelab currently runs at a ~2.8x dedup ratio. 12 VMs totaling nearly 800GB raw, yet PBS only uses ~290GB on disk — thanks to incremental backups combined with deduplication.

Practical Tips from Real-World Experience

  • PBS must run on a separate physical machine or host — never install PBS as a VM on the same Proxmox VE you’re backing up. When PVE goes down, PBS has to still be alive
  • The first incremental backup is always slow because it has to transfer all the data — subsequent runs are much faster, uploading only what changed
  • A 1Gbps local network is comfortable for overnight backups. Over WiFi it’s slow and prone to timeouts
  • Remember to configure the no-subscription repo to receive security updates — the enterprise repo will throw errors without a valid license
# Configure the no-subscription repository for PBS
echo "deb http://download.proxmox.com/debian/pbs bookworm pbs-no-subscription" \
  > /etc/apt/sources.list.d/pbs-no-subscription.list

apt update && apt dist-upgrade -y

Once this is set up, you have backups running automatically every night, old backups cleaned up on schedule, and email alerts when something goes wrong. Update kernels, experiment freely — worst case, restore yesterday’s snapshot and lose a few hours of work. No more lying awake at night dreading a full rebuild.

Share: