# 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-.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 in `root/.ssh/authorized_keys` **gehärtet** eingetragen: `from=""`, 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) und `MC_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. ```bash 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 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.