Wiki · Funkce do hloubky

Zálohy a obnova

Záloha, kterou jste nikdy nezkusili obnovit, není záloha. Prakticky: co zálohovat, jak obnovit a jak se chovat, když se sezení rozbije.

💾
Záloha, kterou jste nikdy nezkusili obnovit, není záloha — je to jen soubor na disku. Hermes má naštěstí obnovu rozumně udělanou: zálohu umí vzít i za běhu a obnovu pozná, když je archiv poškozený. Zbývá jediná věc, kterou za vás nikdo neudělá — vyzkoušet to dřív, než to budete potřebovat.

Co je potřeba zálohovat

Všechno důležité je v jedné složce — v domovské složce Hermese (~/.hermes/).

CoProč na tom záleží
config.yaml, .env, auth.jsonNastavení, klíče k modelům a přihlášení. Bez nich je obnova jen prázdný agent
state.db (+ -wal, -shm)Všechny konverzace, sezení a navazující data
skills/, memories/Co se agent naučil a co si o vás pamatuje
cron/Pravidelné úlohy — bez nich agent po obnově „zapomene“, co má dělat každý den
SOUL.md, profilyOsobnost agenta a všechny další profily

Pokud používáte víc profilů, každý má vlastní state.db i vlastní složku. Záloha na úrovni celého ~/.hermes/ je proto bezpečnější než kopírovat jen „ten svůj“ profil.

Záloha jedním příkazem

# celá záloha (výchozí cíl: ~/hermes-backup-<čas>.zip) hermes backup # na konkrétní místo, ať to máte na disku, který zálohujete jinam hermes backup -o /root/zalohy/hermes.zip # rychlý snímek jen toho podstatného (config, state.db, .env, cron) hermes backup --quick --label "pred-upgradem" # po plné záloze nechat jen 5 nejnovějších hermes backup -o /root/zalohy/ -k 5
VlastnostJak to funguje
Záloha za běhuKopírování jde přes SQLite backup(), takže je konzistentní i když agent právě pracuje (WAL režim)
Co v archivu neníSamotný kód agenta, modely a runtime (desítky GB, dají se stáhnout znovu), keše, kontrolní body a staré zálohy
Návratový kód0 = vše v archivu; 1 = část souborů chyběla (archiv zůstane, ať se dá obnovit zbytek); 2 = jiná záloha právě běží

Kód 1 je důležitý: kdyby zálohu pouštěl cron, musí se podle kódu poznat, že archiv není úplný. Právě proto se --keep v takovém případě nemaže starší (a kompletní) archivy.

Obnova

# obnova celého archivu (nejdřív zastavte bránu) hermes gateway stop hermes import /root/zalohy/hermes.zip # vrácení snímku, který se udělá před aktualizací hermes backup restore --state pre-update

Archiv se před zápisem celý rozbalí a zkontroluje (CRC). Když je poškozený, příkaz skončí s chybou a nic nezapíše. Soubory, které se nepodaří obnovit, vypíše — a vrátí kód 1, takže se částečná obnova nikdy netváří jako úspěch.

Záloha versus předání profilu

hermes backuphermes profile export
K čemuPřesun celého stroje, obnova po haváriiPředání nebo přenos jednoho profilu
RozsahVšechny profily, globální nastavení, klíče, sezeníJeden profil: SOUL.md, paměť, sezení, skilly
Tajné údajeJsou uvnitř (.env, auth.json)Nejsou — odstraní se, aby se dal profil bezpečně sdílet
Formát.zip.tar.gz

Praktický důsledek: zálohu z hermes backup nikdy nikomu neposílejte — obsahuje klíče. Na sdílení je určený export profilu.

Když se sezení rozbije (a co nikdy nedělat)

Hermes vede každou konverzaci v jednom souboru state.db na profil. Když se při psaní objeví hláška o „staré kopii write-ahead logu“, nic se neztratilo — agent právě přestal psát, aby data nepoškodil. Řeší se to třemi kroky:

1) ukončit všechny procesy profilu hermes gateway stop (a zavřít Desktop, dashboard, cron) 2) zjistit, kdo drží log hermes doctor (vypíše PID a příkaz) 3) spustit znovu (jeden proces) a poslat zprávu znovu
NikdyProto
Mazat state.db-wal nebo state.db-shmLog obsahuje konverzace, které ještě nejsou v hlavním souboru — smazáním je ztratíte natrvalo
Kopírovat state.db samo přes cpTy tři soubory jsou jeden celek; správně je to hermes backup nebo hermes sessions recover
Pouštět hermes doctor --fix za běhuMůže se stát druhým zapisovatelem — přesně tím, co problém způsobilo
Pouštět sessions optimize pod živou branouPřepisuje databázi (VACUUM, přestavba indexu), takže příkaz to pozná a odmítne — i s výpisem procesů, které databázi drží. --dry-run je vždy povolený, --force jde použít, ale jen když víte, že ty procesy nic nečtou
sessions prune pod živou branouTady je to naopak bezpečné: náhled se udělá jen pro čtení a maže sama brána (sezení s běžícím tahem přeskočí). Odmítne jen tehdy, když brána neběží a databázi drží jiný proces

Diagnostika a oprava poškozeného souboru

hermes gateway stop hermes sessions recover --source ~/.hermes/state.db --inspect-only # nic nemění, jen řekne, co jde hermes sessions recover --source ~/.hermes/state.db --output ~/recovered-state.db hermes sessions repair --check-only # co by se opravilo hermes sessions repair # oprava (dělá si vlastní zálohu)

Vedle state.db můžete potkat soubory jako state.db.pre-update-emergency-*.bak (snímek před aktualizací) nebo state.db.corrupt.*.bak (kopie poškozeného souboru). První se hodí na obnovu, druhý nikdy nevracejte přes state.db — je to stejná chyba.

Jak to děláme u nás na serveru

ZvykProč
Snímek před každou aktualizací: hermes backup --quick --label "pred-upgradem"Vrácení je pak jeden příkaz a nemusíte řešit, co se změnilo
Denní plná záloha mimo web (jiná složka, jiný stroj)Záloha na stejném disku jako data není záloha
Obnova se zkouší do zkušebního profilu, ne do produkceOvěříte, že archiv opravdu funguje, a přitom si nerozbijete běžícího agenta
Web a aplikace mají vlastní zálohu (git, dump databáze)Hermes záloha řeší agenta, ne vaše weby — ŠipkyLiga má replikaci databáze, weby jsou v gitu
# ukázka cronu: každý den ve 3:30 rychlá záloha, v neděli plná 30 3 * * * /root/.local/bin/hermes backup --quick --label denni -o /root/zalohy/ 30 4 * * 0 /root/.local/bin/hermes backup -o /root/zalohy/ -k 4

Cesty k hermes si ověřte příkazem which hermes — v cronu nebývá v PATH to, co v interaktivním shellu.

Časté chyby

PříznakPříčina a řešení
Záloha hlásí Backup incompleteNěco nešlo přečíst (často socket nebo síťový disk). Archiv zůstává; podívejte se, které soubory chybí
Po obnově agent „zapomněl“ pravidelná sezeníV archivu nebylo cron/ (např. se použil export profilu) — cron se klonováním profilu nepřenáší
Obnova skončila kódem 1Část souborů se nepřenesla (výpis Warnings) — zkontrolujte, co chybí, než smažete původní data

Kam dál

← Zpět na wiki