From 52286b02f4d266bcfe7f738734baf6958297c966 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Mon, 31 Aug 2026 14:08:48 +0600 Subject: [PATCH] [2026-08-31] eagle: family/documents/vault-sync/2026-08-31-syncthing-truenas-incident.md --- .../2026-08-31-syncthing-truenas-incident.md | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 family/documents/vault-sync/2026-08-31-syncthing-truenas-incident.md diff --git a/family/documents/vault-sync/2026-08-31-syncthing-truenas-incident.md b/family/documents/vault-sync/2026-08-31-syncthing-truenas-incident.md new file mode 100644 index 00000000..aa672386 --- /dev/null +++ b/family/documents/vault-sync/2026-08-31-syncthing-truenas-incident.md @@ -0,0 +1,66 @@ +--- +tags: [syncthing, truenas, debug, incident] +created: 2026-08-31 +status: diagnosed +--- + +# Incident: Syncthing не синкается с TrueNAS (после restore) + +**Дата диагностики:** 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. + +## Затрагиваемые файлы (лог телефона) +- `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]] — основная документация по этой схеме