Files
obsidian-vault/family/how-to/obsidian-sync.md
T
2026-05-30 05:03:33 +00:00

4.6 KiB
Executable File
Raw Blame History

tags, created, updated, status
tags created updated status
obsidian
sync
git
how-to
2026-05-13 2026-05-13 active

Obsidian Sync — Eagle ↔ Taiga ↔ Kraken

Статус: работает на всех 3 узлах (протестировано 2026-05-13, двусторонний sync с конфликтами)

Архитектура

Eagle (Mac, ~/obsidian — полный vault)
    │  push/pull via SSH
    ▼
TrueNAS bare repo
mallexxx.duckdns.org:/mnt/RED_2TB/storage/git/obsidian-vault.git
    │
    ├── Taiga (sparse: personal/ family/)
    │   vault: /mnt/RED_2TB/docker/hermes/vault
    │   скрипт на хосте TrueNAS: ~/sync-vault.sh
    │
    └── Kraken (sparse: personal/ family/)
        vault: ~/obsidian
        скрипт: ~/scripts/sync-vault.sh

Узлы

Узел Vault путь Scope Скрипт Крон
Eagle ~/obsidian full vault ~/scripts/sync-vault.sh 0 * * * * (Hermes cron job)
Kraken ~/obsidian sparse: personal/ family/ ~/scripts/sync-vault.sh 0 * * * * (crontab)
Taiga /mnt/RED_2TB/docker/hermes/vault sparse: personal/ family/ ~/sync-vault.sh (на хосте!) 0 * * * * (Hermes cron job)

⚠️ Taiga: скрипт запускается на хосте TrueNAS (не внутри контейнера hermes-taiga). Причина: ZFS ACL дают доступ к bare repo только пользователю truenas_admin. Vault примонтирован в контейнер как /vault:rw из /mnt/RED_2TB/docker/hermes/vault.

Логика sync (одинакова на всех 3)

1. git stash (если есть локальные изменения)
2. git fetch origin main
3. git merge origin/main --no-edit
   └─ при конфликте: git add -A, PULL_OK=conflict
4. git stash pop (если был stash)
   └─ при конфликте pop: git add -A
5. git add -A && git commit (если есть изменения — staged ИЛИ unstaged ИЛИ untracked)
6. git push origin main

Конфликты: не теряются — остаются в файлах как conflict markers, коммитятся с пометкой "conflict markers present". Ручного разрешения не требуется для текстовых заметок.

Скрипты — детали

Eagle: ~/scripts/sync-vault.sh

  • Дополнительно: генерирует commit message через claude -p (если claude доступен)
  • Remote name: nas (не origin)
  • git user: глобальный (admin@eagle)

Kraken: ~/scripts/sync-vault.sh

  • git user задан в скрипте: kraken@hermes / Kraken
  • Переменные: VAULT_DIR (default: ~/obsidian), REMOTE_URL (default: origin)
  • Sparse checkout: personal/ family/ (задан при инициализации vault)

Taiga: ~/sync-vault.sh

  • git user задан в скрипте: taiga@hermes / Taiga
  • git config core.fileMode false — ZFS не сохраняет exec bits
  • Hardcoded paths: vault=/mnt/RED_2TB/docker/hermes/vault, remote=file:///mnt/RED_2TB/storage/git/obsidian-vault.git

SSH ключи

Узел Ключ Добавлен в authorized_keys
Eagle ~/.ssh/id_rsa TrueNAS (truenas_admin)
Kraken ~/.ssh/id_rsa TrueNAS (truenas_admin)
Taiga file:// (локальный) — (не нужен)

Obsidian MCP

Узел Команда Vault
Eagle /opt/homebrew/bin/obsidian-mcp ~/obsidian full
Kraken npx obsidian-mcp /home/kraken/obsidian sparse
Taiga npx obsidian-mcp /vault sparse (контейнерный путь)

Диагностика

# Проверить последний sync
ssh kraken@192.168.1.14 "tail -5 /tmp/vault-sync.log"
ssh truenas_admin@mallexxx.duckdns.org "tail -5 /tmp/vault-sync.log"

# Запустить sync вручную
ssh kraken@192.168.1.14 "bash ~/scripts/sync-vault.sh"
ssh truenas_admin@mallexxx.duckdns.org "bash ~/sync-vault.sh"

# Посмотреть историю коммитов в bare repo
ssh truenas_admin@mallexxx.duckdns.org "git -C /mnt/RED_2TB/storage/git/obsidian-vault.git log --oneline -10"

Связанные заметки