--- title: "🔄 Vault sync — как работает и как запустить" tags: [vault-sync, infrastructure, obsidian, syncthing, taiga] updated: 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. Запустить синк вручную ```bash ssh truenas_admin@mallexxx.duckdns.org \ 'docker exec hermes-taiga bash /opt/data/sync-vault.sh 2>&1 | tail -20' ``` **Признак успеха** — три строки: ``` [] [taiga] ... Pushed ✓ [] [syncthing] Syncthing: synced with bare repo ✓ / Pushed ✓ [] [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]]. **Смотреть лог:** ```bash ssh truenas_admin@mallexxx.duckdns.org 'docker exec hermes-taiga tail -12 /tmp/vault-sync.log' ``` --- ## 5. Проверить, что всё сошлось Все три репозитория должны быть на **одном коммите**: ```bash 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 main` → `merge origin/main` → `push origin main`. 3. **syncthing-out:** финальный push. Конфликты скрипт **не разрешает** — оставляет маркеры и коммитит (осознанное решение). --- ## Связанные - [[family/documents/vault-sync/2026-09-14-cron-api-timeout-sync-outage]] — разрыв синка из-за таймаутов LLM - [[family/documents/vault-sync/2026-09-04-git-identity-loss-silent-commit-failure]] — потеря git-identity - [[family/documents/vault-sync/2026-08-31-syncthing-truenas-incident]] — инцидент SyncThing - [[family/how-to/truenas-infrastructure]] — инфраструктура TrueNAS