Диск заповнений після видалення файлів: причини та діагностика в Windows, Linux і контейнерах

event 25.04.2026 19:34
| category System administration | person iron_will | comment 0 | visibility 6 | |

Видалення великого файлу не завжди означає миттєве повернення вільного місця на диску. Багато користувачів стикаються з ситуацією, коли після видалення ISO-образу, резервної копії, логів або архіву на 50 ГБ система продовжує показувати той самий рівень заповнення накопичувача. Особливо часто це трапляється у Windows, Linux-серверах, віртуальних машинах та контейнеризованих середовищах.

На практиці проблема зазвичай не пов’язана з несправністю диска. Найчастіше причина полягає у механізмі роботи файлової системи, кошику, відкритих дескрипторах файлів, снапшотах або затримці оновлення метаданих. Для системного адміністратора чи DevOps-інженера важливо розуміти, де саме шукати джерело проблеми.

У цій статті розглянемо, чому після видалення файлу місце не повертається, як перевірити це у Windows та Linux, а також які інструменти реально допомагають звільнити простір без перезавантаження сервера чи втрати даних.

Чому після видалення файлу диск залишається заповненим

Причин може бути кілька:

  1. Файл переміщено до кошика, а не видалено остаточно.
  2. Файл досі використовується процесом.
  3. Файлова система ще не оновила статистику.
  4. Є снапшоти, shadow copies або резервні копії.
  5. Простір зайнятий тимчасовими файлами.
  6. Видалення відбулося всередині контейнера чи віртуального диска.
  7. Є проблема з inode або файловою системою.

Розглянемо кожен випадок детально.

Windows: файл видалено, але місце не повернулося

Кошик займає місце

У Windows натискання Delete зазвичай переміщує файл у Recycle Bin. Файл фізично залишається на диску.

Що зробити:

  • Очистити кошик вручну.
  • Використати Shift + Delete для безповоротного видалення.
  • Перевірити системні диски окремо.

Через PowerShell:

Clear-RecycleBin -Force

Shadow Copies та точки відновлення

Windows може зберігати попередні версії файлів або резервні знімки.

Перевірка:

vssadmin list shadowstorage

Видалення старих копій:

vssadmin delete shadows /for=C: /oldest

Використовуйте обережно, оскільки це впливає на відновлення системи.

Файл утримується процесом

Програма могла відкрити файл і не закрити дескриптор. Навіть після видалення Windows може не звільняти простір одразу.

Інструменти:

  • Process Explorer
  • Resource Monitor
  • Handle.exe від Sysinternals

Приклад:

handle.exe filename.log

Linux: файл видалено, але диск усе ще заповнений

Це один із найчастіших кейсів на серверах.

Видалений файл використовується процесом

У Linux файл можна видалити, але якщо процес тримає його відкритим - дані залишаються на диску до завершення процесу.

Класичний приклад:

  • nginx log file
  • java application log
  • backup archive in progress

Перевірка:

lsof | grep deleted

Або:

lsof +L1

Це покаже файли зі статусом deleted, які ще відкриті процесами.

Приклад виводу:

java  1422 appuser  5w REG 8,1 53687091200 /var/log/app.log (deleted)

Тут Java-процес утримує файл на 50 ГБ.

Рішення:

Перезапустити сервіс:

systemctl restart myapp

Або завершити процес:

kill -TERM 1422

Після закриття дескриптора місце звільниться.

Перевірка різниці між df і du

Якщо df показує заповнений диск, а du - ні, майже завжди причина у відкритих видалених файлах.

Команди:

df -h  
du -sh /var

Пояснення:

  • df показує реальне використання файлової системи.
  • du рахує наявні файли в каталогах.

Якщо файл видалено, du його вже не бачить, а df ще враховує.

Docker та контейнери

У контейнерних середовищах видалення файлу всередині контейнера не завжди повертає місце хосту.

Перевірка Docker:

docker system df

Очищення:

docker system prune -a

Видалення невикористаних томів:

docker volume prune

Важливо:

Перед очищенням перевіряйте, чи томи не містять production-даних.

