Skip to content
VDS · Резервні копії та диск

Місце на диску: куди воно зникає

Як знайти, що заповнило диск, чому небезпечний видалений, але відкритий файл, що можна безпечно чистити і чому кільце використання в панелі може показувати не те.

Оновлено 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 dfdocker image prune, docker builder prune
Системний журналjournalctl --disk-usagejournalctl --vacuum-size=200M
Старі ядра в /bootdf -h /bootapt autoremove --purge
Кеш пакетівdu -sh /var/cache/aptapt 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%: коли диск заповнений, деякі служби навіть не зможуть записати лог про те, що сталося.

Якщо місця немає зовсім

  1. Звільніть пару гігабайтів швидкими заходами: journalctl --vacuum-size=100M, apt clean, docker builder prune -f.
  2. Знайдіть справжню причину командами вище — інакше все повториться за тиждень.
  3. Якщо дані справді виросли, потрібно збільшити диск, перейшовши на вищий тариф. Зниження недоступне: диск не можна зменшити.