Skip to main content

Proxmox Backup Server (PBS)

PBS is een gespecialiseerde backupoplossing ontwikkeld door Proxmox, ontworpen voor het efficiënt en betrouwbaar backuppen van servers en data.

Waarom PBS?

In een omgeving met meerdere Linux servers, containers en virtuele machines is een centrale backupoplossing essentieel. PBS biedt:

  • Deduplicatie: identieke datablokken worden slechts één keer opgeslagen, waardoor schijfruimte significant bespaard wordt
  • Incrementele backups: enkel gewijzigde data wordt overgedragen na de eerste volledige backup
  • Integriteitscontrole: automatische verificatie van opgeslagen data detecteert stille corruptie (bitrot)
  • Flexibele restore: individuele bestanden, mappen of volledige backups zijn eenvoudig terug te zetten via webUI of CLI
  • Retentiebeheer: automatisch opruimen van oude snapshots op basis van instelbare regels

Wanneer PBS inzetten?

PBS is aangewezen wanneer:

  • Meerdere servers centraal gebackupt moeten worden
  • Schijfruimte efficiënt benut moet worden door deduplicatie
  • Een betrouwbare, verifieerbare backuphistorie vereist is
  • Zowel volledige systemen als individuele bestanden herstelbaar moeten zijn

Server

Installatie PBS

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/proxmox-backup-server.sh)"

Client

Linux

Installatie

wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg   -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
echo "deb http://download.proxmox.com/debian/pbs-client bookworm main"   > /etc/apt/sources.list.d/pbs-client.list
apt update && apt install proxmox-backup-client

Soms ook:

wget http://archive.ubuntu.com/ubuntu/pool/main/libz/libzstd/libzstd1_1.5.5+dfsg2-2build1.1_amd64.deb
dpkg -i libzstd1_1.5.5+dfsg2-2build1.1_amd64.deb
apt install proxmox-backup-client

Script

vim /diy/backup_PBS.sh

Maak hier de juiste aanpassingen (bv server ip XXXX, Password YYYY, ZZZZ  fingerprint, AAAA hostname, WWWW datastores...)

#!/bin/bash
echo "=== Backup gestart: $(date) ===" >> /var/log/backup_PBS.log
export PBS_REPOSITORY="root@pam@XXXX:WWWWWWW"
export PBS_PASSWORD="YYYY"
export PBS_FINGERPRINT="ZZZZZZ"

proxmox-backup-client backup \
  backupRemote.pxar:/backupRemote \
  diy.pxar:/diy \
  configs.pxar:/etc \
  home.pxar:/root \
  --repository $PBS_REPOSITORY \
  --backup-id AAAA \
  --exclude lost+found \
  --exclude '**/.cache'

echo "=== Backup beëindigd: $(date) ===" >> /var/log/backup_PBS.log
chmod +x /diy/backup_PBS.sh 

Opstart Scripts

vim /etc/systemd/system/backup-pbs.service
ini[Unit]
Description=PBS backup

[Service]
Type=oneshot
ExecStart=/bin/bash /diy/backup_PBS.sh
StandardOutput=append:/var/log/backup_PBS.log
StandardError=append:/var/log/backup_PBS.log
vim /etc/systemd/system/backup-pbs.timer

Pas eventueel tijd aan dat de backups genomen wordt. Niet alle server tegelijkertijd bv.

ini[Unit]
Description=Dagelijkse PBS backup

[Timer]
OnCalendar=*-*-* 05:43:21
Persistent=true

[Install]
WantedBy=timers.target

Zorg dat dit automatisch loopt, en draai het ook even manueel.

systemctl daemon-reload
systemctl enable --now backup-pbs.timer
bash -v /diy/backup_PBS.sh


Speciallekes

Soms kan je geen BPS draaien op een computer, denk maar aan een Raspberry PI zero. Dan kan je een andere machine gebruiken om te hoppen. Bv een centrale server, die de data gaat zoeken, dit lokaal bijhoudt, en vervolgens uploads naar de PBS server.

Het grote voordeel hier vind ik dat als je over backups praat, het allemaal op dezelfde manier terug te vinden is. Je gaat naar je PBS server, en hopla, daar staan al je backups, logisch per machine of datapool.

Hier een klein voorbeeldjes van zo'n script, die dan met een cron elke nacht draait:

#!/bin/bash
STAGING=/backupHosts/HOSTNAME
NODE=RP123456
mkdir -p "$STAGING/diy" "$STAGING/etc"
rsync -az -e "ssh -i ~/.ssh/$NODE" root@$NODE:/diy/ "$STAGING/diy/"
rsync -az -e "ssh -i ~/.ssh/$NODE" root@$NODE:/etc/  "$STAGING/etc/"
rsync -az -e "ssh -i ~/.ssh/$NODE" root@$NODE:/boot/firmware/config.txt "$STAGING/"

echo "=== Backup gestart: $(date) ===" >> /var/log/backup_PBS.log
export PBS_REPOSITORY="root@pam@PBSSERVER:BackupsUSB"
export PBS_PASSWORD="SECRETHé"
export PBS_FINGERPRINT="verylongnumbersthatdontsayanythingtoanybodyexceptservers"

proxmox-backup-client backup \
  diy.pxar:$STAGING/diy \
  configs.pxar:$STAGING/etc \
  boot.pxar:$STAGING/config.txt \
  --repository $PBS_REPOSITORY \
  --backup-id $NODE \
  --exclude lost+found \
  --exclude '**/.cache'

echo "=== Backup beëindigd: $(date) ===" >> /var/log/backup_PBS.log