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

130 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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'
```
**Признак успеха** — три строки:
```
[<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]].
**Смотреть лог:**
```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