Место на диске: куда оно уходит
Как найти, что съело диск, чем опасен удалённый, но открытый файл, что чистить безопасно и почему кольцо занятости в панели может показывать не то.
Обновлено 23 августа 2026 г.
Кончившееся место — авария, которая выглядит как что угодно: база не пишет, сайт отдаёт ошибку, контейнеры перезапускаются. Диск на VDS от 40 ГБ на младшей ступени до 250 ГБ на старшей, и заполняется он почти всегда одними и теми же вещами.
Первые команды
df -h
df -i
sudo du -x -h -d1 / | sort -h | tail -15
df -i не пропускайте: место может быть, а иноды кончиться — тогда «диск полон» при свободных гигабайтах. Виноваты обычно миллионы мелких файлов кеша.
Дальше углубляйтесь в самый крупный каталог:
sudo du -x -h -d1 /var | sort -h | tail
sudo du -x -h -d1 /var/lib | sort -h | tail
Ключ -x держит подсчёт в пределах одной файловой системы и не уводит в примонтированные каталоги.
Обычные виновники
| Что | Как проверить | Что делать |
|---|---|---|
| Журналы контейнеров | du -sh /var/lib/docker/containers/*/*-json.log | Ограничить размер, см. журналы |
| Образы и кеш сборки | docker system df | docker image prune, docker builder prune |
| Системный журнал | journalctl --disk-usage | journalctl --vacuum-size=200M |
Старые ядра в /boot | df -h /boot | apt autoremove --purge |
| Кеш пакетов | du -sh /var/cache/apt | apt clean |
| Копии, оставленные на месте | du -sh /backup | Увезти, см. другую площадку |
| Загрузки пользователей | du -sh /var/www/uploads | Хранилище снаружи или диск больше |
Удалённый файл, который занимает место
Классическая загадка: du показывает 5 ГБ, df — 30 ГБ занято. Значит, файл удалили, но процесс держит его открытым, и место не освободится до перезапуска.
sudo lsof +L1 | head -20
В выводе будут процессы и размеры. Лечится перезапуском виновника:
sudo systemctl restart <служба>
docker compose restart <служба>
Никогда не освобождайте место командой
rmпо работающему файлу журнала. Правильный способ — обнулить:sudo truncate -s 0 /var/log/big.log. Удаление оставит место занятым и вдобавок лишит вас журнала.
Кольцо занятости в панели
На вкладке «Обзор» есть кольцо занятости диска. Оно считается через гостевой агент qemu-guest-agent. Если агент снесён или не запущен, данные не обновляются — панель покажет команду установки. Проверить внутри машины:
systemctl status qemu-guest-agent
Показания агента и df -h должны совпадать. Расхождение чаще всего означает, что часть места занята в примонтированном отдельно разделе, — см. разделы и файловые системы.
Профилактика
Заведите задание по расписанию с чисткой и предупреждением:
#!/bin/bash
USED=$(df --output=pcent / | tail -1 | tr -dc '0-9')
if [ "$USED" -gt 85 ]; then
journalctl --vacuum-size=200M
apt clean
docker image prune -f
echo "Диск занят на ${USED}%" | mail -s "VDS: мало места" you@example.com
fi
Порог 85 % даёт запас на реакцию. Ждать 100 % нельзя: при полном диске часть служб не сможет даже записать журнал о том, что случилось.
Если места нет совсем
- Освободите пару гигабайт быстрыми средствами:
journalctl --vacuum-size=100M,apt clean,docker builder prune -f. - Найдите настоящую причину командами выше — иначе через неделю всё повторится.
- Если данные действительно выросли, диск нужно увеличить переходом на ступень выше. Понижение не предусмотрено: диск не сжимается.