Proxmox Backup Copy Script
Dieses Bash-Skript automatisiert das Kopieren von Proxmox Backups auf ein Netzlaufwerk via rsync über SSH.
Es stellt sicher, dass Backups zuverlässig und verlustfrei übertragen werden, prüft deren Integrität und räumt alte Sicherungen automatisch auf.
✨ Funktionen
- Integritätsprüfung jedes Backups mit
zstd -t - Kopieren via rsync über SSH (inkl. Prüfsummen-Abgleich)
- Fortsetzen abgebrochener Kopien durch
rsync --partial - Automatisches Löschen fehlerhafter Backups (
*_CORRUPT.zst) - Aufräumen alter Backups (nur die letzten n Backups pro VM/LXC werden behalten)
- Automatische Besitzeranpassung am Zielsystem (
chown) - Benachrichtigung über ntfy (optional)
⚙️ Ablauf
- Neue Backups im lokalen Proxmox-Backup-Verzeichnis werden erkannt.
- Konsistenzprüfung mit
zstd -t.- Fehlerhafte Backups werden als
*_CORRUPTmarkiert und bleiben lokal.
- Fehlerhafte Backups werden als
- Erfolgreiche Backups werden per
rsyncnach$SSH_DESTkopiert.- Abgebrochene Übertragungen werden fortgesetzt.
- Nach erfolgreicher Prüfsummen-Überprüfung wird das lokale Backup gelöscht.
- Besitzer am Zielserver wird auf
$SSH_BACKUP_OWNERgesetzt. - Ältere Backups werden nach Vorgabe (
BACKUPS_TO_KEEP) entfernt.
🔑 SSH-Setup
Damit das Skript ohne Passwortabfrage läuft, muss ein SSH-Key erstellt und auf den Zielserver kopiert werden. Auf dem Proxmox Server:
ssh-keygen -t ed25519 -f ~/.ssh/proxmox # Passwort leer lassen
ssh-copy-id -i ~/.ssh/proxmox.pub root@192.168.178.100
(IP anpassen, Passwort des Zielservers eingeben)
📅 Automatischer Aufruf (Cron)
Das Skript lässt nur eine Instanz gleichzeitig zu und kann daher gefahrlos regelmäßig per cron gestartet werden, z. B.:
Alle 6 Stunden:
0 */6 * * * /root/shell_proxmox_backup_copy.sh >> /var/log/backup_cron.log 2>&1
Oder täglich um 02:30 Uhr:
30 2 * * * /root/shell_proxmox_backup_copy.sh >> /var/log/backup_cron.log 2>&1
🛠️ Konfiguration
Im Skript können die wichtigsten Variablen angepasst werden:
| Variable | Beschreibung |
|---|---|
PROX_BACKUP_DIR |
Lokales Proxmox-Backup-Verzeichnis (z. B. /var/lib/vz/dump) |
SSH_USER |
SSH-Benutzer für die Verbindung zum NAS |
SSH_BACKUP_OWNER |
Besitzer der Backups am Zielsystem (z. B. thorsten) |
SSH_HOST |
IP oder Hostname des Zielservers |
SSH_DEST |
Zielpfad am NAS (muss per SSH erreichbar sein) |
LOGFILE |
Pfad zur Logdatei. Nur Pfade oder Mounts auf Proxmox möglich. Kein SSH Pfad! |
SSH_KEY |
Pfad zum SSH-Key |
BACKUPS_TO_KEEP |
Anzahl der neuesten Backups, die behalten werden |
🔔 Benachrichtigungen (ntfy)
Optional kann eine Benachrichtigung per ntfy aktiviert werden.
Dazu die folgenden Variablen im Skript anpassen:
| Variable | Beschreibung |
|---|---|
NTFY_USE |
true = aktivieren, false = deaktivieren |
NTFY_TOPIC |
ntfy Topic-Name (z. B. Proxmox) |
NTFY_SERVER |
Serveradresse (z. B. 192.168.178.25:5885) |
NTFY_AUTH |
Authentifizierungstoken (z. B. Bearer <token>) |
NTFY_TITLE |
Titel der Nachricht |
NTFY_ICON |
Optionales Icon |
📋 Rsync
Das Script verwendet rsync zum kopieren der Backups. Bei manchen NAS muss rsync expliziet aktiviert werden.
✅ Beispielausgabe
2025-09-01 12:00:00 [INFO] Starte das Übertragen von Backups
2025-09-01 12:00:01 [INFO] Verarbeite Backup vm-101-disk-2025_09_01-00_00_00.vma.zst
2025-09-01 12:00:20 [INFO] Kopieren abgeschlossen. Checksumme wird überprüft...
2025-09-01 12:00:21 [INFO] Checksumme stimmt.
2025-09-01 12:00:22 [INFO] Lösche Backup vm-101-disk-2025_09_01-00_00_00 auf Proxmox...
2025-09-01 12:00:23 [INFO] Abgeschlossen!