2025-08-23 11:59:33 +02:00

7.5 KiB
Raw Permalink Blame History

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 den 8007 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 als PBS_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 Ntfy curl, für E-Mail z. B. mail (msmtp/mailx).
Eine Anleitung zur Installation von msmtp 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!

License License | Matrix Matrix | Matrix Mastodon