BackupScript/README.md

112 lines
3.5 KiB
Markdown

# restore.sh
Windmill Backup Restore Worker `v1.0.8`
Wird von Windmill per SSH non-blocking auf dem Proxmox Restore-Server gestartet und läuft komplett eigenständig. Am Ende sendet es einen Webhook zurück an Windmill mit allen Messwerten.
---
## Ablauf
| Schritt | Was passiert |
|---|---|
| **[0]** Keys holen | PBS Encrypt-Keyfile + 7z-Passwort per Rsync vom PBS-Server |
| **[1]** Space-Check | Freier Platz auf `--restore-mount` prüfen |
| **[2]** VM-ID | Original-ID aus Backup-Pfad, freie Restore-ID ab 1000 |
| **[3]** qmrestore | Direkt vom PBS-PVE-Storage mit `--keyfile` |
| **[4]** VM vorbereiten | unlock → cdrom/ide0 entfernen → alle Netzwerkkarten löschen → Agent aktivieren |
| **[5]** Agent prüfen | VM starten, 120s auf qm-Agent warten (10s Schritte) — kein Agent = kein Abbruch, `qm_agent_ok=false` in DB |
| **[6]** VM stoppen | Sauberes Shutdown, nach 30s force-stop |
| **[7]** 7z | VM-Images verschlüsselt zippen (Passwort aus `password_7z.txt`) |
| **[8]** Rsync | ZIP zum Backup-Server, 3 Versuche + Größenvergleich |
| **[9]** Aufräumen | VM destroy, ZIP löschen, Keys bleiben gecacht |
| **[10]** Webhook | JSON mit allen Messwerten → Windmill |
---
## Parameter
```bash
/opt/windmill-restore/restore.sh \
--job-uuid 'abc-123-...' \
--backup-path 'tnp-Invest-GmbH:vm/100/2024-01-15T02:00:00Z' \
--client 'vm/100' \
--restore-mount '/mnt/4TB' \
--restore-path 'local-lvm' \
--rsync-target '/backup/incoming/TNP' \
--pbs-storage 'pbs-tnp-invest-gmbh' \
--webhook-url 'https://windmill.stines.de/...' \
--webhook-token '...'
```
Alle Parameter sind Pflicht — kein Fallback. Fehlt einer bricht das Script vor dem Start ab.
---
## Keys
Werden automatisch per Rsync vom PBS-Server geholt (`PBS_HOST` aus `pbs.conf`):
| Datei auf PBS-Server | Zweck | Lokal gecacht |
|---|---|---|
| `/root/Scripte/${DATASTORE}.keyfile` | PBS Encrypt-Key für `qmrestore --keyfile` | `/opt/windmill-restore/keys/${DATASTORE}.keyfile` |
| `/root/Scripte/password_7z.txt` | 7z-Passwörter pro Datastore | `/opt/windmill-restore/keys/password_7z.txt` |
Format `password_7z.txt`:
```
tnp-Invest-GmbH: Passwort123
oactec: AndersPasswort456
```
Ein Key gilt für alle VMs eines Kunden (pro Datastore). Bei mehreren VMs desselben Datastores werden die Keys nur einmal geholt.
---
## Konfiguration
`/opt/windmill-restore/pbs.conf` (chmod 600, deployt von Windmill Step C):
```bash
PBS_HOST=192.168.1.50
PBS_PORT=8007
PBS_USER=backup@pbs
PBS_PASSWORD=geheim
PBS_FINGERPRINT=AB:CD:...
```
`/opt/windmill-restore/backup_server_host`:
```
backup.stines.de
```
---
## Webhook-Payload
```json
{
"job_uuid": "abc-123-...",
"client_name": "vm/100",
"status": "success",
"error_message": "",
"vm_id_original": 100,
"vm_id_restored": 1001,
"restore_duration_sec": 120,
"actual_disk_used_bytes": 10737418240,
"zip_size_bytes": 5368709120,
"zip_duration_sec": 300,
"rsync_size_bytes": 5368709120,
"rsync_ok": true,
"rsync_retries": 0,
"qm_agent_ok": true,
"log_file": "/opt/windmill-restore/logs/vm_100_20240115_001100.log"
}
```
---
## Voraussetzungen
- Proxmox VE mit `qm`, `qmrestore`, `pvesh`, `7z`
- SSH-Zugang vom Restore-Server zum PBS-Server (für Rsync der Keys)
- SSH-Zugang vom Restore-Server zum Backup-Server (für Rsync des ZIP)
- PBS als PVE-Storage registriert (wird von Windmill Step C automatisch via `pvesm add pbs` eingetragen)