Files
obsidian-vault/family/documents/vault-sync/2026-08-31-syncthing-truenas-incident.md
T

94 lines
6.4 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.
---
tags: [syncthing, truenas, debug, incident]
created: 2026-08-31
status: resolved-syncthing (see 2026-09-02 for cascade)
---
# Incident: Syncthing не синкается с TrueNAS (после restore)
> **UPDATE 2026-09-02:** Syncthing-фикс подтверждён рабочим (см. ниже «Резолюция 2026-09-02»). НО выяснилось, что та же поломка прав ред 921/0000 поразила и `storage/git/` (bare repo obsidian → git-sync на маке стоит, ahead 55) и все медиа-папки (`storage/{Movies,Cartoons,Downloads,Music,series,shared}`) → arr/jellyfin-стек на TrueNAS неработоспособен. См. `family/documents/vault-sync/2026-09-02-restore-privilege-scope.md`.
**Дата диагностики:** 2026-08-31
**Симптом:** "Syncthing не конектится к TrueNAS; TrueNAS не в нашей сети, доступен через внешний адрес". В UI папка не синкается / процентов нет.
## Краткий вывод
**Соединение НЕ сломано.** И контейнер на TrueNAS, и телефон успешно поднимают TCP/TCP+TLS через внешний адрес `90.189.160.148:22000` (`syncthing.mallexxx.duckdns.org`). **Стоит файловая синхронизация** из-за сломанных прав на `/mnt/RED_2TB/storage/obsidian` после восстановления из бэкапа.
## Диагностика (оба конца)
| Уровень | Status | Деталь |
|---------|--------|--------|
| TCP 22000 внешний (`syncthing.mallexxx.duckdns.org`) | ✅ | `Connection succeeded` |
| SSH TrueNAS (`mallexxx.duckdns.org`) | ✅ | IP 192.168.2.197 (DNAT жив) |
| Контейнер `syncthing` | ✅ | `Up 6 days (healthy)`, порты 22000 tcp/udp + 21027 |
| Телефон↔TrueNAS соединение | ✅ | `connected: true` (REST API, в обе стороны) |
| **Файловая синхронизация** | ❌ **error** | папка `error: stat .stfolder: permission denied` |
Плюс в логе телефона (последние записи 12:41–13:55):
```
WRN Failed to sync (path=family/how-to/truenas-access.md error="syncing: finishing: pull: no such file")
WRN Failed to sync (path=family/how-to/truenas-sata-ports-and-zfs-pools.md ...)
INF Folder failed to sync, will be retried (wait=1m → 32m → 1h4m)
```
## Корень
После restore `/mnt/RED_2TB/storage/*` стал принадлежать **uid 921 = transmission** с правами `----------`(0000)/`d---------`, вместо `truenas_admin` (950).
```
d--------- 7 921 921 ... /mnt/RED_2TB/storage/obsidian
getent passwd 921 → transmission:x:921:921
```
Контейнер syncthing работает под **uid 950** и должен иметь FULL_CONTROL на папку. Из-за нулевых прав не читает даже `.stfolder` → папка в error → телефон не может вытянуть зависшие файлы (`truenas-access.md`, `truenas-sata-ports-and-zfs-pools.md`) → вся папка стоит.
⚠️ **Масштаб:** судя по `ls -la /mnt/RED_2TB/storage`, та же проблема может касаться Cartoons, Downloads, Movies, Music, git, shared, series и др. — всё 921/0000. Проверить другие сервисы.
## План фикса (НЕ выполнен — требует подтверждения + бэкап ACL)
1. Снять бэкап текущих ACL:
`getfacl -R /mnt/RED_2TB/storage/obsidian > /mnt/RED_2TB/backup/_acl_obsidian_$(date +%F).facl`
2. Вернуть владельца и права:
```
sudo chown -R 950:950 /mnt/RED_2TB/storage/obsidian
sudo chmod -R u+rwX,g+rwX /mnt/RED_2TB/storage/obsidian
```
3. Рестарт контейнера: `docker compose -f /mnt/RED_2TB/docker/syncthing/docker-compose.yml restart`
4. Дождаться `Completed scan`, проверить статус папки через REST.
## Резолюция 2026-09-02 (Syncthing — подтверждено рабочим)
**Факт (проверка read-only с хоста TrueNAS):** синхронизация obsidian починена и работает.
Критически важная деталь диагностики 31-08: **в compose-файле контейнера mount указывает на ДРУГУЮ папку, не ту, что в оригинальной доке:**
```yaml
volumes:
- /mnt/RED_2TB/storage/obsidian-syncthing:/var/syncthing/obsidian-vault # актуальный mount
```
(в `family/how-to/syncthing-truenas-android.md` и исходном compose стоит `/storage/obsidian` без `-syncthing` — УСТАРЕЛО).
**Какие папки есть и рабочая ли состояния:**
```
/mnt/RED_2TB/storage/obsidian drwxrwx--- truenas_admin (950) Jul 23
/mnt/RED_2TB/storage/obsidian-syncthing drwxrwx--- truenas_admin (950) Aug 31 ← рабочий mount
/mnt/RED_2TB/storage/obsidian/.stfolder → НЕТ (не нужен, это не sync target)
/mnt/RED_2TB/storage/obsidian-syncthing/.stfolder → ЕСТЬ (маркер syncthing, uid 950)
```
Права обеих папок починены на `950:950 truenas_admin` (были `d--------- 921:921`). `.stfolder` есть в `obsidian-syncthing` — это активная sync-копия vault. Папка после фикса в `Completed scan`, телефон подтянул зависшие файлы.
**Итог:** рабочий mount в compose — `obsidian-syncthing`, никакой rename папки не требуется. Док `syncthing-truenas-android.md` требует обновления своего `volumes:` блока до `obsidian-syncthing`.
## Затрагиваемые файлы (лог телефона)
- `family/how-to/truenas-access.md`
- `family/how-to/truenas-sata-ports-and-zfs-pools.md`
## Техническая карта Syncthing
- Устройства sync: `XJRJQB2-...` = контейнер TrueNAS (myID), `C6DYBCZ-...` = телефон SM-S931B (v2.1.3)
- Folder ID: `k5vyy-gzdgj`, label `Obsidian Vault`, path `/var/syncthing/obsidian-vault`
- GUI на TrueNAS: 'syncthing-admin', apikey в config.xml
## Связанные заметки
- [[syncthing-truenas-android]] — основная документация по этой схеме