From bf626182da1ec5375aed4fcca47e8ceb378dfc3b Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 6 Oct 2026 18:24:05 +0600 Subject: [PATCH] [2026-10-06] eagle: family/how-to/htpc-system.md family/plans/red2tb-backup-acl-inherit-fix.md --- family/how-to/htpc-system.md | 2 +- family/plans/red2tb-backup-acl-inherit-fix.md | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 family/plans/red2tb-backup-acl-inherit-fix.md diff --git a/family/how-to/htpc-system.md b/family/how-to/htpc-system.md index f193a628..0330a914 100755 --- a/family/how-to/htpc-system.md +++ b/family/how-to/htpc-system.md @@ -454,7 +454,7 @@ XwaylandEisNoPrompt=true 3. Duck Game: `Documents/DuckGame/Profiles/*.pro` (5 профилей) — префикса DuckGame на HTPC нет. 4. Contra Operation Galuga: `LocalLow/WayForward Technologies/.../_savedata/savefile`. 5. Super Bomberman R 2: `LocalLow/Konami/SUPER BOMBERMAN R 2//GameData`. -6. Project64: `Documents/project64/Save/1080 SNOWBOARDING....sra` + `64..2_Cont_1.mpk`. +6. Project64: `Documents/project64/Save/1080 SNOWBOARDING....sra` + `64 Oozumou 2_Cont_1.mpk` (сумо-игра, ROM на HTPC есть, сейва нет; имя папки на Mac читается битым UTF-8 — копировать по glob `64*DC2BDD6B*`). 7. Kodi: эмуляторные сейвы `Roaming/Kodi/saves/` (Aladdin, Ghouls'n'Ghosts, Golden Axe II — уникальны; DKC2 покрыт retroarch .srm) + весь userdata (MyVideos121.db 8MB, guisettings, AKL/AEL DB) — Kodi на HTPC нет вообще. 8. BrawlhallaReplays (3 реплея) + Roaming/BrawlhallaAir (.sol профиль). diff --git a/family/plans/red2tb-backup-acl-inherit-fix.md b/family/plans/red2tb-backup-acl-inherit-fix.md new file mode 100644 index 00000000..ca52aaf1 --- /dev/null +++ b/family/plans/red2tb-backup-acl-inherit-fix.md @@ -0,0 +1,29 @@ +# RED_2TB/backup — inherit ACL fix (nas_users) — план + +> Запрошено Alex 2026-10-06 (Mattermost): применить к `/mnt/RED_2TB/backup` тот же фикс, +> что делали для `Edu` (2026-09-23) и `storage/obsidian-syncthing` (2026-09-26). +> Цель: `truenas_admin` (uid 950) может писать в датасет backup (287G, личные бэкапы). + +## План (5 шагов) + +1. **Пре-чек** (read-only): `stat`, `nfs4xdr_getfacl`, `midclt filesystem.getacl`, + `touch` (ожидаем Permission denied), распределение `uid:gid` по дереву (до). +2. **Бэкап ACL** → `/mnt/RED_2TB/storage/acl-backup-before-.json` (паттерн Edu). +3. **Фикс** — скрипт на NAS (scp + python3, НЕ с Mac): read-modify-write dacl + (все ACE → `flags={"BASIC":"INHERIT"}`, `group@` полный grant, `id` сохранены), + ОДИН `filesystem.setacl` `{uid: <текущий корневой>, gid: 3000, acltype: NFS4, + options: {recursive: true, traverse: true, stripacl: false}}`, полл `core.get_jobs` до SUCCESS. +4. **Верификация**: `nfs4xdr_getfacl` → `trivial_acl: false`, `group 3000`, флаги `fd-----`; + `stat` → `root:nas_users drwxrwxr-x`; `touch` от truenas_admin → OK; `mkdir` + getacl + вложенного → `INHERITED: True`; распределение групп после. +5. **Обновить доки**: эта нота (итог), `red2tb-dataset-map` (строка backup). + +## Питфоллы (из skill truenas-administration + vault truenas-nfs4-acl-and-arrmultiuser) + +- `dacl` строить с нуля НЕЛЬЗЯ (нужен `id` в каждой ACE) — только read-modify-write. +- Флаги — строка `{"BASIC":"INHERIT"}`, не булев dict. +- `setacl` асинхронный — ждать job до `SUCCESS`, иначе ложный провал. +- `getacl` сразу после `setacl` врёт кэшем → верифицировать `nfs4xdr_getfacl`. +- `group@` = POSIX gid объекта → смена gid на 3000 ОБЯЗАТЕЛЬНА, иначе ACE даёт ничего. +- `uid`/`gid` в payload с `recursive:true` переписывают владельца всего дерева (287G) — + осознанно, тот же результат что у Edu (`root:nas_users` на всё дерево).