Кончилось место на диске
Как быстро найти, что съело диск, освободить гигабайты без риска и разобраться с ловушками: удалённые открытые файлы и закончившиеся inode.
Обновлено 23 августа 2026 г.
Заполненный диск ломает всё сразу: база перестаёт принимать записи, сайт отдаёт ошибки, journalctl отказывается работать, а иногда не пускает даже SSH, потому что нечего записать в журнал сессии. Действовать нужно быстро и по порядку.
Проверить
df -h
df -i
Первая команда — место, вторая — inode. Заполненные inode дают ту же ошибку «No space left on device» при свободных гигабайтах: так бывает, когда в каталоге накопились миллионы мелких файлов (сессии PHP, кэш, очереди).
Занятое место видно и в панели /hosting/vds/<id> — кольцо на вкладке «Обзор». Оно заполняется по данным гостевого агента 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, интерактивно
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 # осторожно: удалит неиспользуемые тома
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
Ловушка: кончились inode
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 % и система еле шевелится, зайдите через вкладку «Консоль» в панели, освободите хотя бы сотню мегабайт (journalctl --vacuum-size=50M почти всегда срабатывает), и продолжайте разбор в нормальном режиме. В совсем тяжёлом случае поможет диск восстановления: машина грузится в SystemRescue, ваш диск виден как /dev/sda, монтируете и чистите со стороны.
Чтобы не повторилось
- Оповещение по порогу 85 % — см. Оповещения о падении сайта.
- Ротация всех журналов приложения, а не только системных.
- Дампы баз и архивы — сразу наружу, а не в
/root. - Если чистить нечего, а данные растут — переход на ступень с большим диском: 40, 80, 120, 160, 200 и 250 ГБ. Только вверх: диск не сжимается, понижение не предусмотрено.
Не удаляйте наугад файлы из
/var/libи/usr: там лежат данные баз и системные пакеты. Сначала выясните, чей это каталог, и только потом чистите.