7.5 KiB
PBS Backup Client Script
Dieses Bash-Script erstellt hostbasierte Datei-Backups (pxar) zu einem Proxmox Backup Server (PBS) und benachrichtigt dich bei Erfolg oder Fehler optional per E-Mail sowie via Ntfy. Es ist für den automatisierten Betrieb (z. B. Cron) ausgelegt und nutzt eine ausgelagerte Konfigurationsdatei.
Features
- pxar-Backups definierter Verzeichnisse zu PBS
- Ausgelagerte Konfiguration (
pbs-backup.v2.conf
) – Script bleibt unverändert - Benachrichtigungen: E-Mail (z. B. via msmtp/mailx) und Ntfy (mit optionalem Bearer-Token)
- Konsolen- und Datei-Logging mit Timestamps
- Locking via
flock
, saubere Exit-Codes, robustes Fehlerhandling,--dry-run
- Healthcheck-OK-Datei für externes Monitoring (z. B. PRTG)
- TLS-Fingerprint nur bei selbstsigniertem PBS-Zertifikat notwendig (optional)
Konfiguration
Alle Einstellungen liegen ausschließlich in der Konfigurationsdatei. Standard: pbs-backup.v2.conf
im selben Verzeichnis wie das Script; alternativ den Pfad per Umgebungsvariable im Script setzen:
CONFIG_FILE=/pfad/zur/pbs-backup.v2.conf
.
PBS-Variablen:
PBS_REPOSITORY
(Pflicht): Repository-String im Format
ohne Port, wenn PBS unter dem Standard-Port erreichbar ist:
root@pam!<apiuser>@<pbs-host>:<datastore>
mit Port (z. B. öffentlich via HTTPS):
root@pam!<apiuser>@<pbs-host>:<port>:<datastore>
Beispiel:
root@pam!vps-backup@pbs.domain.com:443:backup2
Hinweis: Wenn der PBS aus dem Internet über einen anderen Port als den8007
erreichbar ist, muss der Port angegeben werden.PBS_FINGERPRINT
(optional): Nur erforderlich bei selbstsigniertem Zertifikat; sonst leer lassen.PBS_API
(Pflicht für Auth): API-Key für die Authentifizierung. Das Script setzt ihn intern nur im Subshell alsPBS_PASSWORD
, damit er nicht ins globale Environment oder in Logs gelangt.
Weitere Optionen (Auszug):
INCLUDE_DIRS
: Array der zu sichernden Verzeichnisse.LOGFILE
,LOCKFILE
: Pfade für Log- und Lock-Datei.- Mail:
MAIL_ENABLED
,MAIL_CMD
,MAIL_RECIPIENTS
,MAIL_NOTIFY_ON_SUCCESS
,MAIL_SUBJECT_SUCCESS
,MAIL_SUBJECT_FAILURE
. - Ntfy:
NTFY_ENABLED
,NTFY_TOPIC_URL
,NTFY_AUTH_TOKEN
,NTFY_NOTIFY_ON_SUCCESS
,NTFY_TITLE_SUCCESS
,NTFY_TITLE_FAILURE
,NTFY_PRIORITY_SUCCESS
,NTFY_PRIORITY_FAILURE
,NTFY_TAIL_LINES
. - Monitoring:
HEALTHCHECK_OK_FILE
(wird bei Erfolg geschrieben, bei Fehler entfernt).
Abhängigkeiten:
proxmox-backup-client
, für Ntfycurl
, für E-Mail z. B.
Eine Anleitung zur Installation vonmsmtp
gibt es hier:
https://www.cleveradmin.de/blog/2024/12/linux-einfach-emails-versenden-mit-msmtp
Ausführung
Das Script liest automatisch pbs-backup.v2.conf
aus dem Script-Verzeichnis. Einen anderen Pfad setzt du mit CONFIG_FILE
.
Parameter:
--dry-run
– zeigt an, was ausgeführt würde, ohne Backup zu übertragen--no-mail
– E-Mail-Benachrichtigung nur für diesen Lauf deaktivieren--no-ntfy
– Ntfy-Benachrichtigung nur für diesen Lauf deaktivieren-q
/--quiet
– reduzierte Ausgabe (nur WARN/ERROR)-h
/--help
– Hilfe anzeigen
Beispiele:
- Standardlauf mit Konfiguration im Script-Verzeichnis:
./pbs-backup.v2.sh
- Anderer Config-Pfad:
CONFIG_FILE=/etc/pbs-backup.v2.conf
- Testlauf ohne Upload:
./pbs-backup.v2.sh --dry-run
- Ruhige Ausgabe und ohne Ntfy:
./pbs-backup.v2.sh -q --no-ntfy
Cronjob
Das Script besitzt eigenes Locking (flock
) und ist damit für periodische Ausführung per Cron geeignet. Für Backups von Pfaden wie /root
oder /var/lib/docker/volumes/
sollte der Cronjob als root laufen.
Variante A: /etc/crontab
(empfohlen)
# /etc/crontab
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
# Täglich um 02:30 Uhr ausführen
30 2 * * * root CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh >> /var/log/pbs-backup.cron.log 2>&1
# Optional schonender (CPU/IO) und mit reduzierter Ausgabe:
#30 2 * * * root ionice -c2 -n7 nice -n 10 CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh -q >> /var/log/pbs-backup.cron.log 2>&1
Variante B: Benutzer-Crontab (nur wenn alle Pfade lesbar sind)
crontab -e
# Täglich um 02:30 Uhr (User-Crontab)
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
30 2 * * * CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh >> /var/log/pbs-backup.cron.log 2>&1
Hinweise
- Verwende absolute Pfade zum Script und zur Config.
- Die Script-Ausgabe landet zusätzlich im in der Config definierten
LOGFILE
. Der Cron-Redirect (>> /var/log/pbs-backup.cron.log 2>&1
) ist optional als zusätzlicher Laufverlauf. - Erst mit
--dry-run
testen:CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh --dry-run
Abhängigkeiten & Installation (x86_64, Ubuntu 22.04/24.04)
Repository hinzufügen und installieren
PBS Backup Client Repository auf der zu sichernden Maschine aufnehmen:
sudo nano /etc/apt/sources.list.d/pbs-client.list
Folgendes einfügen (Debian Bookworm Repo):
deb http://download.proxmox.com/debian/pbs-client bookworm main
Schlüssel hinzufügen (gilt für Debian 12-basierte Systeme):
sudo wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
Danach Update und Installation:
sudo apt update
sudo apt install proxmox-backup-client
Fix für Ubuntu 22.04/24.04 (libzstd1)
Auf Ubuntu 22.04 (und ggf. 24.04) kann libzstd1 (>= 1.5.2)
benötigt werden, während ggf. nur 1.4.8+dfsg-3build1
vorhanden ist. Installiere daher eine passende Version:
wget https://dl.techniverse.net/downloads/linux/deb/x86_64/libzstd1_1.5.6_dfsg-1_amd64.deb
sudo dpkg -i libzstd1_1.5.6_dfsg-1_amd64.deb
Hinweis: Prüfe nach der Installation mit
apt -f install
, ob alle Abhängigkeiten sauber erfüllt sind.
Installation auf ARM (aarch64)
Für ARM-Server (arm64) das Paket manuell installieren:
wget https://dl.techniverse.net/downloads/linux/deb/arm64/proxmox-backup-client_3.3.0-2_arm64.deb
sudo apt install ./proxmox-backup-client_3.3.0-2_arm64.deb
Rechte & API-Key im PBS
Wie man Berechtigungen setzt und einen API-Key im PBS erzeugt, ist in der offiziellen PBS-Dokumentation beschrieben:
https://pbs.proxmox.com/docs/user-management.html
💬 Support & Community
Du hast Fragen, brauchst Unterstützung bei der Einrichtung oder möchtest dich einfach mit anderen austauschen, die ähnliche Projekte betreiben? Dann schau gerne in unserer Techniverse Community vorbei:
👉 Matrix-Raum: #community:techniverse.net
Wir freuen uns auf deinen Besuch und helfen dir gerne weiter!