# 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 1. Neue Backups im lokalen Proxmox-Backup-Verzeichnis werden erkannt. 2. Konsistenzprüfung mit `zstd -t`. - Fehlerhafte Backups werden als `*_CORRUPT` markiert und bleiben lokal. 3. Erfolgreiche Backups werden per `rsync` nach `$SSH_DEST` kopiert. - Abgebrochene Übertragungen werden fortgesetzt. 4. Nach erfolgreicher Prüfsummen-Überprüfung wird das lokale Backup gelöscht. 5. Besitzer am Zielserver wird auf `$SSH_BACKUP_OWNER` gesetzt. 6. Ä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: ```bash 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: ```cron 0 */6 * * * /root/shell_proxmox_backup_copy.sh >> /var/log/backup_cron.log 2>&1 ``` Oder täglich um 02:30 Uhr: ```cron 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](https://ntfy.sh) 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 `) | | `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. | NAS | Link | |----------------|--------------| |**Synology** | https://kb.synology.com/de-de/DSM/help/DSM/AdminCenter/file_rsync?version=7 |**QNAS** | https://www.qnap.com/de-de/how-to/faq/article/wie-kann-ich-daten-von-einem-synology-nas-%C3%BCber-rsync-auf-einem-qnap-nas-sichern --- ## ✅ Beispielausgabe ```text 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! ```