diff --git a/family/how-to/arr-stack-kraken.md b/family/how-to/arr-stack-kraken.md index 3ba5033b..fe2feaa0 100644 --- a/family/how-to/arr-stack-kraken.md +++ b/family/how-to/arr-stack-kraken.md @@ -599,9 +599,16 @@ GET /Users/{uid}/Items?IsPlayed=true&IncludeItemTypes=Movie&Fields=DatePlayed,Pa - 46 фильмов в базе, **28 с файлами** (на 2026-09-20 было 18 — библиотека растёт, диск заполняется). - Топ по размеру: Babylon 98.8 GB, Schindler's List 95.9, Midsommar 91.9, Triangle of Sadness 85.6, Chaos Walking 62.7, Unhinged 60.9. +- 🔴 **Диск `/dev/sda1` ЗАПОЛНЕН 100% (0 байт свободно), 2026-09-21.** Ранее (2026-09-21 утром) было 94.7%, `df` показывал 100%. **Radarr лежит с `disk I/O error`** — SQLite не может писать при нуле места: + ```bash + curl -s "http://localhost:7878/radarr/api/v3/movie?apikey=$KEY" + # → {"message":"disk I/O error","description":"...SQLiteException (0x87AF045D): disk I/O error..."} + ``` + ⚠️ **API Radarr не читается, пока диск не освобождён** — не искать причину в конфиге/сети, сначала проверить место. + **Причина заполнения:** `sync-down --batch 5` качал 5 фильмов ежедневно без проверки свободного места. `watchlist-nightly` и `watchlist-discover` **остановлены** 2026-09-21 (см. [[family/projects/watchlist-automation]]). + **Виновники по объёму — 5 remux-файлов = 403.4 ГБ:** Babylon 92.0, Schindler's List 89.4, Midsommar 85.6, Triangle of Sadness 79.7, Unhinged 56.7 ГБ. Остальные 22 файла (WEB-DL/BDRip, 4–29 ГБ) — не remux, не трогать. - `recycleBin: ''` — **корзины нет, и настраивать её решено НЕ будет** (2026-09-21). `PUT config/mediamanagement` с путём хоста даёт `400 FolderWritableValidator: not writable by user 'abc'`: внутри контейнера Radarr медиа замаплено как `/media`, хостового пути `/srv/...6194539b.../media/.recyclebin` там не существует. Обходить маппингом ради корзины признано нецелесообразным — удаление идёт через Radarr API, а не `rm`. `recycleBinCleanupDays: 7`, `deleteEmptyFolders: False`. - **Все monitored=True.** Если удалить файл, не сняв monitored, Radarr скачает заново — поэтому `cleanup` делает `PUT monitored=false` **до** `DELETE` (порядок критичен). -- 🔴 **Диск `/dev/sda1` заполнен на 94.7%** (4.8 ГБ свободно, `df` показывает 100%). Порог авто-удаления (90%) пройден, cron `watchlist-cleanup` работает ежедневно в 02:00 — но удалять пока нечего, см. ниже. Проверка одним вызовом: ```bash diff --git a/family/plans/watchlist-cleanup.md b/family/plans/watchlist-cleanup.md index 9d0c4b85..4e56f369 100644 --- a/family/plans/watchlist-cleanup.md +++ b/family/plans/watchlist-cleanup.md @@ -1,8 +1,8 @@ # План: авто-удаление просмотренного (watchlist cleanup) **Дата:** 2026-09-20 (обновлено 2026-09-21) -**Статус:** ✅ РЕАЛИЗОВАНО И В КРОНЕ. Корзина закрыта (без неё). Ждёт `[x]` на Radarr-фильмах -**Связано:** [[watchlist-automation]], [[arr-stack-kraken]] +**Статус:** ✅ РЕАЛИЗОВАНО И В КРОНЕ. Корзина закрыта (без неё). ⚠️ **Бесполезен сейчас: диск 100%, пересечение `[x]` ∩ Radarr = 0. Блокер — заполнение диска, см. [[family/plans/watchlist-disk-overflow-fix]]** +**Связано:** [[watchlist-automation]], [[arr-stack-kraken]], [[watchlist-disk-overflow-fix]] --- @@ -133,6 +133,39 @@ return used / total * 100.0 ``` С веткой `--apply` при пороге 80: после прогона **18 файлов / 702 ГБ не тронуты** — удалять было нечего. +## 🔴🔴 2026-09-21 (вечер): ДИСК 100%, Radarr ЛЁГ — cleanup НИ ПРИ ЧЁМ + +**Alex поправил ошибочный вывод:** cleanup **не мог занять место** — он только удаляет. Это очевидно, +и первая версия разбора зря указывала на него. + +**Настоящая причина заполнения — `sync-down`:** крон `watchlist-nightly` (01:00) добавлял +**5 фильмов ежедневно** (`--batch 5`) **без проверки свободного места**. Radarr качал, пока диск не кончился. + +**Состояние:** +``` +df -h → /dev/sda1 1.8T 1.7T 0 100% ← 0 байт свободно +Radarr API → {"message": "disk I/O error", ...SQLiteException...} +``` +SQLite не может писать при нуле места → **API Radarr не читается**, метаданные недоступны. + +**Виновники по объёму — 5 remux = 403.4 ГБ** (Babylon 92.0 / Schindler's List 89.4 / Midsommar 85.6 / +Triangle of Sadness 79.7 / Unhinged 56.7). Остальные 22 файла — не remux (WEB-DL/BDRip), крупные, +но кодированные. + +**Сделано:** крон `watchlist-nightly` + `watchlist-discover` **остановлен** (бэкап `~/crontab-backup-20260921.txt`). +`watchlist-cleanup` (02:00) **оставлен активным** — он безвреден. + +**Ожидает апрува:** удаление 5 remux-файлов + снятие `⬇️` у Неистового. +Полный план ремонта — [[family/plans/watchlist-disk-overflow-fix]]. + +### Что это меняет для cleanup + +**Ничего в механике — но он по-прежнему бесполезен.** Пересечение `[x]` ∩ Radarr = 0, +и он не покрывает `/media/movies`. Порог 90% он видит, но удалять ему нечего. +Разбираться **после** того, как освободят место и поставят стоп-кран в `sync-down`. + +--- + ## 🔴 ЗАМЕР 2026-09-21: порог ПРОЙДЕН, а удалять нечего ``` diff --git a/family/plans/watchlist-disk-overflow-fix.md b/family/plans/watchlist-disk-overflow-fix.md new file mode 100644 index 00000000..f1fc1fd3 --- /dev/null +++ b/family/plans/watchlist-disk-overflow-fix.md @@ -0,0 +1,165 @@ +--- +title: План — переполнение диска Kraken (watchlist pipeline) +created: '2026-09-21' +updated: '2026-09-21' +type: plan +namespace: family +status: in-progress +tags: + - kraken + - watchlist + - disk + - radarr + - incident +related: + - '[[family/projects/watchlist-automation]]' + - '[[family/plans/watchlist-cleanup]]' + - '[[family/how-to/arr-stack-kraken]]' +--- + +# План: переполнение диска Kraken — причины и ремонт + +> **Инцидент 2026-09-21.** Диск `/dev/sda1` на Кра́кене (1.8 ТБ) заполнен до **нуля байт**. +> Radarr лежит с `disk I/O error`. `watchlist-nightly` и `watchlist-discover` остановлены. +> Причина: `sync-down --batch 5` качал 5 фильмов ежедневно **без проверки свободного места**. + +--- + +## Статус: Фаза 0 ожидает апрува Alex + +| Фаза | Что | Статус | +|---|---|---| +| 0 | Освободить место (удалить 5 remux = 403.4 ГБ) | 🔴 **ЖДЁТ АПРУВА** | +| 0b | Снять `⬇️` у Неистового в watchlist | ⏸ после Фазы 0 | +| 1 | `MIN_FREE_GB` в скрипт (стоп-кран) | ⏸ | +| 2 | Лимит размера файла | ❌ **НЕ ДЕЛАЕМ** — Alex: «лимит качества и так настроен» | +| 3 | Починить `cleanup` (видит только Radarr) | ⏸ отдельно | +| 4 | Вернуть крон с меньшим `--batch` | ⏸ после Фазы 1 | + +**Сделано 2026-09-21:** крон `watchlist-nightly` + `watchlist-discover` остановлен. +Бэкап crontab: `~/crontab-backup-20260921.txt`. + +--- + +## Фаза 0 — Освободить место (БЛОКЕР) + +### Что удалять: 5 remux-файлов, 403.4 ГБ + +Замер `find -printf` по `/media/movies-radarr` — 27 видеофайлов, **remux'ов ровно 5**: + +``` +92.0 GB /media/movies-radarr/Babylon (2022)/Babylon (2022) - UHD BD-Remux by Wild_Cat.mkv +89.4 GB /media/movies-radarr/Schindler's List (1993)/Schindler's.List.1993.2160p.HDR.BDRemux.mkv +85.6 GB /media/movies-radarr/Midsommar (2019)/Midsommar.2019.DC.BDREMUX.2160p.HDR.seleZen.mkv +79.7 GB /media/movies-radarr/Triangle of Sadness (2022)/Triangle.of.Sadness.2022.BDREMUX.2160p.HDR.seleZen.mkv +56.7 GB /media/movies-radarr/Unhinged (2020)/Неистовый.2020.UHD.Blu-Ray.Remux.2160p.mkv +``` + +Полный префикс пути: `/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f`. + +### ⚠️ Что НЕ трогать + +**22 остальных файла — не remux** (WEB-DL / BDRip / x264 / x265, 4–29 ГБ). Размер не признак: +| Файл | Размер | Тип | +|---|---|---| +| `Oldboy (2003)/Oldeuboi [2003].mkv` | 28.6 GB | не remux | +| `Project.Hail.Mary...2160p.iT.WEB-DL.DV.HDR.H.265.mkv` | 28.1 GB | не remux (WEB-DL) | +| `Whiplash (2014)/Одержимость (Whiplash) 2014.mkv` | 23.7 GB | не remux | + +**Признак remux — имя файла:** `Remux` / `BDREMUX` / `BDRemux` / `BD-Remux`. + +### 🔴 Метки `⬇️` в watchlist — есть только у одного из пяти + +`family/documents/movies-watchlist.md`: + +| Фильм | Строка | Метка | +|---|---|---| +| Неистовый (Unhinged) | 107: `- [x] ⬇️ Неистовый` | ✅ | +| Babylon (2022) | 83: `- [ ] Babylon (2022)` | ❌ | +| Midsommar | 81: `- [ ] 🧟‍♀️ midsommar 2019` | ❌ | +| Triangle of Sadness | 82: `- [ ] Triangle of Sadness 2022` | ❌ | +| Schindler's List | — | **отсутствует в файле** | + +`sync-down` ставит `⬇️` только на то, что добавил сам. Эти четыре попали в Radarr иначе. + +**Решение Alex:** снять `⬇️` (там, где есть). `[x]` у Неистового **не трогать** — это отметка просмотра. + +### Почему удаляем файлами, а не через Radarr API + +Radarr **не отвечает** — диск в нуле, SQLite не может писать: +```json +{"message": "disk I/O error", + "description": "...System.Data.SQLite.SQLiteException (0x87AF045D): disk I/O error..."} +``` +После освобождения места Radarr сам пересканирует и увидит `hasFile=false`. + +--- + +## Фаза 1 — Стоп-кран `MIN_FREE_GB` (главный фикс) + +**Цель:** перед добавлением фильма в Radarr проверить свободное место. Если мало — не добавлять. + +**Где:** `watchlist_sync/sync_down.py` (или `cli.py` — уточнить по коду перед правкой). + +```python +# Minimum free space on the media disk before queueing new downloads. +# Prevents filling the disk to zero (incident 2026-09-21). +MIN_FREE_GB = 100 # ← значение согласовать с Alex +``` + +Проверка **перед** циклом добавления: +```python +st = os.statvfs(MEDIA_PATH) # НЕ shutil.disk_usage("/media")! +free_gb = (st.f_bfree * st.f_frsize) / (1024**3) +if free_gb < MIN_FREE_GB: + print(f"only {free_gb:.1f} GB free (< {MIN_FREE_GB} GB) — not queueing anything") + return +``` + +⚠️ **Питфолл:** `/media` — **не медиа-диск**, это пустая папка на SD-карте (`/dev/mmcblk0p2`, 14 ГБ). Реальный диск — `/srv/dev-disk-by-uuid-6194539b-.../`. Брать `os.statvfs` по реальному корню. +⚠️ **`df` завышает** (~+4%, root-резерв ext4). Для порогов использовать `os.statvfs`. + +**Порядок работ:** бэкап → правка → dry-run → проверка Alex → коммит. + +--- + +## Фаза 2 — Лимит размера ❌ НЕ ДЕЛАЕМ + +Alex 2026-09-21: **«лимит качества и так настроен»**. Профиль `WEB-4K (no remux)` (Radarr/Sonarr id **7**) уже запрещает Remux-1080p/2160p и BR-DISK. Новых лимитов не вводим. + +⚠️ Но: профиль **не ограничивает размер** — только тип релиза. Все 5 виновников качались под профилем `Any` (id 1) **до фикса 2026-09-04**. Существующие файлы под новый профиль не подпадают. + +--- + +## Фаза 3 — Починить `cleanup` (отдельно, осторожно) + +**Дефект:** cleanup сопоставляет `[x]` из watchlist с **Radarr-библиотекой**, а просмотренное лежит в `/media/movies` (ручные торренты). Пересечение = 0 → удаляет 0 файлов. + +**Замер 2026-09-21:** `watchlist [x] items: 177` / `radarr movies with file: 28` / `nothing to delete`. + +**Это не причина инцидента** — cleanup не мог занять место, он только удаляет. Расширять его — отдельная задача, идёт после Фаз 0–1. + +--- + +## Фаза 4 — Вернуть крон + +После того как Фаза 1 проверена и стоп-кран работает: +- вернуть строки `watchlist-nightly` (01:00) и `watchlist-discover` (вс 09:00) в crontab; +- **снизить `--batch`** (сейчас 5) — 5 фильмов/сутки без учёта размера и есть корень инцидента. + +--- + +## Уроки + +1. **Любой скрипт, ставящий закачки в очередь, ОБЯЗАН проверять свободное место до добавления.** Лимита качества недостаточно — он про тип релиза, не про размер. +2. **«Radarr молчит / I/O error» на заполненном диске — сначала проверить место**, потом конфиг и сеть. +3. **Крон в 01:00 без присмотра = диск заполняется незаметно.** Тревога при >порога не настроена: cleanup писал «nothing to delete» и молчал. +4. **Не выдавать догадки за факт.** Первая версия разбора указывала на `cleanup` как виновника — Alex поправил: cleanup удаляет, а не занимает. Виновник — `sync-down`. + +--- + +## Связанные заметки + +- [[family/projects/watchlist-automation]] — полный pipeline, статус крона +- [[family/plans/watchlist-cleanup]] — механизм cleanup (порог 90%, лимит 10) +- [[family/how-to/arr-stack-kraken]] — *arr стек, профили качества, API diff --git a/family/projects/watchlist-automation.md b/family/projects/watchlist-automation.md index e6f99aa6..4ab9e19a 100644 --- a/family/projects/watchlist-automation.md +++ b/family/projects/watchlist-automation.md @@ -475,15 +475,105 @@ Sonarr API base: http://localhost:8989/sonarr/api/v3/ ``` Проверка закачки: `queue` в Radarr показывает `grabbed/downloading`; `history` даёт точное имя взятого релиза. Transmission — `docker exec transmission transmission-remote --list` (RPC-юзер в `settings.json` пустой). +## 🔴 2026-09-21: ДИСК ЗАПОЛНЕН 100%, КРОН `nightly`/`discover` ОСТАНОВЛЕН + +**Причина остановки:** `sync-down --batch 5` (5 фильмов ежедневно) работал **без проверки свободного места**. Диск заполнился до **нуля байт**. + +### Признак «сервисы ломаются» — Radarr отдаёт disk I/O error + +```bash +curl -s "http://localhost:7878/radarr/api/v3/movie?apikey=$KEY" +# → {"message": "disk I/O error\ndisk I/O error", +# "description": "...System.Data.SQLite.SQLiteException (0x87AF045D): disk I/O error..."} +``` +SQLite не может писать при нуле свободного места. **Метаданные Radarr через API не читаются, пока диск не освобождён.** Это первое, что надо проверять при «Radarr молчит» на заполненном диске. + +### Фактическое заполнение (2026-09-21) + +``` +df -h → /dev/sda1 1.8T 1.7T 0 100% /srv/dev-disk-by-uuid-6194539b-... +df -h → /dev/mmcblk0p2 14G 4.7G 8.4G 36% / (SD-карта, не медиа-диск) +``` +Docker: 29.4.3, Debian 12 bookworm, **arch `aarch64`**, 25 контейнеров, 22 образа. + +### Что именно съело место — 5 REMUX-файлов = 403.4 ГБ + +Замер `find -printf` по `/media/movies-radarr` (27 видеофайлов). **Настоящих remux'ов ровно 5** — по имени файла (`Remux`/`BDREMUX`/`BDRemux`): + +| Размер | Фильм | Файл | +|---|---|---| +| 92.0 GB | Babylon (2022) | `Babylon (2022) - UHD BD-Remux by Wild_Cat.mkv` | +| 89.4 GB | Schindler's List (1993) | `Schindler's.List.1993.2160p.HDR.BDRemux.mkv` | +| 85.6 GB | Midsommar (2019) | `Midsommar.2019.DC.BDREMUX.2160p.HDR.seleZen.mkv` | +| 79.7 GB | Triangle of Sadness (2022) | `Triangle.of.Sadness.2022.BDREMUX.2160p.HDR.seleZen.mkv` | +| 56.7 GB | Unhinged (2020) | `Неистовый.2020.UHD.Blu-Ray.Remux.2160p.mkv` | +| **403.4 GB** | **итого** | | + +⚠️ **Остальные 22 файла — НЕ remux** (WEB-DL / BDRip / x264 / x265, 4–29 ГБ). Крупные, но кодированные — не трогать. Например `Oldboy (2003)/Oldeuboi [2003].mkv` 28.6 ГБ и `Project.Hail.Mary...2160p.iT.WEB-DL.DV.HDR.H.265.mkv` 28.1 ГБ — **не remux**, несмотря на размер. + +**Корень:** захардкоженный `qualityProfileId: 1` (профиль `Any`) в `arr.py` — починен только 2026-09-04. Всё, что качалось до этого, брало remux'ы по 60–98 ГБ. + +### 🔴 Метки `⬇️` на 4 из 5 remux'ов В watchlist НЕТ + +Проверено грепом по `family/documents/movies-watchlist.md`: + +| Фильм | Строка в watchlist | Метка | +|---|---|---| +| Неистовый (Unhinged) | **107**: `- [x] ⬇️ Неистовый` | ✅ есть (и `[x]`) | +| Babylon (2022) | **83**: `- [ ] Babylon (2022)` | ❌ нет | +| Midsommar | **81**: `- [ ] 🧟♀️ midsommar 2019` | ❌ нет | +| Triangle of Sadness | **82**: `- [ ] Triangle of Sadness 2022` | ❌ нет | +| Schindler's List | **не найден в файле** | ❌ нет | + +**Вывод:** `sync-down` помечает `⬇️` только то, что добавил сам. Эти 4 попали в Radarr другим путём (вручную / до появления меток). Снимать метку не с чего — кроме Неистового. + +### Порядок работ, согласованный с Alex + +1. **Удалить 5 remux-файлов** (403.4 ГБ) → диск оживает → Radarr API заработает. +2. **Снять `⬇️` у Неистового** (строка 107). `[x]` — **не трогать** (это отметка просмотра). +3. **Добавить `MIN_FREE_GB` в скрипт** — стоп-кран перед добавлением в Radarr. +4. ⚠️ Лимит качества Alex считает уже настроенным (`WEB-4K (no remux)`, id 7) — **новый лимит не делаем**. + +⚠️ Удаление **напрямую файлами**, не через Radarr API — API лежит на заполненном диске. Radarr пересканирует и увидит `hasFile=false`. + +### Остановка крона (сделано 2026-09-21) + +```bash +crontab -l > ~/crontab-backup-$(date +%Y%m%d-%H%M%S).txt # бэкап ПЕРЕД +crontab -l | grep -v "watchlist-nightly\|watchlist-discover" > /tmp/crontab-new.txt +crontab /tmp/crontab-new.txt +crontab -l | grep -c "watchlist-nightly\|watchlist-discover" # → 0 (проверка) +``` +Бэкап: `~/crontab-backup-20260921.txt`. +**Осталось в кроне:** `sync-vault` (часовой), 2× `pgs-to-srt`, `watchlist-cleanup` (02:00). +**Убрано:** `watchlist-nightly` (01:00), `watchlist-discover` (вс 09:00). + +### 🔴 Незакрытые дефекты скрипта (моя ответственность) + +| # | Дефект | Следствие | +|---|---|---| +| 1 | Нет проверки свободного места перед `sync-down` | Radarr качает, пока диск не кончится | +| 2 | Нет лимита размера файла | Один фильм = 60–100 ГБ | +| 3 | Нет стоп-крана при заполнении > порога | Нет автоматической остановки | +| 4 | `cleanup` не видит `/media/movies` | Просмотренное не удаляется, диск не освобождается | + +**План ремонта (согласован):** сначала Фаза 1 — `MIN_FREE_GB` в скрипт (главный фикс), потом возврат крона с меньшим `--batch`. Cleanup — отдельно. + +**Правило на будущее:** любой скрипт, ставящий закачки в очередь, ОБЯЗАН проверять свободное место **до** добавления. Лимита качества недостаточно — он ограничивает тип релиза, но не размер. + +--- + ## Cron Jobs (на Кракене, восстановлены 2026-09-20, дополнены 2026-09-21) Весь watchlist pipeline работает на Кракене (мигрировал с Eagle 2026-05-27). **Крон был мёртв с 2026-06-20 по 2026-09-20, восстановлен** (детали в начале документа). -| Job | Расписание | Скрипт | -|-----|-----------|--------| -| `watchlist-nightly` | ежедн. 01:00 | `~/scripts/watchlist-nightly.sh` | -| `watchlist-cleanup` | ежедн. 02:00 | `~/scripts/watchlist-cleanup.sh --apply` | -| `watchlist-discover` | вс 09:00 | `~/scripts/watchlist-discover.sh` | +> ⚠️ **С 2026-09-21 `watchlist-nightly` и `watchlist-discover` ОСТАНОВЛЕНЫ** (диск 100%, см. секцию выше). Таблица ниже — целевое состояние; фактически активен только `watchlist-cleanup`. + +| Job | Расписание | Скрипт | Факт 2026-09-21 | +|-----|-----------|--------|-----------------| +| `watchlist-nightly` | ежедн. 01:00 | `~/scripts/watchlist-nightly.sh` | ⏹ ОСТАНОВЛЕН | +| `watchlist-cleanup` | ежедн. 02:00 | `~/scripts/watchlist-cleanup.sh --apply` | ✅ активен | +| `watchlist-discover` | вс 09:00 | `~/scripts/watchlist-discover.sh` | ⏹ ОСТАНОВЛЕН | ⚠️ Фактический путь — `~/scripts/`, **не** `~/.hermes/scripts/`. Оба скрипта вызывают CLI напрямую через `uv run --project $WS`, без LLM. `uv` лежит в `~/.local/bin/uv`. @@ -601,8 +691,12 @@ Jellyfin library mapping: Movies → `movies`, Cartoons → `mixed` (movies + ep - 🟡 **[2026-09-20] Логи крона в `/tmp/`** — теряются при перезагрузке. Перенести в постоянное место (`~/logs/` или на диск), если нужна история прогонов. - ✅ **[2026-09-21] Удаление просмотренных фильмов при заполнении диска >90% — ЗАКРЫТО И В КРОНЕ.** Обёртка `~/scripts/watchlist-cleanup.sh` (была в `/tmp` — перенесена через `sudo install`, у kraken sudo **без пароля**), cron `0 2 * * * ... --apply`, лог `/home/kraken/logs/watchlist-cleanup.log`. **Корзина Radarr (`recycleBin`) — решено НЕ настраивать** (контейнерный/хостовый пути расходятся; Alex больше не переспрашивать). Обёртка по умолчанию делает **dry-run** — без `--apply` в кроне был бы вечный холостой ход. Полные детали — [[family/plans/watchlist-cleanup]]. ⚠️ Питфолл: `/media` — **не медиа-диск**, а пустая папка на SD-карте (`/dev/mmcblk0p2`), отдаёт 33.9%. Реальный диск `/dev/sda1` в `/srv/dev-disk-by-uuid-6194539b-.../`. Использовать `os.statvfs`, не `shutil.disk_usage("/media")`. -- 🔴 **[2026-09-21] ДИСК КРИТИЧЕН: 94.7% / свободно 4.8 ГБ.** Порог 90% пройден, cleanup реально запускается, но **удаляет 0 файлов**: пересечение `[x]` ∩ Radarr-библиотека = **пусто** (177 просмотренных vs 28 фильмов с файлами). Ждёт, пока в watchlist поставят `[x]` на Radarr-фильмы. Топ-кандидаты: Babylon 98.8 ГБ, Schindler's List 95.9, Midsommar 91.9, Triangle of Sadness 85.6. -- 🔴 **[2026-09-21] КОРЕНЬ: `[x]` не проставляется на новые закачки.** `sync-up` (Jellyfin watched → `[x]`) видит только 6 старых фильмов из `/media/movies`, ни одного из `/media/movies-radarr`. Пока это не починено, cleanup бесполезен, а диск будет заполняться. **Главная незакрытая задача всего pipeline.** +- 🔴 **[2026-09-21] ДИСК ЗАПОЛНЕН 100% (0 байт свободно). `nightly` + `discover` ОСТАНОВЛЕНЫ.** Работал `sync-down --batch 5` ежедневно без проверки места. Radarr лёг с `disk I/O error` (SQLite не может писать). Полный разбор — в секции «🔴 2026-09-21: ДИСК ЗАПОЛНЕН 100%» выше. Бэкап crontab: `~/crontab-backup-20260921.txt`. +- 🔴 **[2026-09-21] ЖДЁТ АПРУВА ALEX: удаление 5 remux-файлов = 403.4 ГБ.** Babylon 92.0 / Schindler's List 89.4 / Midsommar 85.6 / Triangle of Sadness 79.7 / Unhinged 56.7 ГБ. Удалять **файлами напрямую** (Radarr API лежит). Затем снять `⬇️` у Неистового (строка 107), `[x]` не трогать. ⚠️ У 4 из 5 метки `⬇️` в watchlist нет; Schindler's List в файле отсутствует вовсе. +- 🔴 **[2026-09-21] ФАЗА 1 РЕМОНТА: добавить `MIN_FREE_GB` в `sync-down`.** Стоп-кран: если свободно < порога — не добавлять в Radarr. **Главный фикс**, без него возврат крона бессмыслен. Лимит качества Alex считает уже настроенным — **новый не делать**. +- 🔴 **[2026-09-21] КОРЕНЬ: `[x]` не проставляется на новые закачки.** `sync-up` (Jellyfin watched → `[x]`) видит только 6 старых фильмов из `/media/movies`, ни одного из `/media/movies-radarr`. Пока это не починено, cleanup бесполезен, а диск будет заполняться. +- 🔴 **[2026-09-21] ДИСК КРИТИЧЕН: 94.7% / свободно 4.8 ГБ (замер до полного заполнения).** Порог 90% пройден, cleanup реально запускается, но **удаляет 0 файлов**: пересечение `[x]` ∩ Radarr-библиотека = **пусто** (177 просмотренных vs 28 фильмов с файлами). +- 🟡 **[2026-09-21] Cleanup не видит `/media/movies`** — смотрит только Radarr-библиотеку, поэтому просмотренное из папки ручных торрентов не удаляется. Расширять — отдельно и осторожно (удаление файлов). - 🟡 **[2026-09-20] `sync-down` берёт всего 5 за прогон** — при 250 кандидатах разбор очереди займёт ~50 ночей. Рассмотреть увеличение `--batch` (сейчас `--batch 5` в `watchlist-nightly.sh`). Особенно актуально, раз фильтр `<6.0` уже отсеял 18. - 🟡 **[2026-09-20] Разобрать 5 застрявших закачек в очереди Radarr** со статусом `warning`: `Brokeback Mountain`, `Мортал Комбат 2`, `Sorry to Bother You`, `Город бога`, `День хомячка`. Висят давно, релиз не находится/не качается. - 🟡 **[2026-09-20] `Oficina do Diabo` / `Мастерская Сатаны` (2025)** — в Radarr, но релиз не найден. Ждёт RSS. Проверить через несколько дней.