3.5 KiB
3.5 KiB
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
/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):
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
{
"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 pbseingetragen)