diff --git a/README.md b/README.md new file mode 100644 index 0000000..5c1cc90 --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +# 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: + +```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:00 Uhr: +```cron +0 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 | +| `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 | + +--- + +## 📋 Zusammenfassung der Logs + +- **Konsolen-Logs** mit farblicher Hervorhebung +- **Logfile** wird nur beschrieben, wenn neue Backups gefunden wurden +- **Highlight-Logs** zur besseren Übersicht (Start/Ende) + +--- + +## ✅ 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! +```