166 lines
8.7 KiB
Markdown
166 lines
8.7 KiB
Markdown
---
|
||
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
|