Files
obsidian-vault/family/documents/vault-sync/README.md
T

6.2 KiB
Raw Blame History

title, tags, updated
title tags updated
🔄 Vault sync — как работает и как запустить
vault-sync
infrastructure
obsidian
syncthing
taiga
2026-09-15

🔄 Vault sync — как работает и как запустить

Операционный документ. Как правка из vault доезжает до телефона и что делать, если не доехала. Инциденты — в этой же папке family/documents/vault-sync/.


1. Архитектура

   Mac ~/obsidian  ──git push──▶  bare: /mnt/RED_2TB/storage/git/obsidian-vault.git
                                   (IS the remote, /vault.git внутри контейнера)
                                          │
                                          │ git merge
                                          ▼
   ┌──────────────────────────────────────────────────────────┐
   │  контейнер hermes-taiga  ·  /opt/data/sync-vault.sh      │
   │  ТРИ фазы:                                                │
   │   ① taiga      → /vault          = .../storage/obsidian  │
   │   ② syncthing  → /obsidian-syncthing  ← SyncThing → 📱   │
   │   ③ syncthing-out → push обратно в bare                  │
   └──────────────────────────────────────────────────────────┘

Спайс: /vault — sparse-checkout (personal/, family/, .obsidian/). Пуш из taiga-фазы — только эти пути.

Путь Что это
~/obsidian (Mac) рабочий клон vault (править тут)
/mnt/RED_2TB/storage/git/obsidian-vault.git bare-репозиторий = remote
/mnt/RED_2TB/storage/obsidian /vault — taiga-воркtree (sparse)
/mnt/RED_2TB/storage/obsidian-syncthing раздаётся SyncThing'ом на телефон
/opt/data/sync-vault.sh (в контейнере) сам скрипт синка

2. 🔴 ГЛАВНОЕ: git push НЕ доводит правку до телефона

Факт, стоивший времени 2026-09-15. Пуш на bare — это только полдела. До телефона доводит cron-скрипт sync-vault.sh внутри контейнера hermes-taiga.

Если после правки телефона не видно — причина почти всегда в этом: синк не прогонялся.


3. Запустить синк вручную

ssh truenas_admin@mallexxx.duckdns.org \
  'docker exec hermes-taiga bash /opt/data/sync-vault.sh 2>&1 | tail -20'

Признак успеха — три строки:

[<TS>] [taiga]         ... Pushed ✓
[<TS>] [syncthing]     Syncthing: synced with bare repo ✓ / Pushed ✓
[<TS>] [syncthing-out] Pushed ✓

Если не видишь — SyncThing раздаст в течение минуты.


4. Cron-задача

Параметр Значение
Название sync-vault
id 29851c413903
Расписание */5 * * * *
prompt bash /opt/data/sync-vault.sh >> /tmp/vault-sync.log 2>&1
Живёт в контейнере hermes-taiga (не на Mac!)
Лог /tmp/vault-sync.log (в контейнере)

⚠️ Задача оформлена как prompt (LLM-раунд), поэтому наследует риски провайдера: таймауты блокируют очередь, а ~6 % тиков завершаются completed без запуска скрипта. Данные не теряются (git идемпотентен), но каденция ниже номинала. Разбор — 2026-09-14-cron-api-timeout-sync-outage.

Смотреть лог:

ssh truenas_admin@mallexxx.duckdns.org 'docker exec hermes-taiga tail -12 /tmp/vault-sync.log'

5. Проверить, что всё сошлось

Все три репозитория должны быть на одном коммите:

ssh truenas_admin@mallexxx.duckdns.org '
cd /mnt/RED_2TB/storage/obsidian-syncthing && echo -n "syncthing: " && git log --oneline -1
cd /mnt/RED_2TB/storage/obsidian && echo -n "vault:     " && git log --oneline -1
cd /mnt/RED_2TB/storage/git/obsidian-vault.git && echo -n "bare:      " && git log --oneline -1 main
'

На Mac: cd ~/obsidian && git log --oneline -1

Рабочие деревья должны быть чистыми: git status --porcelain → пусто.


6. Скрипт sync-vault-taiga.sh (локальная копия)

Локальная копия для чтения: ~/.hermes/hermes-whale/sync-vault-taiga.sh (3342 б, 2026-05-29). Описание из шапки скрипта:

  • taiga@hermes — пушит Hermes-агент
  • syncthing@hermes — пушит телефон через SyncThing
  • core.fileMode false (иначе chmod-варнинги root vs UID 950 на ZFS)

Что делает по шагам:

  1. taiga: коммит локальных изменений → git merge main (сюда пушит Eagle) → коммит → push в bare.
  2. syncthing: коммит локальных (от телефона) → git fetch origin mainmerge origin/mainpush origin main.
  3. syncthing-out: финальный push.

Конфликты скрипт не разрешает — оставляет маркеры и коммитит (осознанное решение).


Связанные