[2026-09-02] eagle: family/documents/vault-sync/2026-09-02-restore-privilege-scope.md family/how-to/arr-stack-taiga.md personal/tech/truenas-nfs4-acl-and-arrmultiuser.md
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
tags: [truenas, restore, incident, git, media, arr, permission]
|
||||
created: 2026-09-02
|
||||
updated: 2026-09-02
|
||||
status: resolved (Git-sync на маке ПОЧИНЕН 2026-09-02: NFS4 ACL DENY сняты полным dacl-заменой через filesystem.setacl; push ИДЁТ; ahead=0 behind=0). Arr-стек ПОДНЯТ и работает 2026-09-02 (prowlarr/radarr/sonarr/jellyfin Up, все под uid 950; transmission также PUID/PGID=950; сети media_net+transmission_default персистентны в compose). ⚠️ Осталось (см. §6): jellyfin-транскодинг падает FFmpeg code 243 — конфиг /docker/arr/jellyfin вглубь 911:911, фикс `chown -R 950:950 .../jellyfin`+recreate (root, не выполнен); transmission 255 торрентов "no data found" — данные в Movies не в download-dir (ждёт решения). Плюс остаточные: скрытые файлы корня storage + несвязанный library-app restart-loop
|
||||
status: fully resolved 2026-09-02 — Git-sync (NFS4 ACL DENY сняты полной dacl-заменой, push ОК, ahead=0/behind=0), Arr-стек ПОЛНОСТЬЮ рабочий (prowlarr/radarr/sonarr/jellyfin/transmission Up, все uid 950, сети персистентны в compose). ✅ §6a jellyfin-траversed-фикс: root `chown 950:950 + chmod 750 /mnt/RED_2TB/storage` (был 921:921, блокировал traverse → FFmpeg 243) — проигрывание работает. ✅ §6b transmission: `docker restart` → 254/255 чисты. Незначительные остатки: торрент #1 требует Verify в UI; скрытые файлы корня storage; несвязанный library-app restart-loop
|
||||
---
|
||||
|
||||
# Incident 2026-09-02: Поломка прав uid 921/0000 после restore — масштаб и влияния
|
||||
@@ -276,33 +276,30 @@ services:
|
||||
```
|
||||
(в compose НЕ было PUID/PGID → контейнер root; transmission монтирует `storage` → `/mnt/storage`, download-dir `/mnt/storage/Downloads`)
|
||||
|
||||
## 6. ⚠️ Пост-запуск arr-стека: 2 НЕРЕШЁННЫХ блокатора (диагноз 2026-09-02, конец сессии)
|
||||
## 6. Пост-запуск arr-стека: 2 блокера — ОБА РЕШЕНЫ (2026-09-02, конец сессии)
|
||||
|
||||
После успешного запуска стека (все контейнеры Up под 950) выявлены два REFAIL, требующих root-фикса. **Оба — артефакты того же restore-инцидента (владелец глубин конфигов/данных остался 911), НЕ перепутать с багом прав на `storage/`.**
|
||||
После успешного запуска стека (все контейнеры Up под 950) выявлены два REFAIL. **Общий скрытый корень обоих + случайно та же причина, что у jellyfin-транскодинга:** **сам корень `/mnt/RED_2TB/storage` (верх датасета) остался `921:921`**, ACL `owner@/group@ ALLOW` но `everyone@ EXECUTE=False` → uid 950 (jellyfin/transmission как не-owner group truenas_admin...) фактически **не мог traverse вглубь** `/storage/Movies/...`, ХОТЯ ACL самих файлов/каталогов были корректными (`trivial:true`, owner@ READ/EXEC, 950:950). Это даёт клинический кейс «ACL файла чистый, владелец 950, но чтение = Permission denied».
|
||||
|
||||
### ⚠️ 6a. Jellyfin: FFmpeg exited with code 243 → фильмы не проигрываются
|
||||
**Симптом:** веб-интерфейс jellyfin (Setup завершён, `StartupWizardCompleted:true`, библиотеки видят `/storage/Movies`, одиночные файлы читаются под 950). Но при проигрывании ПОПЫТКА транскодинга падает:
|
||||
```
|
||||
FFmpeg exited with code 243
|
||||
ffmpeg -i file:"/storage/Movies/Snatch.x264/Snatch....mkv" -f hls -hls_segment_filename "/config/cache/transcodes/....%d.mp4"
|
||||
→ jellyfin не может писать в transcode-файл
|
||||
```
|
||||
**Корень:** конфиг jellyfin `/mnt/RED_2TB/docker/arr/jellyfin` — при restore вглубь `/config/data`, `/config/metadata`, `/config/cache` остались **владельца 911:911** (jellyfin работает под uid 950). Например `data/data/jellyfin.db` и 11 441 файл под `data/` — владелец `911`. Jellyfin/ffmpeg под 950 не могут писать в `/config/cache/transcodes` → код 243. (Только jellyfin пострадал: у radarr/sonarr/prowlarr весь config уже `abc`=950.)
|
||||
**Фикс (ROOT — НЕ выполнен Alex, ожидает команды):**
|
||||
### ✅ 6a. Jellyfin: FFmpeg exit 243 при проигрывании — РЕШЕНО
|
||||
**Симптом:** веб-UI jellyfin (Setup завершён, `StartupWizardCompleted:true`) открылся, библиотеки видят `/storage/Movies`, но проигрывание падало `FFmpeg exited with code 243` (на чтении входа `/storage/Movies/Snatch.x264/...`, НЕ на записи transcode — transcodes/`/config/cache` уже стали 950 после первого chown).
|
||||
**Двойной корень:** (1) конфиг jellyfin вглубь `/config/data` был 911:911 (11 441 файл; jellyfin под 950) → первый `chown -R 950:950 /mnt/RED_2TB/docker/arr/jellyfin` открыл UI (этот chown Alex уже выполнил ранее); (2) НО даже после него чтение файла `/storage/Movies/Snatch.x264/...` из uid 950 давало **`Permission denied`** при чистом ACL файла+каталога. Причина — **корень `/mnt/RED_2TB/storage` остался 921:921 и блокировал traverse** (см. выше).
|
||||
**Фикс ЖЕЛЕЗНО (root, Alex выполнил — заработало):**
|
||||
```bash
|
||||
chown -R 950:950 /mnt/RED_2TB/docker/arr/jellyfin
|
||||
cd /mnt/RED_2TB/docker/arr && docker compose up -d --force-recreate jellyfin
|
||||
# проверка: jellyfin должен транскодить/проигрывать без FFmpeg code 243
|
||||
chown 950:950 /mnt/RED_2TB/storage
|
||||
chmod 750 /mnt/RED_2TB/storage # rwxr-x--- → owner u950 / group(g950=truenas_admin) r-x → traverse для jellyfin
|
||||
```
|
||||
> Безопасно: chown меняет только владение, даннятые БД/метаданные не трогает.
|
||||
> linuxserver контейнеры (jellyfin/transmission) под PUID/PGID=950 имеют gid=950 → члены `truenas_admin`. После chmod 750 group r-x открывает traverse. Результат: jellyfin проигрывает (direct play / transcod по необходимости). **Отключение транскодинга** (если не нужен): Dashboard → Playback → снять галку «Allow media playback that requires transcoding» (тогда только Direct Play); транскодиг включается лишь когда клиент не поддерживает исходный кодек. UI на `jellyfin.mallexxx.duckdns.org`.
|
||||
|
||||
### ⚠️ 6b. Transmission: 255 торрентов "no data found" — данные перемещены в Movies, не в download-dir
|
||||
**Симптом:** transmission-UI (порт 9091) открывается, но все (255) торренты показывают **No Data Found**.
|
||||
**Корень (НЕ проблема прав):** transmission download-dir = `/mnt/storage/Downloads`. 255 resume-торрентов + 255 .torrent на месте (в `/docker/transmission`), daemon работает под 950, путь `/mnt/storage/Downloads` доступен, диск есть (78%). **Но сам download-dir пуст от медиа**: `find Downloads *.mkv/*.avi/*.mp4/*.iso` → **count 0**; внутри только `.nfo`, NSP-игры Switch (DK/Mario), переводы. Фильмы/контент физически **переехали в `/storage/Movies`** (257k файлов). transmission ищет файл по `<download-dir>/<имя-торрента>`, там пусто → No Data Found. Это состояние после импорта/миграции (торренты завершены, контент в библиотеке) — НЕ поломка прав. RPC недоступен извне: `403 Forbidden` на loopback и `401` при неправильных creds; whitelist = `172.16.*.*`.
|
||||
**Требует решения Alex**, что сделать с 255 orphan-seed передач:
|
||||
- либо удалить их из transmission (если сидирование не нужно),
|
||||
- либо указать transmission актуальное расположение (файлы в Movies),
|
||||
- НЕ нужно «чинить права» — их там уже нет проблемы.
|
||||
### ✅ 6b. Transmission: 255 торрентов "no data found" — РЕШЕНО `docker restart`
|
||||
**Симптом:** transmission-UI (9091) открывался, но все 255 торрентов показывали **`error 3: No Data Found`**.
|
||||
**Уточнённый диагноз (проверено RPC изнутри, whitelist `172.16.*.*`):** downloadDir у каждого торрента УЖЕ корректно указывал не на Downloads, а на **`/mnt/storage/Movies`** (или `/storage/documentaries`), и файлы там физически ЕСТЬ (164 single `.mkv` прямо в Movies; `Thursday.1998_BDRip_cw.mkv` 3.1G и т.д.), владелец 950 `-rw-r-----`, читаются под uid 950 (`docker exec -u 950` → READ_OK). **НЕ** проблема download-dir и НЕ права — файл доступен демону. `torrent-verify` поодиночке НЕ снимал ошибку.
|
||||
**Настоящий корень:** ошибка `No Data Found` была **закеширована при старте**, когда транзит через корень `/storage` был ещё заблокирован (до `chmod 750` на корень). transmission не перевалидировал данные после разблокировки traverse.
|
||||
**Фикс (НЕ root):** простая перезагрузка демона заново валидирует все торренты при доступном traverse:
|
||||
```bash
|
||||
docker restart transmission
|
||||
```
|
||||
**Результат:** **254 из 255 торрентов СРАЗУ чисты** (было 0). Остался только id=1 (`Thursday.1998_BDRip_cw.mkv`) — ранее ему крутили `torrent-verify`, но он всё ещё `error 3`; добить: в Web UI transmission на торренте → **Verify Local Data**, либо ещё один verify.
|
||||
> Вывод для будущего: «No Data Found» у всех торрентов в transmission после пересоздания/миграции данных чаще всего = **старт демона при недоступном traverse к данным**. Решение — починить traverse (root каталога/путь) и `docker restart`. Данные при этом НЕ трогаются.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user