Диск заполняется: как поймать до падения сайта
Заполненный диск — тихий убийца: MySQL не пишет, логи не ротируются, сессии не создаются. Пользователь видит белый экран или 500, а вы узнаёте последним. Разбор причин и порогов.
Кто съедает место чаще всего
- /var/log — nginx, php-fpm, mysql без logrotate или с уровнем debug.
- Бэкапы на том же диске —
backup*.sql.gzкопятся годами. - /tmp и сессии PHP — миллионы файлов
sess_*. - upload / bitrix/cache — на Bitrix кэш и выгрузки маркетплейса.
- Docker images — если на том же VPS есть контейнеры.
du -xhd1 / 2>/dev/null | sort -hr | head -15
find /var/log -type f -size +100M 2>/dev/null
find /tmp -type f -name 'sess_*' 2>/dev/null | wc -l
Какие пороги алертов ставить
- 80% — предупреждение: есть время почистить без аврала.
- 90% — срочно: в ближайшие часы возможен отказ записи.
- Тренд +5% за сутки — отдельный сигнал (утечка логов, битый cron бэкапа).
Алерт только на 95% — вы уже в зоне, где MySQL может не стартовать после ребута.
Первые 30 минут при срабатывании алерта
df -h— какой раздел, сколько осталось.- Найти топ-каталоги
du, не удалять вслепую. - Сжать или удалить старые логи (с копией, если нужен разбор инцидента).
- Проверить cron бэкапов — не пишет ли дважды в один каталог.
- После освобождения 15%+ — проверить сайт и
systemctl status mysql nginx.
Профилактика
- Logrotate на все сервисы, лимит размера journald.
- Бэкапы на отдельный volume или S3, retention 7/14/30 дней.
- Мониторинг диска с историей — видно, когда начался рост (деплой? импорт?).
Алерт по диску в Telegram или MAX
Mediops: порог на VDS, уведомление до 100%. Бесплатно — 1 сервер.