[2026-09-26] eagle: family/documents/vault-sync/2026-09-26-syncthing-clone-root-objects-acl-confusion.md family/how-to/vault-git-sync.md personal/plans/music-tags-review/music-tags-review.md personal/tech/music-tags-repair-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 16:38:29 +06:00
1 parent 44d2c48574
commit 3ebaca6e74
4 files changed
+221 -20

No files matched your search

@@ -4,12 +4,13 @@ type: log
namespace: family
tags: [vault, sync, syncthing, git, permissions, acl, nfsv4, root]
date: 2026-09-26
status: resolved
---
# `obsidian-syncthing`: 4031 root-объект, битый remote, ACL/chown не стоит
**Когда:** 2026-09-26, разбор по запросу Alex «почему документ не доехал до телефона».
**Статус:** диагностика завершена, **фиксы НЕ применены** — ждём решения Alex.
**Статус:** ✅ **РЕШЕНО** — ACL с `nas_users` + INHERIT применён, синк работает (см. «РЕШЕНИЕ» ниже).
## Симптом
@@ -95,7 +96,61 @@ midclt call filesystem.getacl /mnt/RED_2TB/Edu > .../acl-edu-before-YYYYmmdd-HHM
> POSIX-gid файла, а не ACE. Без смены gid группа не получает ничего. Менять gid надо через
> `midclt filesystem.setacl` (root-контекст), а не `chgrp`/`chown` из шелла.
## Почему однократный `chown` не лечил
## ✅ РЕШЕНИЕ (2026-09-26, после требования Alex «Да, ставь acl inherit»)
Alex отверг предложенные варианты и дал прямую команду: **«Да, ставь acl inherit»**.
Выбран **вариант A** — ACL + INHERIT, применён на `/mnt/RED_2TB/storage/obsidian-syncthing`.
**Что сделано (по порядку):**
```bash
# 1. бэкап ACL
midclt call filesystem.getacl /mnt/RED_2TB/storage/obsidian-syncthing \
> /home/truenas_admin/variantA_bk/acl-obsidian-syncthing-before-20260926-154827.json
# 2. скрипт read-modify-write (файлом, не инлайном) → scp на NAS → python3
# payload: gid=3000 (nas_users), uid=950, recursive=true,
# все ACE → FILE_INHERIT+DIRECTORY_INHERIT, stripacl=false
# → job 25046 SUCCESS
# 3. remote клона
git remote set-url origin /mnt/RED_2TB/storage/git/obsidian-vault.git
```
**Результат (проверено ФАКТОМ):**
| | До | После |
|---|---|---|
| `nfs4xdr_getfacl` | `trivial_acl: true` | **`trivial_acl: false`** |
| `group` | 950 | **3000** (`nas_users`) |
| флаги ACE | `-------` (NOINHERIT) | **`fd-----`** (FILE+DIRECTORY_INHERIT) |
| объекты от root | 4051 | **0** (все 4073 = `truenas_admin`) |
| `git fetch` | падал | `Already up to date` |
| новый файл `touch` | — | `truenas_admin:nas_users` ✅ |
**Наследование подтверждено:** `touch .inherit_test` и `mkdir .inherit_dir_test` внутри папки
получили `truenas_admin:nas_users` (тестовые артефакты удалены после проверки).
**Нота доехала:** коммит с Mac `f2501dc` (`1-needs-decision.md`, разбор 28 файлов) найден в
истории клона, поверх уже лежал `8efe5c8` от Taiga.
### 🔴 ГЛАВНЫЙ ПИТФОЛЛ: `midclt getacl` = КЭШ
Сразу после `setacl` скрипт делал верификацию через `midclt filesystem.getacl` — и получал
**старые** значения (`trivial: True`, `gid: 950`, `NOINHERIT`), печатая ложный «VERIFY FAILED».
Правка на диске при этом была уже применена.
> **Реальное состояние проверять только:** `nfs4xdr_getfacl <path>` (`trivial_acl: false`,
> флаги `fd-----`) + `stat -c '%A %U:%G %n'` + фактический `touch` нового файла.
> **Не откатывать и не повторять `setacl` по показаниям `getacl`.**
### Альтернативный вариант B (не использован, для истории)
`user: "950:950"` в taiga service — устранил бы корень (контейнер не от root), но риск:
образ может требовать root для `/opt/data`. Оставлен как возможное усиление;
текущий ACL-INHERIT закрывает последствия.
## ℹ️ Почему однократный `chown` не лечил (историческая справка)
Прошлый разовый `chown` объектов на `truenas_admin` чинил только **уже существующие** объекты.
Следующий `git pull` от root снова рождал root-owned объекты — и `chown` приходилось повторять.