README.md hinzugefügt
parent
d0bd6d3521
commit
6fb4ab2f87
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue