−25%

на годовую оплату Windows, до 31.10. К тарифам

EQVPS

Как освободить место на диске VPS и ничего не сломать

Диск VPS забит? Находим, что съело место, через du и ncdu, и чистим кэш apt, журналы, остатки Docker и логи — без потери нужных данных.

«No space left on device» никогда не приходит вовремя. База перестаёт принимать записи, apt не может доделать обновление, а Docker отказывается скачать образ, который нужен прямо сейчас. Хорошая новость: на маленьком VPS виновник почти всегда один из пяти, и найти его можно за пару минут.

1. Насколько всё плохо?

df -h /
df -i /

Первая команда показывает занятое место, вторая — иноды. Если иноды на 100%, а места вроде хватает, значит, у вас миллионы мелких файлов: сессии, почтовая очередь, каталог кэша. Проблема другая, симптом тот же.

2. Ищем, что занимает место

Проходим от корня и сортируем по размеру:

du -xh / --max-depth=1 2>/dev/null | sort -h | tail -15

Флаг -x не даёт уйти на другие файловые системы вроде /proc. Дальше спускайтесь в самый большой каталог. Для интерактивного просмотра удобнее ncdu:

apt install -y ncdu
ncdu -x /

Навигация стрелками, d — удалить. С последним аккуратнее.

3. Быстрые победы

Это безопасно на любом сервере с Ubuntu или Debian:

apt clean
apt autoremove --purge -y
journalctl --disk-usage
journalctl --vacuum-size=200M

apt autoremove заодно убирает старые ядра. Журнал systemd удивляет чаще всего: без ограничений он дорастает до нескольких гигабайт. Чтобы ограничить его навсегда, пропишите SystemMaxUse=200M в /etc/systemd/journald.conf и выполните systemctl restart systemd-journald.

4. Остатки Docker

Если у вас Docker, смотрите сюда в первую очередь. Старые образы и кэш сборки копятся с каждым деплоем:

docker system df
docker image prune -a
docker builder prune

docker image prune -a удаляет образы, которые не использует ни один запущенный контейнер. Обычно это и нужно, просто при следующем деплое их придётся скачать заново.

Опасная команда — docker system prune -a --volumes. В томах лежат ваши данные, а том остановленного контейнера считается неиспользуемым. Так теряют базы данных. Не копируйте её из ответа на форуме.

Второй скрытый пожиратель места — логи контейнеров. Ограничьте их в /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" }
}

После этого перезапустите Docker. Лимит действует только на контейнеры, созданные после изменения, поэтому пересоздайте самые болтливые через docker compose up -d --force-recreate.

5. Логи и забытые файлы

Ищем большие файлы по всему диску:

find / -xdev -type f -size +500M -exec ls -lh {} + 2>/dev/null
find /var/log -type f -size +100M -exec ls -lh {} + 2>/dev/null

Типичные находки: backup.tar.gz полугодовой давности в /root, дамп базы, который кто-то собирался скачать, лог приложения без ротации.

Лог, в который сервис всё ещё пишет, не удаляйте через rm — обнулите его:

truncate -s 0 /var/log/myapp/app.log

Если файл уже удалён, а место не вернулось, его держит открытым какой-то процесс:

lsof +L1

Перезапустите сервис из списка, и место освободится.

Если чистки мало

Иногда данные просто настоящие: растущая база, загрузки пользователей, файл модели. Тогда честное решение — больше диска. Смена тарифа увеличивает диск на месте и сохраняет всё: у Nano 15 ГБ, у Micro 25 ГБ, у Small 35 ГБ, у Medium 45 ГБ. Сервер перезагрузится один раз. Подробности — в документации по тарифам.

Ещё одна вещь тихо занимает место — swap-файл. Если вы делали всё по нашей инструкции по swap, эти 1–2 ГБ заняты осознанно. А если главный потребитель — Docker, то установка Docker и развёртывание Compose-стека показывают, как держать образы под контролем.

Привычка, которая избавляет от всего этого: ограничьте журнал и логи Docker в первый же день. Две строки конфигурации — и «диск переполнен» почти перестаёт случаться.

Частые вопросы

Безопасно ли запускать 'docker system prune -a'?

Команда удаляет остановленные контейнеры, неиспользуемые сети, кэш сборки и все образы, которые не нужны запущенным контейнерам. Данные остаются, если не добавить --volumes. С этим флагом удаляются и неиспользуемые тома — а том остановленного контейнера с базой считается неиспользуемым. Без полной уверенности флаг не ставьте.

Удалил большой лог, а df всё равно показывает полный диск. Почему?

Файл ещё открыт работающим процессом, и ядро держит место. Найдите процесс командой 'lsof +L1' и перезапустите сервис. В следующий раз очищайте активный лог через 'truncate -s 0 файл', а не удаляйте.

Сколько места держать свободным?

Не меньше 10–15%. Базам данных, обновлениям пакетов и Docker нужно временное место, а диск, заполненный на 100%, может испортить базу прямо во время записи.

Можно добавить диск без переустановки?

Да. Переход на тариф побольше увеличивает диск на месте и сохраняет данные: у Nano 15 ГБ, у Micro 25 ГБ, у Small 35 ГБ, у Medium 45 ГБ. Сервер один раз перезагрузится.

Что обычно забивает маленький VPS?

По нашему опыту — образы и кэш сборки Docker, журналы systemd, логи приложений без ротации и забытые дампы баз или архивы в /root.

Комментарии

Пока нет комментариев. Будьте первым.

Оставить комментарий

Комментарии проходят модерацию перед публикацией.