Как быстро проверить, что место на диске закончилось
Если сайт или база данных на VDS вдруг перестали отвечать, а в логах видны ошибки записи — в первую очередь проверьте свободное место на диске. Команда df -h показывает использование по разделам в удобном виде, с процентами и объёмом в гигабайтах.
df -h
Если раздел / или /var показывает 100%, дальше нужно искать конкретные файлы и папки, которые съели место. Сообщение "диск заполнен" ничего не говорит о причине — причину ищут отдельно, шаг за шагом.
Как найти, какие папки занимают больше всего места
Утилита du считает размер каталогов рекурсивно. Чтобы не листать длинный список, сортируйте вывод и ограничивайте глубину:
du -h --max-depth=1 /var | sort -rh | head -n 10
Так вы получите топ-10 самых тяжёлых подпапок внутри /var. Повторите команду для найденной директории, чтобы спуститься на уровень глубже и найти конкретного виновника. Для интерактивного анализа удобно поставить ncdu — он строит навигацию по дереву каталогов прямо в терминале:
apt install ncdu
ncdu /var
Удалённые, но открытые файлы: невидимый расход места
Иногда du и df показывают разные цифры использования диска. Причина — процесс держит открытым файл, уже удалённый из файловой системы. Место не освобождается, пока процесс не закроет дескриптор. Найти такие файлы можно так:
lsof +L1
В выводе видны PID процесса и размер удалённого, но всё ещё занятого файла. Часто это забытые логи приложений после ротации без перезапуска сервиса или зависшие временные файлы Nginx и MySQL. Решение простое — перезапустить конкретный сервис:
systemctl restart nginx
Логи и журналы — самая частая причина переполнения
На VDS без настроенной ротации логи растут годами. Проверьте размер системного журнала systemd и логов приложений в /var/log:
journalctl --disk-usage
du -sh /var/log/*
Если журнал systemd весит несколько гигабайт, ограничьте его размер и почистите старые записи — подробный разбор параметров есть в статье про journalctl и rsyslog. Для остальных логов настройте ротацию через logrotate, чтобы проблема не возвращалась каждый месяц.
Пакетный кэш, Docker и старые ядра
Кроме логов, место съедают кэши менеджеров пакетов и неиспользуемые образы Docker. На Ubuntu и Debian почистите кэш APT и удалите старые версии ядра:
apt clean
apt autoremove --purge
Если на сервере запущен Docker, образы и остановленные контейнеры способны занимать десятки гигабайт. Проверьте расход и очистите неиспользуемое:
docker system df
docker system prune -a
Команда docker system prune -a удаляет все неиспользуемые образы, а не только "висячие" — применяйте её осознанно, если на сервере есть другие активные проекты.
Что делать, если диск заполнен на 100% прямо сейчас
Когда места нет совсем, привычные команды иногда отказывают с ошибкой записи. Сначала удалите самый очевидный крупный файл, найденный через du, затем разберитесь с причиной. Не удаляйте файлы вслепую в системных каталогах — сначала проверьте через lsof, активен ли процесс, использующий их.
Итоговый чек-лист:
- Настройте мониторинг свободного места заранее — см. статью про мониторинг ресурсов VDS.
- Включите и проверьте ротацию логов для всех сервисов.
- Ограничьте размер журнала systemd параметром
SystemMaxUse. - Регулярно чистите неиспользуемые образы Docker и кэш пакетов.
- Держите под рукой команду
du -h --max-depth=1 | sort -rh— она закрывает 90% случаев диагностики.