Kubernetes: проблема з ephemeral storage

У Kubernetes видалення логів або кешу в контейнері може не дати ефекту через:

  • container runtime cache
  • overlayfs layers
  • image cache
  • node pressure

Перевірка вузла:

df -h  
crictl images  
crictl ps -a

Очищення:

crictl rmi --prune

Віртуальні машини: VMDK, VHDX, QCOW2

У віртуалізації гостьова ОС може звільнити місце, але файл віртуального диска на хості не зменшиться автоматично.

Приклад:

Ви видалили 50 ГБ у VM, але файл server.vhdx залишився тим самим.

Рішення:

Hyper-V:

Optimize-VHD -Path "D:\VM\server.vhdx" -Mode Full

VMware:

Виконати guest zeroing + compact.

QCOW2:

qemu-img convert -O qcow2 old.qcow2 new.qcow2

macOS: локальні snapshots Time Machine

На macOS місце може утримуватися локальними снапшотами.

Перевірка:

tmutil listlocalsnapshots /

Видалення:

sudo tmutil deletelocalsnapshots <date>

Файлова система пошкоджена або кеш не оновився

Іноді статистика диска оновлюється із затримкою.

Linux:

sync

Потім повторити:

df -h

Перевірка файлової системи:

fsck /dev/sda1

Лише на відмонтованому розділі або в maintenance mode.

Windows:

chkdsk C: /f

Як швидко знайти, що займає диск

Linux

Топ великих директорій:

du -xh / | sort -rh | head -20

ncdu - найзручніший інструмент:

apt install ncdu  
ncdu /

Windows

PowerShell:

Get-ChildItem C:\ -Recurse | Sort-Object Length -Descending | Select-Object FullName,Length -First 20

GUI інструменти:

  • WinDirStat
  • TreeSize
  • WizTree

Практичний кейс: лог-файл 50 ГБ на Linux

Ситуація:

  • Сервер Ubuntu
  • /var/log/app.log виріс до 50 ГБ
  • Адміністратор виконав:
rm /var/log/app.log

Місце не звільнилось.

Діагностика:

lsof | grep deleted

Результат:

python3 PID 1234 /var/log/app.log (deleted)

Вирішення:

systemctl restart app.service

Після цього:

df -h

Вільне місце повернулося.

Як зробити правильно:

Не видаляти лог, а очищати:

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

Або налаштувати logrotate.

Як уникнути проблеми надалі

Для Linux-серверів

  1. Використовуйте logrotate.
  2. Моніторте disk usage через Prometheus/Zabbix.
  3. Перевіряйте lsof +L1.
  4. Не видаляйте активні лог-файли вручну.

Для Windows

  1. Контролюйте Recycle Bin.
  2. Чистіть temp-каталоги.
  3. Керуйте restore points.
  4. Використовуйте Storage Sense.

Для Docker/Kubernetes

  1. Регулярно чистіть images.
  2. Обмежуйте log size.
  3. Використовуйте retention policy.
  4. Моніторте node storage pressure.

Алгоритм діагностики, якщо місце не звільнилось

  1. Перевірити кошик.
  2. Оновити статистику диска.
  3. Знайти великі каталоги.
  4. Перевірити відкриті deleted файли.
  5. Перевірити снапшоти.
  6. Перевірити Docker/VM storage.
  7. Перезавантажити сервіс або систему за потреби.

Висновки

Якщо після видалення файлу на 50 ГБ місце не звільнилось - це не аномалія, а типовий сценарій роботи сучасних ОС та файлових систем. Найчастіше проблема полягає не у самому видаленні, а в тому, що файл усе ще використовується процесом, переміщений у кошик або утримується снапшотами.

Для Windows основний фокус - кошик, shadow copies та відкриті файли. Для Linux - lsof, df, du, logrotate та процеси, що тримають дескриптори. У контейнерних середовищах варто окремо перевіряти image cache і storage driver.

Грамотна діагностика дозволяє звільнити десятки або сотні гігабайтів без ризику для production-середовища та без зайвого простою сервісів.

cookie
This website uses cookies to improve your experience. Learn more