[2026-09-26] eagle: personal/plans/tagwriter-container.md personal/tech/music-tags-repair-truenas.md

This commit is contained in:
Alexey Martemyanov committed 2026-09-26 22:43:32 +06:00
1 parent 218165c8c7
commit 2a8706d450
2 files changed
+17 -7

No files matched your search

+14 -6
View File
@@ -17,7 +17,7 @@ updated: '2026-09-26'
---
# tagwriter — контейнер применения тегов MP3 (TrueNAS)
_Создан: 2026-09-26. **Статус: ✅ контейнер собран, dry-run прошёл (0 MISSING) → ждёт бэкап + apply.**_
_Создан: 2026-09-26. **Статус: ✅ контейнер собран, dry-run прошёл (0 MISSING), бэкап выполнен (7041 файл, 42 ГБ) → ждёт `--apply`.**_
_Основание: [[personal/plans/music-tags-wave38-fixes]]._
## Задача
@@ -89,9 +89,9 @@ docker run --rm -u 0 -v /mnt/RED_2TB/docker:/docker alpine:latest sh -c \
## Порядок работ
1. ✅ **Сборка образа** — `docker compose --profile tools build` (выполнено).
2. ⏳ **Бэкап** — `--backup` (7041 файлов → `/music/backup/`; 48 ГБ при 960 ГБ свободных). **Следующий шаг.**
2. ✅ **Бэкап** — `--backup`: **7041 файл, 42 ГБ → `/music/backup/`** (совпало с планом). Выполнено в фоне (~30 мин, ~2 ГБ/мин).
3. ✅ **Dry-run** — `--dry-run`, 0 записей, **MISSING 0** (выполнено, ждёт приёмки Alex).
4. ⏳ **Apply** — `--apply` (только по «go»).
4. ⏳ **Apply** — `--apply` (только по «go»). **Следующий шаг.**
5. ⏳ **Read-back** — `--readback` + глазами в Jellyfin.
## ✅ СОСТОЯНИЕ НА 2026-09-26 (факты)
@@ -102,9 +102,12 @@ docker run --rm -u 0 -v /mnt/RED_2TB/docker:/docker alpine:latest sh -c \
| Проект залит (`Dockerfile`, `docker-compose.yml`, `apply_tags.py`, `data/tag-fix-plan.csv`) | ✅ |
| Образ `tagwriter:latest` (`docker compose --profile tools build`) | ✅ собран (python:3.12-alpine + mutagen 1.47.0) |
| **DRY-RUN** | ✅ **не найдено: 0**, к обработке **7041** (файлов на диске 8483) |
| Бэкап | ⏳ не делался (48 ГБ, свободно 960 ГБ) |
| **БЭКАП** | ✅ **7041 файл, 42 ГБ → `/mnt/RED_2TB/storage/Music/backup/`** (файлов в backup: 7041, MP3: 6823) |
| Применение (`--apply`) | ⏳ ждёт «go» |
⚠️ **Замечание по пулу:** после бэкапа `df` показал `RED_2TB` = **935G** (было 976G) — ZFS-снапшоты
съели часть при копировании. Свободно 919 ГБ. Бэкап удалять **только после приёмки в Jellyfin**.
### 🔴 ПИТФОЛЛ 1: права файлов при COPY в образ
Файлы заливались `scp` как `-rw-------` (600) → `COPY` сохранил их root:root 600
@@ -130,11 +133,16 @@ docker run --rm -u 0 -v /mnt/RED_2TB/docker:/docker alpine:latest sh -c \
cd /mnt/RED_2TB/docker/tagwriter
docker compose --profile tools build # сборка
docker compose --profile tools run --rm tagwriter --dry-run # план, 0 записей
docker compose --profile tools run --rm tagwriter --backup # бэкап 48 ГБ в /music/backup/
docker compose --profile tools run --rm tagwriter --apply # запись тегов
docker compose --profile tools run --rm tagwriter --backup # бэкап 42 ГБ в /music/backup/ ✅ ВЫПОЛНЕНО
docker compose --profile tools run --rm tagwriter --apply # запись тегов (СЛЕДУЮЩИЙ ШАГ)
docker compose --profile tools run --rm tagwriter --readback # проверка
```
⚠️ **Бэкап — длительная операция (~30 мин, 42 ГБ).** Запускать **в фоне**
(`background=true` + `notify_on_complete`), НЕ в foreground: таймаут 600 с обрывает команду
`[Command timed out]`, а копирование продолжается в контейнере. Проверка прогресса:
`du -sh /mnt/RED_2TB/storage/Music/backup` (растёт ~2 ГБ/мин).
---
## Питфоллы
+3 -1
View File
@@ -76,7 +76,9 @@ related:
> Бэкапы: `bak-wave38-p2p3`, `-p4`, `-nashestvie`, `-chast`, `-chast2`, `-gorigori`.
>
> ⏭ **Дальше:** применение тегов через контейнер `tagwriter` — [[personal/plans/tagwriter-container]].
> ✅ Контейнер собран, **dry-run прошёл (MISSING 0, к обработке 7041)**. Осталось: `--backup` → `--apply`.
> ✅ Контейнер собран, **dry-run прошёл (MISSING 0, к обработке 7041)**.
> ✅ **Бэкап выполнен: 7041 файл, 42 ГБ → `/mnt/RED_2TB/storage/Music/backup/`** (файлов в backup 7041, сходится с планом).
> Осталось: `--apply` → `--readback`.
> Блокер прав на `/mnt/RED_2TB/docker/` решён: каталог создан **из контейнера** (`docker run -u 0 -v /mnt/RED_2TB/docker:/docker alpine mkdir` + `chown 950:950`).
>
> ### 🔴 ПИТФОЛЛ: sentinel-группа собирается по КОРНЮ сборника, НЕ по ближайшей папке