Das Script für den Restore von Backups - für Windmill
Go to file
sebastian.serfling 3e873b0b17 restore.sh aktualisiert
Space_Check enfernt
2026-03-19 19:58:01 +00:00
README.md README.md hinzugefügt 2026-03-16 11:32:23 +00:00
restore.sh restore.sh aktualisiert 2026-03-19 19:58:01 +00:00

README.md

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 pbs eingetragen)