357285e798
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>
63 lines
3.2 KiB
Markdown
63 lines
3.2 KiB
Markdown
# 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 in
|
|
`root/.ssh/authorized_keys` **gehä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) 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.
|