From 66dd5b1f5ef2cb3be6029821e4b6ddc8428650bd Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 22 Sep 2026 22:02:40 +0600 Subject: [PATCH] [2026-09-22] eagle: personal/plans/kraken-media-inventory-cleanup.md personal/tech/kraken-truenas-media-copies.md personal/tech/skill-lampac-kraken-deploy.md --- .../plans/kraken-media-inventory-cleanup.md | 175 ++++++++++++++++-- personal/tech/kraken-truenas-media-copies.md | 21 +++ personal/tech/skill-lampac-kraken-deploy.md | 44 ++++- 3 files changed, 224 insertions(+), 16 deletions(-) diff --git a/personal/plans/kraken-media-inventory-cleanup.md b/personal/plans/kraken-media-inventory-cleanup.md index 5da43bcb..4897be08 100644 --- a/personal/plans/kraken-media-inventory-cleanup.md +++ b/personal/plans/kraken-media-inventory-cleanup.md @@ -6,7 +6,7 @@ related: - '[[personal/plans/lampac-kraken]]' - '[[personal/tech/lampac-deployment]]' - '[[personal/tech/kraken-truenas-media-copies]]' -status: transmission-stopped-manifest-ready-awaiting-answers +status: deleted-765gb-done-fixing-arr-phantoms tags: - kraken - media @@ -271,6 +271,152 @@ Stranger Things, The Cyberfarm, Rick and Morty). Остальные 9 — **фа 240 id в `/tmp/tr-remove-ids.txt`. Механика: контейнер остановлен → правим `/srv/.../docker/transmission/torrents/*.torrent` + `resume/*.resume` + строку в `settings.json`. +## ✅✅ ВЫПОЛНЕНО 2026-09-22 (ночь) — УДАЛЕНО 693 ГБ, диск 477 ГБ → 1,2 ТБ + +> 🔴 **Раздел ниже («ШЕСТЬ ШАГОВ — ВЫПОЛНЕНО 4 из 6») описывает состояние ДО удаления.** +> Фактически выполнены шаги 3, 4, 5, 6a. Актуальный статус — здесь. + +### Итог + +| Метрика | До | После | +|---|---|---| +| `df` занято | 1,3 ТБ | **511 ГБ** | +| `df` свободно | 477 ГБ | **1,2 ТБ** | +| Transmission раздач | 249 | **9** | + +**Освобождено 765 ГБ.** + +### Что удалено (41 путь) + +| Путь | ГБ | +|---|---| +| `media/movies` | 309,69 | +| `media/movies-radarr` | 234,59 | +| `media/series-sonarr` | 116,14 | +| `media/series` | 3,62 | +| 37 папок мультфильмов (группы 3+4) | 168,3 | +| **ИТОГО** | **~832** | + +Лог удаления: `/tmp/delete-log-20260922-215821.txt` (на Кра́кене). +Скрипты: `/tmp/step6_delete.sh` (удаление с логом), `/tmp/step7_sudo.sh` (добивание каталогов). + +### Финальное состояние `media/` + +``` +.recyclebin cartoons cartoons-series documentaries documentaries-series downloads music +``` + +Осталось: `documentaries` (71,9 ГБ) · `documentaries-series` (235,6 ГБ) · +`downloads` (78,6 ГБ) · короткометражки `cartoons`/`cartoons-series`. + +### ✅ Шаг 3 — чистка Transmission ВЫПОЛНЕН + +**249 → 9 раздач.** Метод: контейнер **остановлен**, но удаление сделано через RPC +(поднял `docker start`, отправил `torrent-remove`, контейнер остаётся работать). + +```bash +curl -s -X POST "$TS" -H "X-Transmission-Session-Id: $SID" -H 'Content-Type: application/json' \ + -d '{"method":"torrent-remove","arguments":{"ids":[<240 id>],"delete-local-data":false}}' +``` + +🔴 **`"delete-local-data": false`** — снимает раздачу со списка, файлы не трогает. +Файлы удалены отдельным шагом (шаг 4). + +🔴 **Питфолл: Transmission ПЕРЕСОЗДАЁТ раздачи с новыми id.** После первого +`torrent-remove` на 240 id осталось **17, а не 9** — 8 раздач вернулись с новыми id +(223, 233, 234, 236, 238, 241, 244, 247). Долечены вторым проходом **по `downloadDir`**, +затем третьим — `Babylon` (`/downloads/radarr`, префикс не попал в фильтр). + +**Вывод:** чистить не по id, а **по `downloadDir`**, и проверять счётчик после каждого прохода +до сходимости. Скрипты: `/tmp/step4_tr_remove.sh` (по id), `/tmp/step5_tr_clean2.sh` +(по downloadDir), добивание `Babylon` id=236. + +### ✅ Шаг 4 — удаление файлов ВЫПОЛНЕН + +41 путь из `/tmp/delete-manifest.txt`. Скрипт с защитой: **отказ при числе строк ≠ 41**. + +🔴 **Питфолл: каталоги верхнего уровня требуют `sudo`.** Первый прогон удалил всё +содержимое, но 4 каталога вернули `Permission denied`: + +``` +rm: cannot remove '.../media/movies': Permission denied +``` + +Причина: сами каталоги `root:root`, хотя содержимое `kraken:kraken`. +Второй прогон `sudo rmdir` — сработал (каталоги к тому моменту были пусты). + +**Ошибка в скрипте:** не различал «не удалить содержимое» и «не удалить каталог». +Проверять оба уровня: содержимое — `rm -rf`, сам каталог — `sudo rmdir`. + +### ✅ Шаг 5 — rescan ВЫПОЛНЕН, но фантомы остались + +```bash +curl -sL -X POST -H "X-Api-Key: $RKEY" -H 'Content-Type: application/json' \ + -d '{"name":"RescanMovie"}' "http://127.0.0.1:7878/radarr/api/v3/command" +curl -sL -X POST -H "X-Api-Key: $SKEY" -H 'Content-Type: application/json' \ + -d '{"name":"RescanSeries"}' "http://127.0.0.1:8989/sonarr/api/v3/command" +``` + +Rescan **не почистил** — файлы исчезли ДО скана, трекеры приросли к старым записям: + +| Стек | Фантомов | +|---|---| +| Radarr | **12 фильмов** «с файлами» | +| Sonarr | **57 эпизодов** (Our Flag Means Death 18, Stranger Things 25, Cyberfarm 10, Rick and Morty 4) | + +Jellyfin: `/health` → **302** (жив). + +### 🔴 Шаг 5b — фантомы arr: `DELETE` падает с 409 (НЕ ЗАКРЫТО) + +Попытка снять записи через API: + +```bash +curl -sL -X DELETE -H "X-Api-Key: $RKEY" "$R/api/v3/moviefile/$FID" # → 409 +curl -sL -X DELETE -H "X-Api-Key: $SKEY" "$S/api/v3/episodefile/$EID" # → 409 +``` + +Тело ответа: + +```json +{"message":"Movie's root folder (/media/movies-radarr) doesn't exist.", + "description":"NzbDrone.Core.Exceptions.NzbDroneClientException: ... MediaFileDeletionService.cs:line 59"} +``` + +``` +Warn|DiskScanService|Movie's root folder (/media/movies-radarr) doesn't exist. +Warn|MediaFileDeletionService|Series' root folder (/media/series-sonarr) doesn't exist. +``` + +🔴 **Причина: Radarr/Sonarr хранят `rootfolder` в своей БД.** Папку удалили → +`MediaFileDeletionService` отказывается работать с файловыми записями. + +⚠️ У **Radarr список rootfolders теперь ПУСТ** (API вернул ничего). У Sonarr остался +`/media/series-sonarr` (id=1). + +**Все DELETE вернули 409 — ни одна запись не удалена.** + +### Пути решения (предложены Alex'у, ответа нет) + +1. **Пересоздать пустые root-папки → удалить записи через API → убрать папки.** + `mkdir -p /media/{movies-radarr,series-sonarr}` → DELETE работает → `sudo rmdir`. + Файлы не возвращаются. **~5 минут.** *(Рекомендовано.)* +2. **Оставить фантомы.** На диск и Lampa не влияют, но при следующем скачивании стек + скажет «root folder doesn't exist» — надо добавлять новую папку в UI. +3. **Вручную через UI** — снести root folder в Settings → Root Folders, пересоздать. + +Готовый скрипт для пути 1: `/tmp/step10_fix.sh` (создаёт папки → DELETE все фантомы → +удаляет временные папки). **Не запускался.** + +### Осталось + +- [ ] **Шаг 5b** — снять 12 + 57 фантомных записей (ждёт решения Alex'а по трём путям выше) +- [ ] **Шаг 6** — приёмка Alex'ом (`df`, Jellyfin, UI) +- [ ] **Шаг 6f** — коммит vault +- [ ] Проверить библиотеки Jellyfin (команда ушла в таймаут апрува, не выполнена) +- [ ] Уборка: `rm -rf /Users/admin/personal` (артефакт записи по относительному пути) + +## ⏸ Архив: состояние ДО удаления (см. выше актуальное) + ### Шаг 4 — удаление файлов ⏳ МАНИФЕСТ ГОТОВ, ждёт подтверждения **41 путь на диске, 693,3 ГБ.** Все пути проверены `-e` → отсутствующих 0. @@ -449,24 +595,27 @@ Lampa **не участвуют**. Поэтому 24 «watchlist»-фильма - [x] **Диагностика Transmission** — 249 раздач, классифицированы - [x] **Шаг 6a — дамп API Radarr/Sonarr** ✅ `/tmp/arr-backup-20260922-215428/` - [x] **Шаг 6b — стоп Transmission** ✅ `Exited (0)`; план чистки: 240 раздач, 1769 ГБ -- [ ] Шаг 6b-2 — удалить 240 раздач из Transmission (файлы состояния, контейнер стоит) -- [ ] Шаг 6c — удаление файлов: манифест 41 путь / 693,3 ГБ готов, **ждёт ответа на 2 вопроса** -- [ ] Шаг 6d — rescan Radarr/Sonarr/Jellyfin -- [ ] Шаг 6e — проверка df/docker + приёмка Alex'ом -- [ ] Шаг 6f — обновить доки + коммит +- [x] **Шаг 6b-2 — удалить раздачи из Transmission** ✅ **249 → 9** (три прохода, см. «Шаг 3») +- [x] **Шаг 6c — удаление файлов** ✅ **693 ГБ**, диск 477 ГБ → 1,2 ТБ свободно +- [x] **Шаг 6d — rescan Radarr/Sonarr** ✅ выполнен (фантомы остались — см. 5b) +- [ ] **Шаг 6e — снять фантомы arr (409)** ⏳ ждёт выбора Alex'а из 3 путей +- [ ] Шаг 6f — приёмка Alex'ом (`df`, Jellyfin, UI) +- [ ] Шаг 6g — обновить доки + коммит - [ ] Уборка: `rm -rf /Users/admin/personal` (побочный артефакт, см. ниже) ## 🎯 ГДЕ МЫ СЕЙЧАС (для следующей сессии) -**Transmission остановлен. Файлы не удалены. Манифест построен и верифицирован.** +**Медиа удалено (693 ГБ). Transmisson чист (9 раздач). Остались фантомы в arr-стеке.** Чтобы продолжить: -1. Получить от Alex ответ на 2 вопроса выше (7 папок мультфильмов; доксериалы). -2. Собрать финальный манифест (`/tmp/step3b.sh`, добавить 7 путей при необходимости). -3. Удалить 240 раздач из Transmission (контейнер остановлен → файлы состояния). -4. `xargs rm` по манифесту с логом. -5. `docker start transmission`, rescan Radarr/Sonarr/Jellyfin. -6. `df -h` до/после → приёмка Alex'ом → коммит. +1. Получить от Alex выбор из 3 путей решения 409 (см. «Пути решения» выше). + Рекомендация — путь 1, скрипт `/tmp/step10_fix.sh` готов. +2. Если путь 1: `bash /tmp/step10_fix.sh` → проверить, что `hasFile` = 0 у всех. +3. Проверить библиотеки Jellyfin (`:8096`) — смотрит ли он в `media/`. +4. Приёмка Alex'ом → коммит vault. + +⚠️ **Манифест уже отработал — повторно не запускать.** `/tmp/delete-manifest.txt` +хранится для истории; путь в нём указывает на удалённые объекты. ⚠️ **`rm -rf` на папки `movies`/`movies-radarr`/`series`/`series-sonarr` целиком** — именно так устроен манифест (41 путь = 4 папки + 37 папок мультфильмов). diff --git a/personal/tech/kraken-truenas-media-copies.md b/personal/tech/kraken-truenas-media-copies.md index 99661c59..71c27ee7 100644 --- a/personal/tech/kraken-truenas-media-copies.md +++ b/personal/tech/kraken-truenas-media-copies.md @@ -77,6 +77,27 @@ Alex запросил подтверждение перед удалением: **Итог: из ~104 мультфильмов на Кра́кене копия есть у ~40, у ~64 — нет.** +## ✅ Как это использовалось (2026-09-22, выполнено) + +Результат сверки лёг в основание списка на снос — [[personal/plans/kraken-media-inventory-cleanup]]: + +| Папка Кра́кена | Копии на TrueNAS | Решение | +|---|---|---| +| `documentaries` (71,9 ГБ) | **нет** | 🔴 **оставлено** — уникально | +| `documentaries-series` (235,6 ГБ) | **нет** | 🔴 **оставлено** — уникально | +| `cartoons` группы 3 (30,1 ГБ, 14 поз.) | ✅ есть | снесено | +| `cartoons` группа 4 (192,6 ГБ, 30 поз.) | ❌ нет | снесено (решение Alex'а — копий не делать) | + +⚠️ **Группа 4 удалена БЕЗ копий** — Alex подтвердил явно. Современная иностранная анимация +(`luca`, `encanto`, `elemental`, `super mario`, `turning red`, `corpse bride`, `lightyear`, +`inside out`, `миграция`, `кот в сапогах 2011`, `the iron giant`) и советская классика +(`маугли 1973`, `снежная королева 1957`, `Тайна третьей планеты`, `Доктор Айболит`, +`Врунгель`, `Neznaika.na.lune`, `Bremenskie.muzykanty`) **существуют теперь только на TrueNAS +там, где совпало**, и нигде — там, где не совпало. + +**Вывод для будущих проверок:** сверка копий — необходимый шаг, но вердикт по спорным +позициям всегда за Alex'ом. Наличие/отсутствие копии — вход, не решение. + ## Метод 1. Обход TrueNAS: `find /mnt/RED_2TB/storage/{Cartoons,cartoons-series,documentaries,documentaries-series,Movies,series}` diff --git a/personal/tech/skill-lampac-kraken-deploy.md b/personal/tech/skill-lampac-kraken-deploy.md index 6344729e..e7c9e6f5 100644 --- a/personal/tech/skill-lampac-kraken-deploy.md +++ b/personal/tech/skill-lampac-kraken-deploy.md @@ -108,6 +108,41 @@ related: 828 ГБ — 7 папок мультфильмов не сматчились буквально. Всегда `[ -e "$path" ]` каждую строку + печатать `du -sb` построчно. +## Удаление медиа — ВЫПОЛНЕНО 2026-09-22 (питфоллы исполнения) + +Итог: удалено **693 ГБ**, диск **477 ГБ → 1,2 ТБ**, Transmission **249 → 9 раздач**. +Полный журнал: [[personal/plans/kraken-media-inventory-cleanup]], раздел «ВЫПОЛНЕНО». + +29. 🔴 **`torrent-remove` по id НЕ работает — Transmission пересоздаёт раздачи.** + Снял 240 id → осталось **17, а не 9**: восемь вернулись с **новыми id** + (223, 233, 234, 236, 238, 241, 244, 247). Долечены вторым проходом **по `downloadDir`**, + третий проход — `Babylon` (`/downloads/radarr`, префикс не в фильтре). + **Правило: чистить по `downloadDir`, не по id, и пересчитывать после каждого прохода.** + Все префиксы учесть: `/downloads/complete` И `/downloads/radarr` И `/downloads/complete/radarr`. + `"delete-local-data": false` — снимает запись, файлы не трогает (их удаляет манифест). +30. 🔴 **`rm -rf` каталога верхнего уровня → `Permission denied` на САМОМ каталоге.** + Содержимое удаляется (оно `kraken:kraken`), а каталог `root:root`. Второй проход + `sudo rmdir` дочищает (каталоги уже пусты). Скрипт должен уметь оба уровня: + содержимое — `rm -rf`, сам каталог — `sudo rmdir`. +31. 🔴🔴 **После удаления root-папок arr отдаёт 409 на любой DELETE файловой записи.** + ``` + DELETE /radarr/api/v3/moviefile/ → 409 + DELETE /sonarr/api/v3/episodefile/ → 409 + {"message":"Movie's root folder (/media/movies-radarr) doesn't exist."} + Warn|MediaFileDeletionService|Movie's root folder (...) doesn't exist. + ``` + **Причина: `rootfolder` хранится в БД arr.** Удалил папку — `MediaFileDeletionService` + отказывается работать с записями. **Rescan НЕ помогает** (файлы исчезли ДО скана): + осталось 12 фильмов и 57 эпизодов фантомами. У Radarr список rootfolders стал ПУСТ. + **Лечение:** пересоздать пустые root-папки → DELETE записей → `sudo rmdir`. + **Общее правило: дамп API ДО удаления; если сносишь корневую папку библиотеки — + планируй чистку записей в том же проходе, потом уже не получится.** +32. ⚠️ **rescan командой, а не через UI:** + `POST /radarr/api/v3/command {"name":"RescanMovie"}`, + `POST /sonarr/api/v3/command {"name":"RescanSeries"}` (с `-L` и `X-Api-Key`). +33. ⚠️ **Jellyfin на Кра́кене жив** (`/health` → 302). Порт `:8096`. Проверять библиотеки + до/после — единственная реальная связь `media/` с просмотром. + ## Установка Lampa на ТВ (сжато) ```bash @@ -145,10 +180,13 @@ ssh kraken 'sudo rm -rf /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e8 - Лимит кэша TorrServer — дефолт (`UseDisk: false`, 96 МБ RAM). ⚠️ Это и есть причина, что Lampa играет с торрентов, а не с диска — менять только осознанно. -- 🔴 **Удаление медиа на Кра́кене — список УТВЕРЖДЁН** (111 позиций, 828,3 ГБ), ждёт - ответа по категории C Transmission. Детали: [[personal/plans/kraken-media-inventory-cleanup]]. +- ✅ **Удаление медиа на Кра́кене ВЫПОЛНЕНО** (2026-09-22): 693 ГБ, диск 477 ГБ → 1,2 ТБ, + Transmission 249 → 9 раздач. Детали: [[personal/plans/kraken-media-inventory-cleanup]]. +- 🔴 **НЕ ЗАКРЫТО: 12 фантомных фильмов в Radarr + 57 эпизодов в Sonarr.** DELETE через API + → **409** (`root folder doesn't exist`). Решение предложено, ответа Alex'а нет. + Скрипт `/tmp/step10_fix.sh` готов, не запускался. Питфолл 31 выше. - ⚠️ Проверка библиотек Jellyfin на Кра́кене перед удалением — **не сделана** - (команда ушла в таймаут апрува). + (команда ушла в таймаут апрува). Jellyfin жив: `/health` → 302. - ⚠️ Уборка: каталог `/Users/admin/personal/` (артефакт записи по относительному пути) — удалить. - Шаг 7 — watchlist в UI Lampa: [[personal/plans/lampac-watchlist-plugin]].