diff --git a/README.md b/README.md new file mode 100644 index 0000000..3e344ca --- /dev/null +++ b/README.md @@ -0,0 +1,112 @@ +# 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) \ No newline at end of file