backup.sh spiegelt nach dem lokalen Tarball die Backups per rsync aufs Proxmox (root@192.168.178.108:/var/lib/vz/mc2-backups) -- Retention via --delete mitgezogen, chmod 600 erhalten, best-effort (Fehlschlag = lokal gilt trotzdem). restore.sh kennt den Spiegel: --list zeigt Off-Box, --pull-offsite holt alles zurueck, und fehlt ein Backup lokal, wird es automatisch vom Proxmox gezogen (Platte-tot-Fall). Nebenbei latenten Abbruch in list_backups bei leerem Ordner gefixt (set -e + leeres Glob). Auth: dedizierter, gehaerteter Key ~/.ssh/mc2_offsite. Live E2E verifiziert. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3.2 KiB
Backup & Restore
Sichert den nicht wiederherstellbaren Zustand der AI-Box. Code kommt aus Git, Modelle sind neu ladbar — gesichert wird nur, was sonst weg wäre.
Was im Backup ist
- Gedächtnis:
/srv/models/mem0/(Chroma-Vektoren +history.db) - Hermes:
~/.hermes/config.yaml,~/.hermes/.env(Secrets!),~/.hermes/plugins/ - Engine:
/etc/llama-swap/config.yaml
Nicht enthalten (bewusst): GGUF-Modelle, MC2-Code (Git), venvs, systemd-Units (aus deploy.sh).
Jedes Backup ist ein Tarball mc2-state-<zeitstempel>.tar.gz unter /srv/models/mc2-backups/,
chmod 600 (enthält .env). Es werden die letzten 14 behalten.
Off-Box-Spiegel (C12) — zweite Kopie WEG von der Box
Nach jedem lokalen Backup spiegelt backup.sh die Tarballs per rsync auf ein zweites Gerät
(Default: Proxmox-Host root@192.168.178.108:/var/lib/vz/mc2-backups). Stirbt die NVMe der
Box, liegen die Backups noch auf dem Proxmox. Die Retention (14) wird per --delete mitgezogen,
chmod 600 bleibt erhalten. Der Off-Box-Sync ist best-effort: schlägt er fehl, gilt das
lokale Backup trotzdem als erfolgreich (Warnung im Log).
- Auth: eigener SSH-Key
~/.ssh/mc2_offsite(nur für dieses Backup), im Proxmox inroot/.ssh/authorized_keysgehärtet eingetragen:from="<Box-IP>", kein Port-/Agent-/ X11-Forwarding, kein PTY → der Key kann nur rsync-Backup, keinen Voll-Root-Fernzugang. - Ziel/Key überschreibbar:
MC_BACKUP_OFFSITE(leer = Off-Box aus) undMC_BACKUP_OFFSITE_KEY.
Backup erstellen
- Automatisch: systemd-Timer
mc2-backup.timer, täglich ~03:30. Status:systemctl --user list-timers mc2-backup.timer - Manuell (Box):
bash ~/mission-control-v2/deploy/backup.sh - UI: Wartungs-Drawer → „Snapshot erstellen"
Wiederherstellen (Restore)
Restore läuft nur per CLI auf der Box (bewusst — er stoppt Dienste und überschreibt Configs). Vor dem Zurückspielen macht das Skript automatisch ein Sicherheits-Backup des aktuellen Zustands.
cd ~/mission-control-v2
bash deploy/restore.sh --list # vorhandene Backups anzeigen
bash deploy/restore.sh --dry-run latest # zeigen, was passieren würde
bash deploy/restore.sh latest # neuestes wiederherstellen (mit Rückfrage)
bash deploy/restore.sh mc2-state-YYYYMMDD-HHMMSS.tar.gz # bestimmtes Backup
Ablauf: Sicherheits-Backup → Dienste stoppen (mem0-service, mission-control-2,
hermes-gateway) → Dateien zurückspielen (mem0 wird ersetzt, Configs überschrieben) →
Dienste starten → Health-Check.
Wenn die Box-Platte tot ist (Off-Box-Restore)
restore.sh kennt den Off-Box-Spiegel: fehlt ein Backup lokal, holt es sich das Skript
automatisch vom Proxmox. Kein manuelles Kopieren nötig.
bash deploy/restore.sh --list # zeigt lokal UND Off-Box (Proxmox)
bash deploy/restore.sh --pull-offsite # ganzen Off-Box-Bestand nach lokal spiegeln
bash deploy/restore.sh latest # zieht das jüngste — vom Proxmox, falls lokal leer
Erledigt
- Off-Box-Spiegel (C12): rsync auf den Proxmox-Host, live E2E verifiziert (2026-07-03). Box ist Bare Metal (kein Proxmox-Gast → kein vzdump), daher aktiver Push statt vzdump-Pull.