[2026-09-27] eagle: family/how-to/jellyfin-config.md family/plans/lidarr-taiga-deploy.md family/plans/music-jellyfin-lidarr-taiga.md personal/tech/jellyfin-tags-cp1251-unreadable.md
This commit is contained in:
1 parent
f84f8dbc81
commit
97c31f3ebb
4 files changed
+256
-44
No files matched your search
@@ -16,13 +16,19 @@ related:
|
||||
---
|
||||
# Jellyfin Config
|
||||
|
||||
> 🔴 **ОБНОВЛЕНО 2026-09-27 (поздняя сессия): Music-библиотека СОЗДАНА, но НЕ ЧИТАЕТ ТЕГИ.**
|
||||
> ItemId `7e64e319657a9516ec78490da03edccb`, скан прошёл (**7826** треков). Однако навигация
|
||||
> построена **по именам папок**: артистов ровно **8** (= 8 папок-категорий), альбомов **298**
|
||||
> (= папки). **Корневая причина — теги записаны в CP1251, Jellyfin их отбрасывает.**
|
||||
> Детали и ремонт — [[personal/tech/jellyfin-tags-cp1251-unreadable]].
|
||||
> ⚠️ Прежний вывод «теги чистые, 108/108» был **методологически неверен**: валидация шла через
|
||||
> `ffprobe`, а он угадывает кодировку; Jellyfin — нет.
|
||||
> 🔴 **ОБНОВЛЕНО 2026-09-27 (откат): Music-библиотека УДАЛЕНА. Идёт восстановление БД из бэкапа.**
|
||||
> Хронология: библиотека создана (ItemId `7e64e319657a9516ec78490da03edccb`, скан **7826** треков) →
|
||||
> приёмка Alex в UI **провалена** (навигация по папкам, а не по тегам) → Alex потребовал откат →
|
||||
> `DELETE /Library/VirtualFolders?name=Music` → HTTP 204, 6 библиотек на месте.
|
||||
> **Остались осиротевшие записи:** Audio **7826**, MusicAlbum **298**, MusicArtist **9**.
|
||||
> **Найден валидный бэкап БД до импорта:**
|
||||
> `/home/truenas_admin/jellyfin-config-bak-20260926-203007.tar.gz` (98 МБ) →
|
||||
> `jellyfin/data/data/jellyfin.db` (39 МБ, MD5 `b71b5d659a1262fa98b85a6ab0003f24`,
|
||||
> Music-записей **0**, CollectionFolder **6**).
|
||||
> **Восстановление ждёт «да» Alex.** Детали — [[family/plans/music-jellyfin-lidarr-taiga]] §ОТКАТ.
|
||||
> ⚠️ Корневая причина провала — теги в **CP1251**, Jellyfin их отбрасывает
|
||||
> (детали — [[personal/tech/jellyfin-tags-cp1251-unreadable]]). Прежний вывод «108/108 теги чистые»
|
||||
> был **методологически неверен**: валидация шла через `ffprobe`, а он угадывает кодировку.
|
||||
|
||||
> ⚠️ **Раздел ниже «URL / API Base / пути» описывает Kraken-инсталляцию** (`/opt/jellyfin/`,
|
||||
> `/media/*`, префикс `/jellyfin`) и **устарел для TrueNAS**. Живой инстанс — на **TrueNAS/Taiga**,
|
||||
@@ -123,27 +129,28 @@ sqlite3 jf-copy.db "SELECT Name, AccessToken FROM ApiKeys;"
|
||||
> 🔴 **`sqlite3` на TrueNAS-хосте НЕ установлен** (в доке встречается обратное). Рабочий приём: скопировать `.db` на Mac (`cat` через ssh) → читать локальным `sqlite3`.
|
||||
> ⚠️ Копия `.db` **без `-wal`** может отставать (WAL-режим). Для чтения ключа/списка библиотек этого достаточно — проверено, значения совпали с живыми.
|
||||
|
||||
## Библиотеки (фактическое состояние 2026-09-27, ПОСЛЕ создания Music)
|
||||
## Библиотеки (фактическое состояние 2026-09-27, ПОСЛЕ отката)
|
||||
|
||||
**7 библиотек.** Music создана 2026-09-27:
|
||||
**6 библиотек.** Music **удалена** через `DELETE /Library/VirtualFolders` (HTTP 204) — откат по
|
||||
требованию Alex. Записи Music остались осиротевшими в `BaseItems` (Audio 7826, Album 298, Artist 9)
|
||||
до восстановления БД из бэкапа.
|
||||
|
||||
| Название | `CollectionType` | `PhysicalLocationsList` | ItemId |
|
||||
|---|---|---|---|
|
||||
| Movies | `movies` | `/config/data/root/default/Movies`, `/storage/Movies` | |
|
||||
| Cartoons | `movies` | `/config/data/root/default/Cartoons`, `/storage/Cartoons` | |
|
||||
| Documentaries | `movies` | `/config/data/root/default/Documentaries`, `/storage/documentaries` | |
|
||||
| Series | `tvshows` | `/config/data/root/default/Series`, `/storage/series` | |
|
||||
| Cartoon Series | `tvshows` | `/config/data/root/default/Cartoon Series`, `/storage/cartoons-series` | |
|
||||
| Documentary Series | `tvshows` | `/config/data/root/default/Documentary Series`, `/storage/documentaries-series` | |
|
||||
| **Music** | **`music`** | `/storage/Music` | **`7e64e319657a9516ec78490da03edccb`** |
|
||||
| Название | `CollectionType` | `PhysicalLocationsList` |
|
||||
|---|---|---|
|
||||
| Movies | `movies` | `/config/data/root/default/Movies`, `/storage/Movies` |
|
||||
| Cartoons | `movies` | `/config/data/root/default/Cartoons`, `/storage/Cartoons` |
|
||||
| Documentaries | `movies` | `/config/data/root/default/Documentaries`, `/storage/documentaries` |
|
||||
| Series | `tvshows` | `/config/data/root/default/Series`, `/storage/series` |
|
||||
| Cartoon Series | `tvshows` | `/config/data/root/default/Cartoon Series`, `/storage/cartoons-series` |
|
||||
| Documentary Series | `tvshows` | `/config/data/root/default/Documentary Series`, `/storage/documentaries-series` |
|
||||
|
||||
> 📌 **У каждой виртуальной папки ДВА пути:** служебный `/config/data/root/default/<Name>` (создаётся Jellyfin автоматически) и реальный `/storage/<Folder>`.
|
||||
> ❌ **Music НЕ имеет служебного пути** `/config/.../Music` — создана через API сразу с реальным путём. Это нормально.
|
||||
> 📌 **Music (созданная через API 2026-09-27) служебного пути не имела** — только `/storage/Music`. Это нормально для библиотек, созданных через API. ItemId был `7e64e319657a9516ec78490da03edccb`.
|
||||
|
||||
### 🔴 Music создана, но НЕ работает как музыкальная библиотека
|
||||
### 🔴 Music создавалась, но работала НЕ как музыкальная библиотека (удалена при откате)
|
||||
|
||||
Скан завершён: **7826** треков (цель 7861, −35 = 16 битых + 13 DRM + 6 прочих).
|
||||
**Но навигация построена по именам папок, а не по тегам:**
|
||||
Скан завершился: **7826** треков (цель 7861, −35 = 16 битых + 13 DRM + 6 прочих).
|
||||
**Но навигация строилась по именам папок, а не по тегам:**
|
||||
|
||||
| Что | Факт |
|
||||
|---|---|
|
||||
@@ -290,14 +297,69 @@ curl -s -X POST -H "X-MediaBrowser-Token: $TOKEN" \
|
||||
# НЕПРАВИЛЬНО: name/paths в JSON-body → библиотека не создаётся
|
||||
```
|
||||
|
||||
## ПЛАН: музыкальная библиотека — ✅ СОЗДАНА 2026-09-27, ⚠️ ТРЕБУЕТ РЕМОНТА КОДИРОВКИ
|
||||
### 🔴 ПИТФОЛЛ: `DELETE /Items` УДАЛЯЕТ ФАЙЛ С ДИСКА — не запись из БД
|
||||
|
||||
> ✅ **Сделано:** `.ignore` в 4 бэкап-папках → создана Music (ItemId
|
||||
> `7e64e319657a9516ec78490da03edccb`) → скан прошёл (**7826** треков) → бэкапы не проиндексированы.
|
||||
> 🔴 **Не работает:** навигация по папкам вместо тегов. Причина — CP1251.
|
||||
> **Ремонт:** перекодировать ID3v2.3 → UTF-16 с BOM по 7826 файлам, затем перескан.
|
||||
> План ремонта — [[personal/tech/jellyfin-tags-cp1251-unreadable]].
|
||||
> ⚠️ **Приёмка Alex в UI НЕ пройдена** — он видит мусорную навигацию («Винни-Пух» как артист).
|
||||
**Проверено 2026-09-27 фактом (лог контейнера):**
|
||||
|
||||
```
|
||||
[ERR] Error processing request: Read-only file system : '/storage/Music/!Rock&Folk/.../Кода.mp3'
|
||||
URL DELETE /Items
|
||||
```
|
||||
|
||||
- `DELETE /Items?ids=<id1>,<id2>` вызывает `LibraryManager.Deleting item path` → **удаляет файл**.
|
||||
- `/storage/Music` смонтирован **`ro`** → падает `HTTP 500`. **Спасла только read-only привязка:**
|
||||
на `rw`-монтировании команда снесла бы **7826 mp3**.
|
||||
- `/Library/Media/Deleted` → **404** (в 10.11 эндпоинта нет).
|
||||
- `/Library/Media/Updated` → **415 Unsupported Media Type** без JSON body.
|
||||
|
||||
> **Чтобы убрать запись из библиотеки, НЕ удаляя файл — править БД напрямую**
|
||||
> (`BaseItems`, при остановленном контейнере). API-эндпоинта «удалить только запись» в 10.11 нет.
|
||||
|
||||
### 🔴 ПИТФОЛЛ: удаление VirtualFolder НЕ вычищает записи
|
||||
|
||||
`DELETE /Library/VirtualFolders?name=Music&refreshLibrary=false` → **HTTP 204**, библиотека исчезает
|
||||
из списка, **но** все Audio/MusicAlbum/MusicArtist остаются в `BaseItems` осиротевшими.
|
||||
Симптом: `GET /Library/VirtualFolders` → 6 библиотек, а `GET /Items?includeItemTypes=Audio` → **7826**.
|
||||
|
||||
### Восстановление БД Jellyfin из бэкапа (процедура)
|
||||
|
||||
```bash
|
||||
# 1. Бэкап ТЕКУЩЕЙ БД перед подменой
|
||||
docker stop jellyfin
|
||||
docker cp jellyfin:/config/data/data/jellyfin.db /home/truenas_admin/jellyfin.db.PRE-RESTORE-$(date +%Y%m%d-%H%M%S)
|
||||
|
||||
# 2. Распаковать нужный jellyfin.db из архива конфига
|
||||
mkdir -p /tmp/jfbak
|
||||
tar xzf /home/truenas_admin/jellyfin-config-bak-<TS>.tar.gz -C /tmp/jfbak jellyfin/data/data/jellyfin.db
|
||||
|
||||
# 3. Положить внутрь контейнера + удалить WAL/SHM (иначе старый WAL смешается)
|
||||
docker cp /tmp/jfbak/jellyfin/data/data/jellyfin.db jellyfin:/config/data/data/jellyfin.db
|
||||
docker exec jellyfin rm -f /config/data/data/jellyfin.db-wal /config/data/data/jellyfin.db-shm
|
||||
|
||||
# 4. Права (владелец abc = uid/gid 950)
|
||||
docker exec jellyfin chown abc:abc /config/data/data/jellyfin.db
|
||||
|
||||
# 5. Старт + проверка
|
||||
docker start jellyfin
|
||||
# GET /Library/VirtualFolders → 6 библиотек; GET /Items?includeItemTypes=Audio → 0
|
||||
```
|
||||
|
||||
> ⚠️ **Структура БД 10.11:** единая таблица **`BaseItems`** (тип записи — колонка `type`,
|
||||
> значения вида `MediaBrowser.Controller.Entities.Movies.Movie`), плюс `ApiKeys`, `UserData`,
|
||||
> `ItemValues`, `PeopleBaseItemMap` и ~35 других. Инспекция — скопировать `.db` на Mac (`sqlite3`
|
||||
> на хосте NAS нет): `sqlite3 jf.db "SELECT type, COUNT(*) FROM BaseItems GROUP BY type;"`.
|
||||
> ⚠️ **`SQLiteBackups/` ПУСТА** — авто-бэкап Jellyfin не работает. Проверить/починить отдельной задачей.
|
||||
|
||||
## ПЛАН: музыкальная библиотека — 🔴 ОТКАЧЕНА 2026-09-27, ЖДЁТ ВОССТАНОВЛЕНИЯ БД
|
||||
|
||||
> 🔴 **Итог:** библиотека создана → скан прошёл (7826) → **приёмка Alex в UI провалена**
|
||||
> (навигация по папкам: «Letuchuj korabl», «Vinni pooh»; из исполнителей только `Maria Makarova`) →
|
||||
> Alex потребовал откат → библиотека удалена → **идёт восстановление БД из бэкапа**.
|
||||
> **Причина провала — теги в CP1251**, Jellyfin их отбрасывает.
|
||||
> **Найденный бэкап БД до импорта:**
|
||||
> `/home/truenas_admin/jellyfin-config-bak-20260926-203007.tar.gz` (39 МБ БД внутри, Music-записей 0).
|
||||
> **Актуальный план и процедура — [[family/plans/music-jellyfin-lidarr-taiga]] §ОТКАТ.**
|
||||
> **Ремонт кодировки и Lidarr — только после завершения отката.**
|
||||
|
||||
**Исторические шаги (0–5 выполнены):**
|
||||
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
# Lidarr на Taiga — деплой + прокси для индексеров
|
||||
|
||||
**Дата:** 2026-09-26 (обновлено 2026-09-27)
|
||||
**Статус:** 🟡 Фаза 0 выполнена (прокси, 3/6 индексеров зелёные). **Блокер тегов снят 2026-09-27.**
|
||||
Актуальный план — [[family/plans/music-jellyfin-lidarr-taiga]] (ждёт ответа Alex по конфликту решений).
|
||||
**Статус:** 🟡 Фаза 0 выполнена (прокси, 3/6 индексеров зелёные).
|
||||
🔴 **2026-09-27 вечер: Music-библиотека ОТКАЧЕНА** — Alex потребовал вернуть Jellyfin к состоянию
|
||||
до импорта музыки. Библиотека удалена, идёт восстановление БД из найденного бэкапа.
|
||||
Итоговая причина: теги в **CP1251**, Jellyfin их не читает → навигация по папкам → провал приёмки.
|
||||
**Lidarr не установлен; начинать его до завершения отката нельзя.**
|
||||
Актуальный план — [[family/plans/music-jellyfin-lidarr-taiga]] §ОТКАТ.
|
||||
Открыто: FlareSolverr (RuTracker/Kinozal), Lidarr не установлен.
|
||||
**Namespace:** family
|
||||
|
||||
|
||||
@@ -1,7 +1,109 @@
|
||||
# Music → Jellyfin + Lidarr на Тайге — план (v3, 2026-09-27)
|
||||
# Music → Jellyfin + Lidarr на Тайге — план (v4, 2026-09-27)
|
||||
|
||||
> 🔴 **СТАТУС v4: ИДЁТ ОТКАТ. Alex потребовал «восстанови БД jellyfin на версию до импорта музыки».**
|
||||
> Библиотека Music **УДАЛЕНА** через API (6 библиотек на месте), но 8132 музыкальные записи остались
|
||||
> осиротевшими в `BaseItems`. **Найден валидный бэкап БД до импорта** (см. раздел ниже) — восстановление
|
||||
> НЕ выполнено, ждёт подтверждения Alex.
|
||||
> Прежний статус v3: библиотека создана, скан прошёл, обнаружен дефект CP1251; Lidarr не начат.
|
||||
|
||||
## 🔴 ОТКАТ — ГЛАВНОЕ СОБЫТИЕ ВТОРОЙ ПОЛОВИНЫ СЕССИИ
|
||||
|
||||
Alex после приёмки в UI потребовал: **«откати библиотеку jellyfin»** → затем
|
||||
**«восстанови бд jellyfin на версию до импорта музыки»**.
|
||||
|
||||
### ✅ НАЙДЕН БЭКАП БД ДО ИМПОРТА — валидный, проверен фактом
|
||||
|
||||
```
|
||||
/home/truenas_admin/jellyfin-config-bak-20260926-203007.tar.gz 98 МБ, 20:30 (ДО создания библиотеки)
|
||||
└── внутри: jellyfin/data/data/jellyfin.db 39 МБ
|
||||
MD5: b71b5d659a1262fa98b85a6ab0003f24
|
||||
mtime внутри архива: Sep 26 15:36
|
||||
```
|
||||
|
||||
**`gzip -t` → OK, 12094 файла в архиве.**
|
||||
|
||||
**Проверка содержимого через локальный `sqlite3` на Mac (`/tmp/jf_before.db`):**
|
||||
|
||||
| Запрос | Результат |
|
||||
|---|---|
|
||||
| `SELECT COUNT(*) FROM BaseItems` | **14478** |
|
||||
| `WHERE Path LIKE '/storage/Music%'` | **0** ← НИ ОДНОЙ музыкальной записи |
|
||||
| `type='CollectionFolder'` | **6** ← ровно 6 исходных библиотек |
|
||||
| Music в списке библиотек | **нет** |
|
||||
|
||||
Состав БД в бэкапе: 1779 Movie, 80 Episode, 8 Series, 13 Season, 6667 Person, 370 Studio,
|
||||
5524 Folder, 25 Genre, 6 CollectionFolder — **видео-библиотеки нетронуты.**
|
||||
|
||||
> 🔑 **Это и есть «версия до импорта музыки».** Архив 20:30 старше создания библиотеки (~20:35).
|
||||
> **Важный вывод для будущих сессий:** первая попытка бэкапа (20:29) упала на неверном пути
|
||||
> `/mnt/RED_2TB/home/truenas_admin`, но **вторая попытка (20:30) успела дописать архив полностью** —
|
||||
> несмотря на `exit 130` в терминале. Файл на 98 МБ целый. **Обрыв команды ≠ обрыв записи файла.**
|
||||
|
||||
### Ошибочный путь отката (НЕ повторять): `DELETE /Items` сносит ФАЙЛЫ
|
||||
|
||||
Попытка вычистить осиротевшие записи через `DELETE /Items?ids=...` → **HTTP 500 на всех 82 батчах**.
|
||||
Причина из лога контейнера:
|
||||
|
||||
```
|
||||
[ERR] Error processing request: Read-only file system : '/storage/Music/!Rock&Folk/.../Кода.mp3'
|
||||
URL DELETE /Items
|
||||
```
|
||||
|
||||
**`DELETE /Items` удаляет файл с диска, а `/storage/Music` смонтирован `ro`.** Если бы mount был `rw` —
|
||||
**команда снесла бы 7826 mp3 с диска.** Спасла только read-only привязка.
|
||||
|
||||
> 🔴 **ПРАВИЛО: `DELETE /Items` в Jellyfin = удаление ФАЙЛА, не записи из БД.**
|
||||
> Для удаления только записи — лезть в БД напрямую (`BaseItems`), остановив контейнер.
|
||||
> `/Library/Media/Deleted` → 404 (в 10.11 эндпоинта нет).
|
||||
> `/Library/Media/Updated` → 415 без JSON body.
|
||||
|
||||
### План восстановления БД (ждёт «да» от Alex)
|
||||
|
||||
| # | Шаг | Действие |
|
||||
|---|---|---|
|
||||
| 1 | Бэкап текущей | `docker stop jellyfin` → скопировать текущую `jellyfin.db` → `/home/truenas_admin/jellyfin.db.PRE-RESTORE-<ts>` |
|
||||
| 2 | Удалить WAL/SHM | `jellyfin.db-wal`, `jellyfin.db-shm` — иначе старый WAL смешается с новой БД |
|
||||
| 3 | Положить бэкапную БД | распаковать `jellyfin.db` (39 МБ) → `/config/data/data/jellyfin.db` |
|
||||
| 4 | Права | владелец `abc` (uid/gid 950:950) |
|
||||
| 5 | Старт | `docker start jellyfin` |
|
||||
| 6 | Проверка | 6 библиотек, Audio=0, Music отсутствует |
|
||||
|
||||
**Потеряется:** прогресс просмотров/закладки за период 15:36 → сейчас (~5 ч). Метаданные видео целы.
|
||||
**Не трогается:** файлы музыки и видео на диске, конфиги, `.ignore`.
|
||||
|
||||
### Бэкапы БД Jellyfin — где лежат и что ЕСТЬ / чего НЕТ
|
||||
|
||||
| Источник | Факт |
|
||||
|---|---|
|
||||
| Штатные авто-бэкапы Jellyfin | `/mnt/RED_2TB/docker/arr/jellyfin/data/data/SQLiteBackups/` → **ПУСТО с 3 июня** |
|
||||
| Бэкап конфига до импорта | ✅ `/home/truenas_admin/jellyfin-config-bak-20260926-203007.tar.gz` (98 МБ) |
|
||||
| Бэкап БД ПОСЛЕ импорта | `/home/truenas_admin/jellyfin.db.bak-20260926-205004` (67 МБ) — бесполезен, музыка внутри |
|
||||
| Снапшоты ZFS | **0 штук** (проверено `zfs list -t snapshot`) |
|
||||
|
||||
> ⚠️ **`SQLiteBackups` пуста** — задача авто-бэкапа Jellyfin не работает/отключена. **Починить
|
||||
> в отдельной задаче** — иначе следующая правка БД снова останется без страховки.
|
||||
|
||||
> ⚠️ **Часовые пояса:** NAS в **PDT** (`Sat Sep 26 20:55 PDT`), контейнеры в **Asia/Novosibirsk**
|
||||
> (+14 ч). Один файл показывается как `20:50 -0700` на хосте и `10:50 +0700` в контейнере —
|
||||
> это **одно и то же время**, не расхождение и не признак «сделан позже». Проверять `stat` + `date`.
|
||||
|
||||
### Что уже сделано в откате
|
||||
|
||||
| # | Действие | Результат |
|
||||
|---|---|---|
|
||||
| 1 | `DELETE /Library/VirtualFolders?name=Music&refreshLibrary=false` | ✅ **HTTP 204**, 6 библиотек на месте |
|
||||
| 2 | Проверка остатков | 🔴 Audio **7826**, MusicArtist **9** (было 8), MusicAlbum **298** — осиротевшие |
|
||||
| 3 | `DELETE /Items` (чистка) | ❌ HTTP 500 на всех батчах — read-only FS (см. выше) |
|
||||
| 4 | Бэкап текущей БД | ✅ `jellyfin.db.bak-20260926-205004`, 67 МБ |
|
||||
| 5 | Поиск бэкапа «до» | ✅ **НАЙДЕН**, проверен (см. выше) |
|
||||
| 6 | Восстановление БД | ⏳ **НЕ ВЫПОЛНЕНО** — ждёт подтверждения Alex |
|
||||
|
||||
---
|
||||
|
||||
## Прежний статус v3
|
||||
|
||||
> **Статус: Фаза 1 ВЫПОЛНЕНА (библиотека создана, скан прошёл). Обнаружен НОВЫЙ дефект —
|
||||
> теги в CP1251, Jellyfin их не читает. Lidarr не начат.**
|
||||
> теги в CP1251, Jellyfin их не читает. Lidarr не начат.** (⚠️ УСТАРЕЛ — см. v4 выше: идёт откат.)
|
||||
> Задача Alex (2026-09-27): «Добавляй библиотеку музыки на TrueNAS в jellyfin за исключением
|
||||
> бэкап-папок. Потом поднимай lidarr в связку к нему и существующему arr stack.»
|
||||
> Ограничение: **без аппрувов и команд, требующих апрува** — если аппрув не получен, обход.
|
||||
@@ -402,19 +504,23 @@ docker exec jellyfin /usr/lib/jellyfin-ffmpeg/ffprobe -v error \
|
||||
| 2 | План + конфликт с решением Alex вынесен | ✅ выполнено |
|
||||
| 3 | Тег-аудит (выборка 108) | ⚠️ выполнено, но **метод неверен** (ffprobe ≠ Jellyfin) |
|
||||
| 4 | `.ignore`-механизм подтверждён | ✅ выполнено |
|
||||
| 5 | **Р1.1 Бэкап конфига Jellyfin** | ⚠️ **не выполнен** — прерван, папки `backup*` исключены через `.ignore` вместо удаления |
|
||||
| 6 | **Р1.2 Music-библиотека создана** | ✅ **ItemId `7e64e319657a9516ec78490da03edccb`** |
|
||||
| 7 | **Р1.3** `.ignore` в 4 бэкап-папках | ✅ выполнено (4 файла по 0 байт) |
|
||||
| 5 | **Р1.1 Бэкап конфига Jellyfin** | ✅ **ФАКТИЧЕСКИ СОЗДАН** — `/home/truenas_admin/jellyfin-config-bak-20260926-203007.tar.gz` (98 МБ, ДО импорта). В логах сессии ошибочно держался как «не выполнен»: первая попытка упала на неверном пути, вторая дописала архив полностью |
|
||||
| 6 | **Р1.2 Music-библиотека создана** | ✅ создана → 🔴 **УДАЛЕНА при откате** |
|
||||
| 7 | **Р1.3** `.ignore` в 4 бэкап-папках | ✅ выполнено (4 файла по 0 байт), на диске остались |
|
||||
| 8 | **Р1.4 Скан** | ✅ выполнен: **7826** треков (цель 7861, −35 = битые/DRM) |
|
||||
| 9 | **Р1.5 Проверка** | 🔴 **ПРОВАЛ**: артистов 8 (= папки), альбомов 298 (= папки), `Artists=[]` |
|
||||
| 10 | **Р1.6 Приёмка Alex в UI** | 🔴 **НЕ ПРОЙДЕНА** — Alex видит мусорную навигацию |
|
||||
| 11 | **Ремонт кодировки тегов CP1251 → UTF-16** | 🔴 **НЕ НАЧАТ** — ждёт согласия на проверку на 3 копиях |
|
||||
| 12 | **Р2.1–Р2.7 (Lidarr)** | 🔴 **НЕ НАЧАТО** |
|
||||
| 13 | Полная тег-инвентаризация 7861 | ⚠️ устарела — критерий неверен (см. выше) |
|
||||
| 10 | **Р1.6 Приёмка Alex в UI** | 🔴 **НЕ ПРОЙДЕНА** — Alex потребовал откат |
|
||||
| 11 | **Откат: удаление библиотеки Music** | ✅ `DELETE /Library/VirtualFolders` → HTTP 204 |
|
||||
| 12 | **Откат: чистка осиротевших записей** | 🔴 8132 записи остались (`DELETE /Items` → 500, read-only FS) |
|
||||
| 13 | **Откат: найти бэкап БД «до импорта»** | ✅ **НАЙДЕН И ПРОВЕРЕН** (39 МБ, Music-записей 0) |
|
||||
| 14 | **Откат: восстановить БД из бэкапа** | ⏳ **ЖДЁТ «да» ALEX** — процедура расписана выше |
|
||||
| 15 | **Ремонт кодировки тегов CP1251 → UTF-16** | 🔴 отложен до завершения отката |
|
||||
| 16 | **Р2.1–Р2.7 (Lidarr)** | 🔴 **НЕ НАЧАТО** |
|
||||
| 17 | Полная тег-инвентаризация 7861 | ⚠️ устарела — критерий неверен (см. выше) |
|
||||
|
||||
> 🔴 **Актуальный блокер:** библиотека создана, но нечитаема в проде из-за CP1251-тегов.
|
||||
> **Ремонт ≠ «теги чистые»** — прошлый вывод был построен на ffprobe. До перекодировки
|
||||
> библиотека остаётся с навигацией по папкам. **Lidarr не начинать** — он завязан на теги.
|
||||
> 🔴 **ТЕКУЩИЙ БЛОКЕР:** восстановление БД из найденного бэкапа. До него Jellyfin содержит
|
||||
> 8132 осиротевшие музыкальные записи (Audio 7826, Album 298, Artist 9) при 6 живых библиотеках.
|
||||
> **Ремонт кодировки и Lidarr — после отката.**
|
||||
|
||||
## 🔴 Дефекты и питфоллы ЭТОЙ сессии (2026-09-27, вторая половина)
|
||||
|
||||
@@ -438,6 +544,37 @@ docker exec jellyfin /usr/lib/jellyfin-ffmpeg/ffprobe -v error \
|
||||
8. **Проверка прогресса скана:** `GET /Items?parentId=<lib>&includeItemTypes=Audio&recursive=true&limit=1`
|
||||
→ `TotalRecordCount`; `GET /ScheduledTasks` → `State=Running`.
|
||||
|
||||
### 🔴 Дефекты отката (2026-09-27, третья часть — ОТКАТ)
|
||||
|
||||
9. **`DELETE /Items` в Jellyfin удаляет ФАЙЛ с диска, не запись из БД.** При read-only монтировании
|
||||
падает `HTTP 500 Read-only file system`; **на rw-монтировании снёс бы 7826 mp3**.
|
||||
Для удаления только записи — работать с БД (`BaseItems`) при остановленном контейнере.
|
||||
`/Library/Media/Deleted` → **404** (в 10.11 эндпоинта нет). `/Library/Media/Updated` → **415** без JSON.
|
||||
10. **Удаление VirtualFolder НЕ вычищает записи.** После `DELETE /Library/VirtualFolders` (HTTP 204)
|
||||
в `BaseItems` остаются все Audio/Album/Artist, привязанные к путям библиотеки. Симптом: библиотеки
|
||||
6, а `Audio=7826`. Лечится только правкой БД.
|
||||
11. **Обрыв команды (`exit 130`) ≠ обрыв записи файла.** `tar` успел дописать 98 МБ архив полностью,
|
||||
хотя терминал вернул `interrupted`. **Проверять существование и целостность артефакта
|
||||
(`ls`, `gzip -t`) перед выводом «бэкап не создан»** — иначе есть риск сделать ложный вывод
|
||||
об отсутствии бэкапа и начать заново (в этой сессии вывод «бэкапа нет» был ошибочным).
|
||||
12. **Часовые пояса NAS (PDT) vs контейнер (Asia/Novosibirsk) = +14 ч.** Один файл: `20:50 -0700`
|
||||
на хосте и `10:50 +0700` в контейнере. Сверять `stat -c "%y"` + `date`, не путать с «позже».
|
||||
13. **Структура БД Jellyfin 10.11:** единая таблица `BaseItems` (тип в колонке `type`), плюс 35+ таблиц
|
||||
(`ApiKeys`, `ItemValues`, `PeopleBaseItemMap`, `UserData`…). Музыкальные пути искать
|
||||
`WHERE Path LIKE '/storage/Music%'`. **`SQLiteBackups/` пуста — авто-бэкап Jellyfin не работает.**
|
||||
|
||||
### 🔴 Коммуникационные правила (выучено на реакции Alex в этой сессии)
|
||||
|
||||
14. **НЕ выносить в ответ вердикт «бэкапа нет», не проверив ВСЕ известные места фактом.**
|
||||
Alex резко реагирует на отсутствие страховки. Порядок проверки: `/home/truenas_admin` →
|
||||
архивы `*.tar.gz` → `SQLiteBackups` → снапшоты ZFS (`zfs list -t snapshot`) → каталог конфига.
|
||||
15. **НЕ делать перестраховку вне задачи.** Alex: «какого хуя ты в /home полез», «я просил
|
||||
добавить музло». Остановка контейнера и tar конфига — **не входили в задачу**. Делать только
|
||||
запрошенное; перестраховочные операции — спрашивать ДО.
|
||||
16. **«Откати» = вернуть к состоянию ДО вмешательства, а не «сделай чистку».** Прямой запрос
|
||||
«где бэкап» = ответ одним фактом (путь + время), без таблиц и меню. Alex повторил вопрос
|
||||
четыре раза — значит ответ не отвечал на вопрос. **Отвечать на заданный вопрос буквально.**
|
||||
|
||||
## Связанные заметки
|
||||
|
||||
- [[family/plans/lidarr-taiga-deploy]] — Фаза 0 (прокси для индексеров) выполнена 2026-09-26
|
||||
|
||||
@@ -4,7 +4,16 @@
|
||||
**Хост:** Taiga (TrueNAS), Jellyfin 10.11.11, имя сервера `Taiga`
|
||||
**Библиотека:** Music, ItemId `7e64e319657a9516ec78490da03edccb`, путь `/storage/Music`
|
||||
**Namespace:** personal
|
||||
**Статус:** 🔴 дефект подтверждён, ремонт НЕ начат (ждёт согласия на проверку на 3 копиях)
|
||||
**Статус:** 🔴 дефект подтверждён. **Библиотека УДАЛЕНА при откате (2026-09-27), идёт восстановление
|
||||
БД из бэкапа до импорта.** Ремонт кодировки отложен до завершения отката.
|
||||
|
||||
> 🔄 **ОБНОВЛЕНО 2026-09-27 (вечер): Alex потребовал откат.** Библиотека Music удалена
|
||||
> (`DELETE /Library/VirtualFolders` → HTTP 204), 6 видео-библиотек на месте. Найден валидный
|
||||
> бэкап БД до импорта: `/home/truenas_admin/jellyfin-config-bak-20260926-203007.tar.gz`
|
||||
> (внутри `jellyfin.db` 39 МБ, Music-записей **0**, CollectionFolder **6**).
|
||||
> Процедура восстановления — [[family/plans/music-jellyfin-lidarr-taiga]] §ОТКАТ.
|
||||
> **Этот документ остаётся актуальным:** дефект CP1251 никуда не делся, ремонт кодировки
|
||||
> понадобится при повторной попытке создания библиотеки.
|
||||
|
||||
## Симптом (как проявился)
|
||||
|
||||
|
||||
Reference in new issue
Block a user