Як швидко перевірити, що місце на диску закінчилося
Якщо сайт або база даних на 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% випадків діагностики.