Files
obsidian-vault/family/plans/watchlist-disk-overflow-fix.md
T

8.7 KiB
Raw Blame History

title, created, updated, type, namespace, status, tags, related
title created updated type namespace status tags related
План — переполнение диска Kraken (watchlist pipeline) 2026-09-21 2026-09-21 plan family in-progress
kraken
watchlist
disk
radarr
incident
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 не может писать:

{"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 — уточнить по коду перед правкой).

# 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

Проверка перед циклом добавления:

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.

Связанные заметки