Files
obsidian-vault/personal/plans/kraken-media-inventory-cleanup.md
T

739 lines
45 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
created: '2026-09-22'
namespace: personal
related:
- '[[personal/plans/lampac-watchlist-plugin]]'
- '[[personal/plans/lampac-kraken]]'
- '[[personal/tech/lampac-deployment]]'
- '[[personal/tech/kraken-truenas-media-copies]]'
status: deleted-765gb-done-arr-phantoms-cleared-jellyfin-rescan-pending
tags:
- kraken
- media
- cleanup
- watchlist
- lampac
- disk-space
- transmission
- truenas
- radarr
- sonarr
- jellyfin
title: Кра́кен — инвентаризация медиа под удаление
type: plan
updated: '2026-09-22'
---
# Кра́кен — инвентаризация медиа под удаление
> Составлен 2026-09-22. Alex: «вообще все. нужна полная инвентаризация что можно сносить, а что нельзя».
> Итог: **802 файла, 233 позиции, 1 236 ГБ.** В watchlist (Lampa покажет) — 29 позиций / 456 ГБ.
> Не в watchlist — 204 позиции / 780 ГБ. **Точных дублей — 46 групп, зря занято 89,2 ГБ.**
>
> ✅ **ВЫПОЛНЕНО 2026-09-22: освобождено 765 ГБ.** Диск 1,3 ТБ → **511 ГБ занято / 1,2 ТБ свободно**.
> Transmission **249 → 9** раздач. Arr-фантомы сняты (Radarr 12 → 0, Sonarr 57 → 0).
> Осталось: **rescan Jellyfin** + уборка `/Users/admin/personal/`.
>
> 🔴 **Цифры watchlist-матча ЗАНИЖЕНЫ — требует пересчёта.** Alex поймал 4 позиции,
> ошибочно записанные в «не в watchlist», хотя они В watchlist (см. раздел «Матч»).
>
> 🔴 **Lampa играет с торрентов, НЕ с диска Кра́кена** (TorrServer `UseDisk: false`).
> Файлы в `media/` в воспроизведении Lampa не участвуют — снос их Lampa не ломает.
## 🔴 Ошибка матча (найдена Alex'ом 2026-09-22)
Первый прогон сравнивал имя файла **только с русским `name`** watchlist-позиции.
Файлы, названные по **оригиналу**, не находились. Промахи:
| Файл на диске | ГБ | В watchlist | Русское `name` | TMDB |
|---|---|---|---|---|
| `Bram.Stoker's Dracula.1992` | 18.04 | ✅ | «Дракула» | 6114 |
| `The.Crow.1994` | 17.45 | ✅ | «Ворон» | 9495 |
| `despicable.me.4.2024` | 2.18 | ✅ | «Гадкий я 4» | 519182 |
| `Вивариум_2019_BDRip` | 1.46 | ✅ | «Вивариум» | 458305 |
**27,3 ГБ записано как «не в watchlist» ошибочно — эти 4 сносить НЕЛЬЗЯ.**
Правильно матчить против **обоих** полей (`name` И `original`) + **год ±1**.
Год обязателен: в watchlist «Дракула» стоит трижды (1992 / 2014 / 2025), а
`inside out (2015)` ложно матчится с «Головоломка 2» (2024) — разные фильмы.
⚠️ `Oldboy` (28.65 ГБ) и `Project Hail Mary` (28.12 ГБ) — **проверены отдельно,
их в watchlist правда НЕТ** (0 совпадений по обоим запросам в `watchlist.json`).
Они в Radarr, но в список не занесены. Это не ошибка матча.
Полный список перепроверки: `/Users/admin/kraken-missed-matches.json`.
Скрипты: `/tmp/kraken_fix2.py` (фразовое равенство по `original` + год),
`/tmp/kraken_why.py` (проверка конкретных тайтлов).
## Метод
1. `find` по `/srv/...6194539b.../media` → 802 видеофайла с размерами.
2. Группировка в «позиции»: папка первого уровня + подпапка; файлы в корне — каждая своя позиция;
`downloads/*` — по полному пути папки-раздачи (сезонные паки).
3. Сверка с `watchlist.json` (376 позиций). Первый прогон — строгое равенство по русскому
`name` (убраны год, качество, релиз-группа, расширение, транслит-шум). Подстрочный матч
давал ложные срабатывания: единственный файл 1.46 ГБ «Вивариум» склеивался в группу на 135 ГБ.
⚠️ **Строгое равенство по `name` тоже неполно** — пропускает файлы, названные по оригиналу.
Проверять против `name` И `original`, со сверкой года. Детали и промахи — в разделе
«Ошибка матча» выше.
4. TMDB-ID брался из `href` вида `https://www.themoviedb.org/movie/NNN` — в `watchlist.json`
его отдельным полем нет.
Артефакты на Mac: `/Users/admin/kraken-inventory.json` (полные данные),
`kraken-inventory.csv` (таблица), `kraken-dupes.json` (дубли), `kraken-table-AB.md`.
## Сводка
| Папка | В watchlist | Не в watchlist |
|---|---|---|
| `movies` | 14 / 163.0 ГБ | 37 / 146.7 ГБ |
| `movies-radarr` | 8 / 108.8 ГБ | 3 / 67.4 ГБ |
| `series-sonarr` | 3 / 105.0 ГБ | 1 / 11.1 ГБ |
| `downloads` | 1 / 13.8 ГБ | 4 / 64.8 ГБ |
| `documentaries-series` | 0 | 20 / 235.6 ГБ |
| `documentaries` | 0 | 25 / 71.9 ГБ |
| `cartoons-series` | 1 / 51.3 ГБ | 17 / 53.3 ГБ |
| `cartoons` | 2 / 14.0 ГБ | 96 / 125.8 ГБ |
| `series` | 0 | 1 / 3.6 ГБ |
🔴 **Radarr/Sonarr индексируют только 252 ГБ из 1 236.** Этой рухляди нет в стеках.
## 🔴 Главная находка: дубли `downloads/complete` (89,2 ГБ)
`downloads/complete/sonarr/` — **завершённые раздачи, не удалённые после импорта**.
Файлы совпадают с библиотекой **по имени и размеру байт-в-байт**:
| Раздача в `downloads/complete` | ГБ | Копия в библиотеке |
|---|---|---|
| `Stranger Things.s04...` | 13.06 | `series-sonarr/Stranger Things/Season 4` |
| `Очень странные дела.S03...` | 21.33 | `series-sonarr/Stranger Things/Season 3` |
| `Our.Flag.Means.Death.S01` | 19.31 | `series-sonarr/Our Flag Means Death/Season 1` |
| `Our.Flag.Means.Death.S02` | 13.81 | `series-sonarr/Our Flag Means Death/Season 2` |
| `Kiberderevnya.S01` | 11.11 | `series-sonarr/The Cyberfarm/Season 1` |
| `Life.Is.Beautiful.1997` | 10.62 | `movies-radarr/Life Is Beautiful (1997)` × `cartoons/life is beautiful` |
🔴 **`Life Is.Beautiful` лежит ТРИ раза** — `movies-radarr` + `cartoons` + третья копия.
Это уже не staging, а свалка: фильм в `cartoons` — ошибка раскладки.
→ `downloads/complete` (78,6 ГБ) — **удалять целиком, если в библиотеке 24 ГБ S03 не нужны**
(см. ниже про ложный дубль S03).
## Ложный дубль: Stranger Things S03
`downloads/complete/.../Очень странные дела.S03...` и `series-sonarr/Stranger Things/Season 3`
совпадают байт-в-байт. Но в `series-sonarr` **отсутствует S01** и есть только S02–S04 —
то есть S03 в библиотеке **начал формироваться из этой же раздачи**. Удалять `downloads`-копию
можно, но только убедившись, что Sonarr видит S03 как отсутствующий/присутствующий.
## A. В WATCHLIST — Lampa покажет (29 позиций, 456.0 ГБ) — НЕ сносить
| Тайтл на диске | Папка | Файлов | ГБ | TMDB | Название в watchlist |
|---|---|---|---|---|---|
| Stranger Things | `series-sonarr` | 25 | 67.92 | 66732 | Очень странные дела |
| смешарики webrip 1080p | `cartoons-series` | 210 | 51.32 | 107, 402 | сборник (ложный матч по частям) |
| Our Flag Means Death | `series-sonarr` | 18 | 33.12 | 109939 | Наш флаг означает смерть |
| Whiplash (2014) | `movies-radarr` | 1 | 23.66 | 244786 | Одержимость |
| секретный агент | `movies` | 1 | 21.51 | 1220564 | Секретный агент |
| семья в аренду | `movies` | 1 | 19.91 | 1208348 | Семья в аренду |
| The Drama (2026) | `movies-radarr` | 1 | 19.16 | 1325734 | Вот это драма! |
| отпуск на двоих | `movies` | 1 | 17.85 | 1034716 | Отпуск на двоих |
| They Will Kill You (2026) | `movies-radarr` | 1 | 17.24 | 1292695 | Они придут за тобой |
| под огнём | `movies` | 1 | 16.50 | 1241436 | Под огнём |
| я ругаюсь | `movies` | 1 | 15.82 | 1317149 | Я ругаюсь |
| Our.Flag.Means.Death.S02 (дубль) | `downloads` | 8 | 13.81 | 109939 | Наш флаг означает смерть |
| гадкая сестра | `movies` | 1 | 13.50 | 1284120 | Гадкая сестра |
| сират | `movies` | 1 | 13.39 | 1151272 | Сират |
| охота на воров 2: пантера | `movies` | 1 | 13.28 | 604685 | Охота на воров 2: Пантера |
| американская история x | `movies` | 1 | 12.80 | 73 | Американская история X |
| Scream (1996) | `movies-radarr` | 1 | 12.39 | 4232 | Крик |
| Dead Poets Society (1989) | `movies-radarr` | 1 | 12.28 | 207 | Общество мёртвых поэтов |
| Leave No Trace (2018) | `movies-radarr` | 1 | 11.06 | 443463 | Не оставляй следов |
| the.iron.giant.1999... | `cartoons` | 1 | 10.61 | 10386 | Стальной гигант |
| Funhouse (2019) | `movies-radarr` | 1 | 8.87 | 590009 | Эксперимент «За стеклом» |
| смерть единорога | `movies` | 1 | 7.97 | 1153714 | Смерть Единорога |
| список заветных желаний | `movies` | 1 | 5.88 | 1254786 | Список заветных желаний |
| Mortal Kombat II (2026) | `movies-radarr` | 1 | 4.15 | 931285 | Мортал Комбат 2 |
| Rick and Morty | `series-sonarr` | 4 | 3.98 | 60625 | Рик и Морти |
| Тайна третьей планеты (1981) | `cartoons` | 1 | 3.38 | 49802 | Тайна третьей планеты |
| Van Helsing (2004) Fullscreen DVDRip | `movies` | 1 | 2.94 | 7131 | Ван Хельсинг |
| Death.on.the.Nile.2022.HDRip | `movies` | 1 | 1.46 | 505026 | Смерть на Ниле |
| гладиатор | `movies` | 1 | 0.22 | 98 | Гладиатор |
🔴 **Список НЕПОЛНЫЙ — минимум 4 позиции пропущены матчем** (перечислены в разделе
«Ошибка матча»): `Bram.Stoker's Dracula.1992` (18.04), `The.Crow.1994` (17.45),
`despicable.me.4.2024` (2.18), `Вивариум_2019` (1.46). Итого реально в watchlist
**≥33 позиции / ≥483 ГБ**. После пересчёта таблицу заменить.
⚠️ **«смешарики webrip 1080p»** — 210 файлов в одной папке. Это сборник; совпадения с watchlist
(TMDB 107/402) — артефакт нормализации по отдельным файлам, не реальный матч.
Разобрать отдельно, если позиция пойдёт под нож.
⚠️ **В watchlist нет ни одного тайтла из `documentaries*`** — 45 позиций / 307 ГБ лежат вне списка.
## B. НЕ В WATCHLIST (204 позиции, 780.1 ГБ)
Полная таблица всех 204 строк — в артефактах (`kraken-inventory.csv`).
Здесь — верхушка по размеру, остальное `cartoons` по 0,04–3 ГБ (советская анимация).
### B1. Дубли `downloads/complete` — 78,6 ГБ (удалять первыми)
| Раздача | ГБ | Копия есть? |
|---|---|---|
| `Очень странные дела.S03.WEB-DL.1080.HDR` | 21.33 | ✅ в `series-sonarr` |
| `Our.Flag.Means.Death.S01.2022...` | 19.31 | ✅ в `series-sonarr` |
| `Our.Flag.Means.Death.S02.WEBDL...` | 13.81 | ✅ в `series-sonarr` |
| `Stranger Things.s04.WEB-DL(HEVC)...` | 13.06 | ✅ в `series-sonarr` |
| `Kiberderevnya.S01.2023...` | 11.11 | ✅ в `series-sonarr` (`The Cyberfarm`) |
### B2. Не в watchlist, не дубли — крупное (кандидаты)
| Тайтл | Папка | ГБ | Комментарий |
|---|---|---|---|
| Prehistoric.Planet.2022.S01 + S02 | `documentaries-series` | 37.45 + 17.36 | доксериал |
| пингвины. шпион в толпе | `documentaries-series` | 34.75 | доксериал |
| Oldboy (2003) | `movies-radarr` | 28.65 | в Radarr, не в watchlist |
| Project Hail Mary (2026) | `movies-radarr` | 28.12 | в Radarr, не в watchlist |
| смешарики. новый сезон. 2020 | `cartoons-series` | 26.43 | 113 эпизодов |
| жизнь птиц 1998 | `documentaries-series` | 20.59 | доксериал |
| маленькие гиганты 2014 | `documentaries` | 20.57 | |
| кот в сапогах 2011 | `cartoons` | 19.92 | |
| the secret life of elephants | `documentaries-series` | 19.90 | доксериал |
| ~~Bram.Stoker's Dracula.1992~~ | `movies` | 18.04 | 🔴 **В WATCHLIST** — «Дракула» 1992, TMDB 6114 |
| ~~The.Crow.1994~~ | `movies` | 17.45 | 🔴 **В WATCHLIST** — «Ворон», TMDB 9495 |
| гиганты моря 2011 | `documentaries-series` | 16.40 | доксериал |
| tiger spy in the jungle s01 | `documentaries-series` | 16.30 | доксериал |
| it was just an accident | `movies` | 12.78 | |
| F1.The.Movie.2025 | `movies` | 11.99 | |
| король лев (1994) | `cartoons` | 11.97 | |
| The Cyberfarm | `series-sonarr` | 11.11 | в Sonarr, не в watchlist |
| Life Is Beautiful (1997) | `movies-radarr` + `cartoons` | 10.62 × 2 | 🔴 дубль |
| Brassic S01 | `series` | 3.62 | |
| ну, погоди! | `cartoons-series` | 3.74 | 18 выпусков |
### B3. `cartoons` — 96 позиций, 125,8 ГБ
Советская и зарубежная анимация, преимущественно 1944–1990, файлы 0,04–3 ГБ.
В watchlist их нет. Список целиком — в CSV.
## ✅ РЕШЕНИЕ ALEX: список на снос УТВЕРЖДЁН (2026-09-22)
Alex подтвердил все три вопроса: группа 4 (копий нет) — сносим, сериалы — целиком,
короткометражки — оставить. Плюс отдельное указание:
> «не забудь почистить transmission сначала - все что сейчас data missing + все что удаляется»
### Утверждённый список — 111 позиций, 828,3 ГБ
| № | Группа | Позиций | ГБ |
|---|---|---|---|
| 1 | Фильмы (полный метр) — `movies` + `movies-radarr` | 62 | 485,9 |
| 2 | Сериалы (все) — `series` + `series-sonarr` | 5 | 119,7 |
| 3 | Мультфильмы — есть копия на TrueNAS | 14 | 30,1 |
| 4 | Мультфильмы полный метр (≥0,8 ГБ), копии нет | 30 | 192,6 |
| | **ИТОГО** | **111** | **828,3** |
**НЕ в списке:** короткометражки `cartoons` <0,8 ГБ — 72 позиции, 21,7 ГБ
(ёжик в тумане, мойдодыр, чиполлино и пр.) — оставлены по решению Alex.
Артефакт: `/Users/admin/kraken-delete-draft.json`
Скрипт классификации: `/tmp/kraken_del.py`
### Сверка с TrueNAS — сделана
Доксериалы/документалки копий **не имеют** (307 ГБ уникальны). Мультфильмы — копия
есть у ~40 из ~104; группа 3 (30,1 ГБ) — именно те, что закрыты. Детали и метод:
[[personal/tech/kraken-truenas-media-copies]].
## ✅ ШЕСТЬ ШАГОВ — ВЫПОЛНЕНО 4 из 6 (2026-09-22)
### Шаг 1 — дамп API Radarr/Sonarr ✅ ВЫПОЛНЕН
```
/tmp/arr-backup-20260922-215428/
radarr-movies.json 170 КБ
radarr-queue.json 129 Б
radarr-status.json 868 Б
sonarr-series.json 55 КБ
sonarr-queue.json 129 Б
sonarr-status.json 836 Б
```
| | Значение |
|---|---|
| Radarr | **6.4.4.10685**, 34 фильма, **12 с файлами**, очередь 0 |
| Sonarr | **4.0.20.3014**, 13 сериалов, очередь 0 |
🔴 **У Sonarr 13 сериалов, но файлы есть только у 4** (Our Flag Means Death,
Stranger Things, The Cyberfarm, Rick and Morty). Остальные 9 — **фантомы**
(записи без файлов): `Magical Police Department` · `The Meeting Place Cannot be Changed` ·
`MOZU` · `Delicious in Dungeon` · `Double or Quits` · `Severance` · `Futurama` ·
`True Detective` · `Brassic`.
⚠️ **`Brassic`** — в Sonarr есть запись, на диске `/media/series` лежит `Brassic (Season 1)`
(3,62 ГБ). Файлы вне библиотеки Sonarr — рассинхрон раскладки.
### Шаг 2 — стоп Transmission ✅ ВЫПОЛНЕН
`sudo docker stop transmission` → `Exited (0)`. Обратно поднимать после удаления раздач.
### Шаг 3 — чистка раздач ⏳ ГОТОВ к запуску (план построен, см. выше)
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.
| Путь | ГБ |
|---|---|
| `media/movies` | 309,69 |
| `media/movies-radarr` | 234,59 |
| `media/series` | 3,62 |
| `media/series-sonarr` | 116,14 |
| 37 папок мультфильмов (группы 3+4) | 29,3 |
| **ИТОГО** | **693,3** |
**Верификация состава `movies`/`movies-radarr`:** сверены все 51 + 11 позиций
против утверждённого списка — **все утверждены**, лишнего нет.
⚠️ **В `movies/` есть «сироты» — `.nfo`, `.srt`, постеры без видео:**
`Master.i.Margarita.2023` · `Pchelovod.2024` · `Планета обезьян Новое царство_2024` ·
`Леон (авторская версия)` · `Самолетом, поездом, машиной (1987)` · `Ворон_2024`.
Самого фильма нет, инвентарь (считает только видеофайлы) их не видел.
Удалять их правильно — это мусор от ранее удалённых фильмов.
### ⚠️ Расхождение 693 ГБ против 828 ГБ — РАЗОБРАНО
В манифест не попали **7 папок мультфильмов (42,1 ГБ)** из-за несовпадения имён папок
в скрипте: `смешарики. новый сезон. 2020` (26,43) · `Corpse.Bride.2005` (7,90) ·
`Тайна третьей планеты (1981)` (3,38) · `чебурашка` (1,97) ·
`The.Super.Mario.Bros.Movie.2023` (1,46) · `the.secret.life.of.pets.(480p)` (0,94).
**Это баг имён в манифесте, не логики.** Добавить — итог станет **735,4 ГБ**.
Остальные ~72 ГБ расхождения — короткометражки, оставленные по решению Alex.
Артефакты: `/tmp/delete-manifest.txt` (41 путь), `/tmp/step3b.sh` (сбор + верификация),
`/tmp/step3_manifest.sh` (первая версия), `/tmp/verify_movies.py` (сверка состава),
`/tmp/chk.py` (список путей cartoons).
### Шаги 5–6 — rescan + проверка ⏳ НЕ НАЧАТЫ
## ⚠️ Открытые вопросы, блокирующие шаг 4 (заданы Alex'у)
1. **Добавить 7 пропущенных папок мультфильмов?** Да → 735,4 ГБ. Нет → 693,3 ГБ.
2. **`documentaries-series` (235,6 ГБ) и `documentaries` (71,9 ГБ) — не в списке,
копий на TrueNAS нет.** Точно оставляем?
## 🔴 Порядок удаления (утверждён) — 6 шагов
1. **Дамп API** Radarr + Sonarr в файл (`/tmp/radarr-dump-*`, `/tmp/sonarr-dump-*`).
2. **Стоп `transmission`** — чтобы не качал в удаляемые папки.
3. **Чистка Transmission** — удалить раздачи категорий A (data missing) и C
(в списке на снос). См. раздел «Transmission» ниже.
4. **Удаление файлов** по 111 позициям — список путей, `xargs rm`, лог каждой позиции.
5. **Rescan** библиотек Radarr/Sonarr (**с ресканом** — указание Alex) + Jellyfin.
6. **Проверка:** `df -h` до/после, `docker ps`, Jellyfin `/health`. Затем приёмка Alex'ом.
## Transmission — состояние на 2026-09-22 (249 раздач, 1,92 ТБ заявлено)
RPC: `http://127.0.0.1:9091/transmission/rpc`, **авторизация не требуется**
(`rpc-authentication-required: false`). Нужен session-id из заголовка — забирать
через `curl -i` и повторять POST с `X-Transmission-Session-Id`.
| Кат. | Раздач | ГБ | Что |
|---|---|---|---|
| **A. data missing** | 21 | 561,6 | `No data found` — файлов нет, раздачи остались |
| **B. no space** | 8 | 88,8 | `Unable to save resume file: No space left on device` |
| **C. в списке на снос** | 204 | 1005,6 | путь под удаление |
| **E. прочее** | 16 | — | |
### 🔴 Категория A: файлы уже удалены, раздачи висят
Babylon 92,01 · Schindler's List 89,35 · Midsommar 85,59 · Triangle of Sadness 79,68 ·
Chaos Walking 58,36 · Oldeuboi 28,65 · Начало 24,25 · Одержимость (Whiplash) 23,66 ·
Леон 19,73 · Scream 12,39 · Dead Poets Society 12,28 · Leave No Trace 11,06 ·
Funhouse 8,87 · Мортал Комбат 2 4,15 · + 7 мелких
Также 6 раздач без файлов в `downloads/complete/radarr` и `downloads/radarr` (9–98 ГБ).
Это «мёртвый вес» в списке — удалять из Transmission без потерь.
### ✅ РЕШЕНИЕ ALEX по категории C и недокачанным (2026-09-22)
> «да. плюс недакачанные если в transmission есть останавливай и тоже сноси. C - целиком»
Правила удаления раздач (утверждены):
```
data_missing (ERR=3 «No data found») -> снести из списка
путь в delete_set (C) -> снести ЦЕЛИКОМ
status=0 (stopped) и percentDone < 100% -> снести (недокачанные)
```
### План удаления раздач — посчитан
| | Раздач | ГБ |
|---|---|---|
| **СНЕСТИ** | **240** | **1 769,0** |
| оставить | 9 | 20,0 |
По причинам: `data_missing` 21 · `in_delete_set` 230 · `stopped_incomplete` 161
(пересечения — одна раздача может попасть в несколько причин).
**Остаются 9 раздач** — только документалки вне списка сноса:
`Sky.Sharks.2022` · `The.Way.of.the.Cheetah` · `Thailands.Wild.Cats` ·
`Jade.Eyed.Leopard` · `The.Frozen.Kingdom.of.the.Snow.Leopard` · `Russias.Wild.Tiger` ·
`The.Real.Black.Panther` · `Тайная жизнь собак` · `King Cobra`
(все `/media/documentaries*`, 100%, сидируются).
Артефакты: `/tmp/tr-list.json` (сырой ответ API), `/Users/admin/transmission-classified.json`,
`/Users/admin/transmission-remove-plan.json`, `/tmp/tr-remove-ids.txt` (240 id через запятую).
Скрипты: `/tmp/tr_diag.sh` (сбор, чтение), `/tmp/tr_classify.py` (классификация),
`/tmp/step2_plan.py` (план удаления).
### ✅ Transmission ОСТАНОВЛЕН (2026-09-22)
```
sudo docker stop transmission → transmission Exited (0)
```
⚠️ **Следствие:** RPC (`:9091`) недоступен, пока контейнер стоит. Правки состояния —
через файлы в `/srv/.../docker/transmission/` (bind-mount → `/config` в контейнере).
`torrents/` + `resume/` + `settings.json`.
### ⚠️ Питфолл: Radarr/Sonarr API и URL base
`curl http://127.0.0.1:7878/api/v3/...` → **HTTP 307** (редирект, тело пустое).
У обоих установлен `UrlBase`: `/radarr` и `/sonarr` (порт TorrServer-транзит: контейнеры
публикуют `7878->7878` и `8989->8989`, но приложение слушает под префиксом).
**Правильно:**
```bash
curl -sL -H "X-Api-Key: $KEY" "http://127.0.0.1:7878/radarr/api/v3/movie"
curl -sL -H "X-Api-Key: $KEY" "http://127.0.0.1:8989/sonarr/api/v3/series"
```
Ключ: `sudo grep -oE '<ApiKey>[^<]+' <config dir>/config.xml | sed 's/<ApiKey>//'`
(32 символа). Без `-L` и без префикса ответ пустой — легко принять за «API лежит».
Скрипт: `/tmp/step1c.sh`
### 🔴 TorrServer/Lampa к `media/` отношения не имеют
Проверено 2026-09-22 (`/ts/settings` на `:9118`):
```
UseDisk: false → на диск не пишет
TorrentsSavePath: "" → папки для сохранения нет
CacheSize: 100663296 → 96 МБ, только RAM
```
**Lampa играет с торрентов напрямую.** Файлы в `media/` на Кра́кене в воспроизведении
Lampa **не участвуют**. Поэтому 24 «watchlist»-фильма в списке на снос — не потеря
для Lampa. Alex: «она же не с кракена играет! ... она с торрентов играет».
⚠️ **Мой ранний вывод «снесёшь то, что играет в Lampa» был НЕВЕРЕН** — исправлено.
⚠️ **Но:** на Кра́кене работает **Jellyfin** (`:8096`, Up). Если он смотрит в `media/` —
снос ломает его библиотеку. Rescan Jellyfin в шаге 5 обязателен; перед удалением
проверить библиотеки Jellyfin (команда ушла в таймаут апрува, не выполнена).
## Что дальше
Удаление — **отдельный шаг, ждёт решения Alex'а по конкретным позициям.**
Правила при удалении:
1. `downloads/complete` — самый безопасный первый кандидат (78,6 ГБ, всё есть в библиотеке).
2. `Life Is Beautiful` — снести две лишние копии из трёх, оставить одну.
3. `movies-radarr`/`series-sonarr` — если удалять, то через API (иначе Radarr будет держать
фантом). `deleteFiles=true` проверять, что путь внутри библиотеки.
4. Дамп `radarr`/`sonarr` API в файл перед любой операцией.
## Статус
- [x] Шаг 1 — выгрузка списка (802 файла)
- [x] Шаг 2 — группировка (233 позиции)
- [x] Шаг 3 — сверка с watchlist (29 в списке / 204 нет) — ⚠️ **ЦИФРА НЕВЕРНА, см. «Ошибка матча»**
- [x] Шаг 4 — `missing.json`: **0 совпадений** среди файлов (те 30 позиций — рукописные заметки)
- [x] Шаг 5 — таблица (этот документ)
- [x] Шаг 5b — пересчёт матча по `name` + `original` (найдено 4 промаха, +27,3 ГБ)
- [x] **Сверка с TrueNAS** — доксериалы/документалки копий не имеют (307 ГБ уникальны)
- [x] **Список на снос утверждён Alex'ом** — 111 позиций, 828,3 ГБ
- [x] **Диагностика Transmission** — 249 раздач, классифицированы
- [x] **Шаг 6a — дамп API Radarr/Sonarr** ✅ `/tmp/arr-backup-20260922-215428/`
- [x] **Шаг 6b — стоп Transmission** ✅ `Exited (0)`; план чистки: 240 раздач, 1769 ГБ
- [x] **Шаг 6b-2 — удалить раздачи из Transmission** ✅ **249 → 9** (три прохода, см. «Шаг 3»)
- [x] **Шаг 6c — удаление файлов** ✅ **693 ГБ**, диск 477 ГБ → 1,2 ТБ свободно
- [x] **Шаг 6d — rescan Radarr/Sonarr** ✅ выполнен (фантомы остались — см. 5b)
- [x] **Шаг 6e — снять фантомы arr (409)** ✅ **РЕШЕНО** (путь 1, см. «Решение 409»)
- [x] **Шаг 6f — приёмка `df`** ✅ 511 ГБ занято / 1,2 ТБ свободно
- [x] **Шаг 6g — разбор диска** ✅ см. «Что осталось на Кра́кене»
- [ ] Шаг 6h — **rescan Jellyfin** ⏳ (UI вручную или API-ключ)
- [ ] Шаг 6i — приёмка Alex'ом в UI → коммит vault
- [ ] Уборка: `rm -rf /Users/admin/personal` (побочный артефакт, см. ниже)
## 🎯 ГДЕ МЫ СЕЙЧАС (для следующей сессии)
**Медиа удалено (765 ГБ), Transmission чист (9 раздач), arr-фантомы СНЯТЫ.**
Диск: **511 ГБ занято / 1,2 ТБ свободно.**
Осталось ровно два пункта:
1. **Rescan Jellyfin** (`:8096`) — программно не сделан, API-ключа нет. Быстрее всего
руками: Dashboard → Libraries → три точки → **Scan All Libraries** (10 секунд).
Либо создать API-ключ (Dashboard → API Keys) и отдать мне.
2. **Уборка `/Users/admin/personal/`** — побочный артефакт относительного пути.
⚠️ **Манифест уже отработал — повторно не запускать.** `/tmp/delete-manifest.txt`
хранится для истории; путь в нём указывает на удалённые объекты.
## ✅ Решение 409 (Radarr/Sonarr) — пусть 1, выполнено
Alex выбрал путь 1. Понадобилось **два** подхода, потому что 409 менял причину:
| Попытка | Ответ API | Что сделано |
|---|---|---|
| 1 | `Movie's root folder (/media/movies-radarr) doesn't exist` | создал пустые папки через `sudo mkdir` |
| 2 | `Movie's root folder (/media/movies-radarr) is empty. Rescan` | положил заглушку `.keep` + `RescanMovie`/`RescanSeries` → **фантомы снялись сами** |
🔴 **Ключевой факт:** Radarr/Sonarr **блокируют любое изменение записей файлов (409)**,
пока корневая папка отсутствует **или пуста**.
`mkdir` обычным пользователем НЕ работает — `media/` принадлежит `root`,
нужен `sudo mkdir` + `sudo chown kraken:kraken`.
**Порядок, который сработал:**
```bash
# 1. восстановить корневые папки
sudo mkdir -p $M/movies-radarr $M/series-sonarr $M/movies $M/series
sudo chown kraken:kraken $M/{movies-radarr,series-sonarr,movies,series}
# 2. положить заглушку в КОРЕНЬ (иначе «root folder is empty»)
printf 'decoy' > $M/movies-radarr/.keep
printf 'decoy' > $M/series-sonarr/.keep
# 3. RescanMovie / RescanSeries через API — фантомы снимаются САМИ, DELETE не нужен
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"
# 4. убрать заглушки и пустые папки
sudo rm -rf $M/{movies-radarr,series-sonarr,movies,series}
```
⚠️ **`DELETE /api/v3/moviefile/{id}` и `/episodefile/{id}` бесполезны** — они всегда
отдают 409, пока корень битый. Не тратить время, сразу делать Rescan.
**Итог:** Radarr `hasFile=12 → 0`, Sonarr episodeFile `57 → 0`.
Скрипты: `/tmp/step10c.sh` (диагностика причины), `/tmp/step11.sh` (заглушка + rescan),
`/tmp/step12.sh` (ожидание скана + уборка).
🔴 **API-ключи arr НЕ передаются через `?apikey=`** — нужен заголовок `X-Api-Key`.
И **обязателен `curl -sL`**: без `-L` придёт `307` (URL base `/radarr`, `/sonarr`)
и пустой ответ. Ключи: `<ApiKey>` в `docker/{radarr,sonarr}/config/config.xml`.
## Что осталось на Кра́кене (2026-09-22, после чистки)
**Занято 511 ГБ / свободно 1,2 ТБ** (`/dev/sda1`, смонтирован в `...6194539b...`).
| Папка | Размер |
|---|---|
| `documentaries-series` | 236 ГБ |
| `downloads` | 80 ГБ |
| `documentaries` | 72 ГБ |
| `cartoons` | 38 ГБ |
| `cartoons-series` | 31 ГБ |
| `music` | пусто |
| **итого `media`** | **455 ГБ** |
| прочее (docker, логи, БД, backups) | ~56 ГБ |
Мультфильмы: было 169 ГБ → стало 69 ГБ (выжили только короткометражки `cartoons`,
которые Alex не называл). Доксериалы/документалки (307,5 ГБ) — **не тронуты**,
копий на TrueNAS у них нет.
## Time Machine на TrueNAS — шары НЕТ
Проверено 2026-09-22:
| Шара | Путь | `timemachine` | purpose |
|---|---|---|---|
| `old-bu` | `/mnt/RED_2TB/old-bu` | ❌ false | `DEFAULT_SHARE` |
| `storage` | `/mnt/RED_2TB/storage` | ❌ false | `DEFAULT_SHARE` |
| `t610` | `/mnt/RED_2TB/backup/t610` | ❌ false | `DEFAULT_SHARE` |
Ни одна шара не настроена как Time Machine. Finder не увидит их как диск для
резервных копий. Проверять: `midclt call sharing.smb.query | jq -r '.[] |
"\(.name) tm=\(.timemachine) purpose=\(.purpose)"'`.
⚠️ `midclt` под `ssh` требует **`ssh -t`** (нужен TTY), иначе `sudo: a password is required`.
Включение TM на шаре — одна правка `timemachine=true`, Alex'у не предлагалось (не спрашивал).
## ⏳ Открытый вопрос по Jellyfin
Сервер жив: `/health` и `/System/Info/Public` отдают **302** (= страница логина,
не «сломан»). Библиотеки в XML **не видны** — Jellyfin 10.x держит их в SQLite
(`config/data/jellyfin.db`), API-ключ в конфиге не найден.
`docker inspect jellyfin` → смотрит в `/media` (тот же диск).
🔴 **Программный rescan не выполнен.** Сделать рукой в UI либо создать API-ключ.
До этого нельзя утверждать, что библиотека Jellyfin консистентна после сноса.
⚠️ **`rm -rf` на папки `movies`/`movies-radarr`/`series`/`series-sonarr` целиком** —
именно так устроен манифест (41 путь = 4 папки + 37 папок мультфильмов).
Внутренний отбор не пофайловый, а по целым папкам.
### ⚠️ Побочный артефакт, требует уборки
При записи `personal/tech/kraken-truenas-media-copies.md` файл сначала создался по
**относительному пути** — в `/Users/admin/personal/tech/` (вне vault). Правильная копия
лежит в vault. **Каталог `/Users/admin/personal/` — удалить.**
Сделать в следующей сессии: `rm -rf /Users/admin/personal` (в этом ревью terminal недоступен).
## Документация разложена
| Что | Где |
|---|---|
| Эта таблица, метод, цифры, решение, Transmission | `personal/plans/kraken-media-inventory-cleanup.md` |
| **Сверка копий Кра́кен ↔ TrueNAS** | `personal/tech/kraken-truenas-media-copies.md` |
| Методика + переиспользуемые факты | `personal/tech/lampac-deployment.md`, раздел «Полная инвентаризация диска Кра́кена» |
| Скилл (питфоллы 12–18) | `devops/lampac-kraken-deploy`, раздел «Pillar: disk inventory & deletion candidates» |
| Зеркало скилла | `personal/tech/skill-lampac-kraken-deploy.md` |