Місце на диску: куди воно зникає
Як знайти, що заповнило диск, чому небезпечний видалений, але відкритий файл, що можна безпечно чистити і чому кільце використання в панелі може показувати не те.
Оновлено 23 серпня 2026 р.
Заповнення диска виглядає як будь-який збій: база даних не пише, сайт повертає помилку, контейнери перезапускаються. Диск VDS має від 40 ГБ на початковому тарифі до 250 ГБ на найвищому, і майже завжди його заповнюють одні й ті самі речі.
Перші команди
df -h
df -i
sudo du -x -h -d1 / | sort -h | tail -15
Не пропускайте df -i: простір може бути, але скінчитися inode — тоді ви побачите «disk full» за наявних вільних гігабайтів. Зазвичай винні мільйони дрібних файлів кешу.
Потім заглибтеся в найбільшу теку:
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 <service>
docker compose restart <service>
Ніколи не звільняйте місце командою
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 "Disk is ${USED}% full" | mail -s "VDS: low disk space" you@example.com
fi
Поріг 85% дає вам запас часу на реакцію. Не можна чекати на 100%: коли диск заповнений, деякі служби навіть не зможуть записати лог про те, що сталося.
Якщо місця немає зовсім
- Звільніть пару гігабайтів швидкими заходами:
journalctl --vacuum-size=100M,apt clean,docker builder prune -f. - Знайдіть справжню причину командами вище — інакше все повториться за тиждень.
- Якщо дані справді виросли, потрібно збільшити диск, перейшовши на вищий тариф. Зниження недоступне: диск не можна зменшити.