This commit is contained in:
2025-09-01 15:10:45 +02:00
parent c1c8ecddfb
commit 75e89158e7

112
README.md Normal file
View File

@@ -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 <token>`) |
| `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!
```