Закінчилося місце на диску
Як швидко знайти, що з'їдає диск, безпечно звільнити гігабайти та зрозуміти підводні камені: видалені відкриті файли й вичерпані inode.
Оновлено 23 серпня 2026 р.
Повний диск ламає все одразу: база даних перестає приймати записи, сайт повертає помилки, journalctl відмовляється працювати, а іноді навіть SSH не пускає вас усередину, бо вже нікуди писати журнал сесії. Діяти потрібно швидко й послідовно.
Перевірка
df -h
df -i
Перша команда показує місце, друга — іноди. Заповнені іноди дають ту саму помилку "No space left on device" навіть за вільних гігабайтів: так буває, коли в каталозі накопичилися мільйони дрібних файлів (сесії PHP, кеш, черги).
Ви також можете побачити використане місце в панелі за адресою /hosting/vds/m/<id> — кільце на вкладці "Overview". Воно заповнюється з даних, які передає qemu-guest-agent; якщо агента видалено, кільце залишається порожнім, а панель натомість показує команду встановлення.
Знайдіть винуватця
du -xh --max-depth=1 / 2>/dev/null | sort -h | tail -15
du -xh --max-depth=1 /var 2>/dev/null | sort -h | tail -15
ncdu -x / # apt install ncdu, interactive
find / -xdev -type f -size +500M -exec ls -lh {} \; 2>/dev/null
Прапорець -x утримує пошук у межах однієї файлової системи й не дає йому заблукати в /proc та змонтовані каталоги.
Типові винуватці: логи в /var/log, кеш пакетів у /var/cache, образи й томи Docker у /var/lib/docker, дампи баз даних, забуті архіви в /root і /tmp, файли від старих релізів застосунку.
Звільніть місце
journalctl --vacuum-size=200M
apt clean # Debian, Ubuntu
dnf clean all # AlmaLinux, CentOS Stream
docker system prune -af --volumes # careful: will remove unused volumes
find /tmp -type f -mtime +7 -delete
Щоб назавжди обмежити журнал, відредагуйте /etc/systemd/journald.conf (SystemMaxUse=300M); деталі дивіться в статті Журнали systemd. Для файлів застосунків налаштуйте logrotate: без ротації один app.log легко виростає до десятків гігабайтів.
Пастка: видалений, але все ще відкритий файл
Ви видалили величезний лог, але df показує ті самі числа. Поки процес тримає файл відкритим, місце не повертається.
lsof +L1 | head -20
Правильне рішення — перезапустити службу, що тримає файл (systemctl restart nginx), або обрізати файл, не видаляючи його:
: > /var/log/nginx/access.log
Пастка: закінчилися іноди
df -i
find /var/www -xdev -type d -printf '%h\n' | sort | uniq -c | sort -rn | head
Шукайте каталог із сотнями тисяч файлів і прибирайте його частинами, щоб не покласти машину:
find /var/lib/php/sessions -type f -mtime +2 -delete
Якщо місця немає зовсім
Коли диск заповнений на 100% і система ледве ворушиться, увійдіть через вкладку "Console" в панелі, звільніть хоча б сотню мегабайтів (journalctl --vacuum-size=50M спрацьовує майже завжди) і продовжуйте діагностику як звичайно. У зовсім кепському випадку допоможе рятувальний диск: машина завантажується в SystemRescue, ваш диск з'являється як /dev/sda, ви монтуєте його й прибираєте ззовні.
Щоб це не повторилося
- Сповіщення на порозі 85% — дивіться Сповіщення про простої сайту.
- Ротуйте всі логи застосунків, а не лише системні.
- Надсилайте дампи баз даних та архіви за межі сервера одразу, а не тримайте їх у
/root. - Якщо прибирати вже нічого, а дані постійно зростають, переходьте на тариф із більшим диском: 40, 80, 120, 160, 200 і 250 ГБ. Лише апгрейди: диски не можна зменшувати, а даунгрейди недоступні.
Не видаляйте файли з
/var/libі/usrнавмання: саме там живуть дані баз даних і системні пакети. Спершу з'ясуйте, чому належить каталог, і лише потім прибирайте.