# Диск заповнений на 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/uk/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/uk/kb/monitoring-vds/).
- Увімкніть і перевірте ротацію логів для всіх сервісів.
- Обмежте розмір журналу systemd параметром `SystemMaxUse`.
- Регулярно чистіть невикористовувані образи Docker і кеш пакетів.
- Тримайте під рукою команду `du -h --max-depth=1 | sort -rh` — вона закриває 90% випадків діагностики.

---

Джерело: https://www.zevshost.net/uk/kb/disk-zapolnen-diagnostika/
