# 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)