Анализ инцидента: свободное место на /storage ниже резерва (41 ГБ при норме 80 ГБ)
Дата анализа: 2026-02-15
Инцидент: На разделе /storage свободно 41 ГБ при установленном политикой резерве 80 ГБ (состояние WARNING).
Цель документа: Выявить причины допущения ситуации и зафиксировать решения по предотвращению повторения.
1. Факты
| Параметр | Значение |
|---|---|
| Раздел | /storage (LVM storage-lv, ~569 ГБ) |
| Занято | 501 ГБ |
| Свободно | 41 ГБ |
| Политика (резерв) | Не менее 80 ГБ свободного места |
| Статус по мониторингу | WARNING (срабатывает при < 80 ГБ) |
| Дата расширения storage-lv | 2026-02-10 (ubuntu-lv уменьшен, storage-lv увеличен до ~578 ГБ) |
| Свободно сразу после расширения | ~230 ГБ (по чек-листу 2026-02-10) |
За период с 2026-02-10 по 2026-02-15 свободное место на /storage снизилось с ~230 ГБ до 41 ГБ (рост занятого объёма примерно на 189 ГБ за несколько дней).
2. Почему была допущена ошибка (причины)
2.1 Прямая причина: рост данных без компенсирующей очистки
Основной потребитель места на /storage — каталоги LXD (контейнеры, снимки) и Docker (overlay2: образы, контейнеры, тома). Возможные источники роста:
- накопление образов и неиспользуемых слоёв Docker;
- накопление снимков LXD (скрипт ротации ограничивает количество, но при частом создании снимков объём мог вырасти до лимита);
- логи и данные внутри контейнеров (в т.ч. записи BBB, если хранятся в пуле на
/storage); - прочие данные сервисов в
/storage.
Рост не был ограничен автоматической очисткой именно на /storage (см. п. 2.2).
2.2 Корневая причина 1: автоматическая очистка не действует на /storage
В скриптах мониторинга и аварийной очистки обрабатываются только разделы / и /D:
-
disk-space-monitor.sh: функции
preventive_cleanup,aggressive_cleanup,emergency_cleanupпринимают аргументmountpoint, но содержат ветки только для"/"и"/D". При срабатывании WARNING/CRITICAL/EMERGENCY для /storage вызывается та же профилактическая/агрессивная/аварийная очистка с аргументом"/storage", однако внутри этих функций нет кода, очищающего данные на /storage (нет Docker prune, нет принудительного запуска очистки снимков LXD по этому разделу). В результате при падении свободного места ниже 80 ГБ монитор только пишет в лог и опционально отправляет алерт, но не освобождает место на /storage. -
disk-space-emergency-cleanup.sh: очищает только временные файлы, логи, кэш apt, снимки Timeshift и старые ядра — всё это относится к корню или к
/D. Раздел /storage скриптом не обрабатывается.
Вывод: Срабатывание порога WARNING для /storage не приводит к автоматическому освобождению места на этом разделе. Ошибка допущена в том смысле, что система не может самостоятельно вернуть /storage в зону резерва 80 ГБ.
2.3 Корневая причина 2: отсутствие раннего предупреждения
Порог WARNING установлен на границе резерва (80 ГБ). Нет отдельного порога «раннего предупреждения» (например, свободно < 100 ГБ или < 90 ГБ), который бы:
- заставлял реагировать до входа в зону резерва;
- давал время на плановую очистку (Docker, LXD, перенос данных) без спешки.
В результате реакция начинается только когда резерв уже нарушен (41 ГБ), а не когда до него остаётся 10–20 ГБ.
2.4 Корневая причина 3: регламентная проверка не предотвратила выход за резерв
В документации рекомендована еженедельная проверка (df -h, просмотр логов монитора). Однако:
- либо проверка не выполнялась в период быстрого роста (2026-02-10 – 2026-02-15);
- либо не была зафиксирована обязательность реакции при «свободно < 80 ГБ» (или при приближении к 80 ГБ);
- либо регламент не предписывает явно запуск очистки Docker/LXD при приближении к резерву.
В итоге регламент не сработал как барьер до нарушения резерва.
2.5 Сводка причин
| № | Причина | Тип |
|---|---|---|
| 1 | Автоочистка при WARNING/CRITICAL/EMERGENCY не освобождает место на /storage (нет Docker/LXD очистки для этого раздела) |
Техническая |
| 2 | Нет порога «раннего предупреждения» (например, < 100 ГБ свободно) для плановых действий до входа в зону 80 ГБ | Техническая / процессная |
| 3 | Еженедельная проверка не предотвратила выход за резерв: не выполнялась или не предусматривала обязательную реакцию при приближении к 80 ГБ | Процессная |
| 4 | Рост данных на /storage (Docker, LXD, возможно записи/логи) не ограничивался проактивной очисткой и не мониторился по компонентам |
Техническая / процессная |
3. Решения по предотвращению таких ошибок в дальнейшем
3.1 Технические меры
3.1.1 Добавить очистку раздела /storage в скрипты мониторинга
- В disk-space-monitor.sh в функциях
preventive_cleanup,aggressive_cleanupи при необходимостиemergency_cleanupдобавить ветку дляmountpoint = "/storage": - Профилактическая (WARNING): выполнять
docker image prune -f(только «висячие» образы), при необходимости — вызов скрипта очистки снимков LXD (cleanup-lxd-snapshots.sh) по расписанию уже есть; дополнительно можно вызывать его при WARNING по/storage. - Агрессивная (CRITICAL):
docker system prune -f(неиспользуемые образы/контейнеры/сети), проверка и при необходимости ручной или скриптовый пересчёт/очистка снимков LXD в пределах политики (20/10 снимков). - Аварийная (EMERGENCY): более жёсткий prune (с учётом риска удаления неиспользуемых образов, нужных для быстрого перезапуска), плюс принудительный запуск
cleanup-lxd-snapshots.sh. - Учитывать, что полный
docker system prune -aудаляет все неиспользуемые образы — применять по решению (например, только при CRITICAL/EMERGENCY и с логированием).
3.1.2 Ранний порог предупреждения для /storage
- Ввести в мониторинг порог «раннее предупреждение», например: свободно на /storage < 100 ГБ (или 110 ГБ).
- При его достижении: запись в лог уровня NOTICE/INFO и по возможности уведомление (email/алерт), чтобы ответственный мог провести плановую очистку до нарушения резерва 80 ГБ.
- Порог 100 ГБ зафиксировать в документации и в скрипте (переменная, например
STORAGE_EARLY_WARNING_GB=100).
3.1.3 Обработка /storage в disk-space-emergency-cleanup.sh
- В скрипт аварийной очистки добавить поддержку аргумента
/storage: при вызовеdisk-space-emergency-cleanup.sh /storage [целевой_ГБ]выполнять безопасную очистку Docker (prune) и при необходимости запускcleanup-lxd-snapshots.sh, с логированием объёма освобождённого места.
3.2 Процессные меры
3.2.1 Обязательный еженедельный регламент
- Зафиксировать в Политике хранения данных и контроля дискового пространства и в Защите от переполнения диска:
- не реже одного раза в неделю выполнять
df -h / /storage /Dи просматривать последние записи/var/log/disk-space-monitor.log; - если на
/storageсвободно менее 80 ГБ или менее 100 ГБ (ранний порог) — в ту же неделю выполнить плановую очистку:docker system df, при необходимостиdocker image prune/docker system prune, проверка количества снимков LXD и при необходимости ручная ротация в рамках политики (20/10 снимков); - результат проверки и выполненные действия при необходимости кратко фиксировать (например, в операционном журнале или в отчёте о проверке дисков).
3.2.2 Архитектурные решения и новый контент на /storage
- При принятии решений о размещении новых сервисов или данных на
/storage(новые контейнеры, тома Docker, записи BBB и т.п.): - оценивать ожидаемый рост объёма и убеждаться, что с учётом текущего использования и резерва 80 ГБ место не будет исчерпано в краткосрочной перспективе;
- при необходимости закладывать автоматическую ротацию (логи, записи, снимки) и лимиты (например, max-size для логов контейнеров).
3.2.3 Реакция на раннее предупреждение
- При срабатывании раннего порога (например, свободно < 100 ГБ) в течение той же недели:
- провести анализ крупных каталогов на
/storage(du -h --max-depth=2 /storage); - выполнить очистку Docker и проверку снимков LXD по п. 3.2.1;
- при повторном срабатывании раннего порога без явного разового роста (обновления, миграции) — зафиксировать тренд и рассмотреть перенос части данных на
/Dили расширение тома по согласованию.
3.3 Документирование
- Внести в disk-space-protection.md описание раннего порога для
/storageи перечень действий при WARNING/раннем пороге. - В DISK-SPACE-CHECK-2026-02-15.md или отдельный чек-лист: «Еженедельная проверка дисков» с явным пунктом: при свободном месте на
/storage< 80 ГБ или < 100 ГБ — выполнить перечисленные шаги очистки и зафиксировать результат. - Обновить политику и раздел «Исключение аварийного состояния» с указанием раннего порога и обязательности еженедельной проверки с реакцией при приближении к резерву.
4. План внедрения (кратко)
| № | Действие | Ответственный |
|---|---|---|
| 1 | Доработать disk-space-monitor.sh: очистка для /storage (Docker prune, вызов cleanup-lxd-snapshots при WARNING/CRITICAL/EMERGENCY) | Технический директор |
| 2 | Ввести ранний порог (например, 100 ГБ) в мониторинг и документацию | Технический директор |
| 3 | Доработать disk-space-emergency-cleanup.sh: поддержка /storage | Технический директор |
| 4 | Зафиксировать обязательный еженедельный регламент проверки и реакции при < 80 ГБ / < 100 ГБ в политике и в disk-space-protection.md | Технический директор |
| 5 | Провести разовую очистку /storage до достижения резерва ≥ 80 ГБ (Docker, LXD по политике) | Эксплуатация |
5. Связанные документы
- Политика хранения данных и контроля дискового пространства
- Защита от переполнения диска
- Проверка дискового пространства и действия (2026-02-15)
- Предложение: ubuntu-lv 350 GB и аварийный резерв
- Чек-лист LVM и резерв /storage
Документ подготовлен: AI Denkart, технический директор проекта DENKART.
Утверждение / ознакомление: по решению владельца ресурсов (CDTO Dkvark).