# Диск заполнен на VDS: как найти пожирателя места

> Диск заполнен на VDS — команды df, du, lsof и journalctl помогут найти файлы и логи, которые съели место, и безопасно очистить сервер.

## Как быстро проверить, что место на диске закончилось

Если сайт или база данных на 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](https://www.zevshost.net/ru/kb/journalctl-rsyslog-logi/). Для остальных логов настройте ротацию через 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](https://www.zevshost.net/ru/kb/monitoring-vds/).
- Включите и проверьте ротацию логов для всех сервисов.
- Ограничьте размер журнала systemd параметром `SystemMaxUse`.
- Регулярно чистите неиспользуемые образы Docker и кэш пакетов.
- Держите под рукой команду `du -h --max-depth=1 | sort -rh` — она закрывает 90% случаев диагностики.

---

Источник: https://www.zevshost.net/ru/kb/disk-zapolnen-diagnostika/
