TGViewer
Linux Ready | DevOps Linux Ready | DevOps @linux_ready · 11.2K subscribers
Post #1404 2.7K
Разбираемся с диагностикой утечек дискового пространства!

Иногда сервер начинает терять свободное место, но при этом du не показывает ничего критичного. Один из типовых сценариев — удалённые файлы, которые продолжают удерживаться процессами.

С точки зрения Linux файл уже удалён из дерева каталогов, но inode и блоки остаются заняты, пока хотя бы один процесс держит файловый дескриптор открытым.

Базовая проверка состояния диска:
df -h


Это первый шаг — смотрим, есть ли реальное заполнение файловой системы. Если раздел почти полный, а по каталогам картина не бьётся с ожиданиями, дальше имеет смысл копать глубже.

Сравнение с фактическим использованием:
du -xhd1 /var


-x важен: он ограничивает обход текущей файловой системой и исключает мусор с других mount points.

Если df показывает занято много, а du — нет, почти всегда это либо удалённые открытые файлы, либо редкие случаи с скрытыми mount/overlay слоями (контейнеры тоже сюда попадают).

Поиск удалённых файлов, удерживаемых процессами:
sudo lsof +L1


Здесь важный момент — +L1 означает link count < 1, то есть файл уже удалён, но ещё открыт процессом.

Типичный пример:
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NLINK NAME
java 1234 app 45w REG 8,1 12G 0 /var/log/app.log (deleted)


Файл исчез из каталога, но процесс продолжает писать в него. На практике это часто логи или временные буферы.

Быстро отфильтровать только проблемные записи:
sudo lsof +L1 | grep deleted


Удобно, когда вывода много и нужно сразу увидеть реальные утечки.

Посмотреть открытые дескрипторы процесса:
ls -l /proc/PID/fd


Каждый файл там — это активный файловый дескриптор. Если среди них есть (deleted), это и есть удерживаемое место.

Приближённая оценка объёма:
sudo lsof +L1 | awk '{print $7}' | grep -E '^[0-9]+$' | awk '{sum+=$1} END {print sum/1024/1024/1024 " GB"}'


Честно говоря, это грубая оценка. SIZE/OFF не всегда чистый байтовый формат, поэтому цифра больше для ориентира, чем для точного аудита.

Как освобождается место: самый нормальный вариант — дать процессу корректно закрыть файл:
sudo systemctl restart service_name


Если это сервис с поддержкой переоткрытия логов:
kill -HUP PID


Классический сценарий — лог-файл удалили вручную через rm, но процесс продолжает писать в уже открытый inode. В итоге место на диске исчезло, хотя файлов как будто нет.

Если df показывает заполнение, а du не объясняет куда делось место — первым делом проверяются открытые удалённые файлы через lsof +L1. Это один из самых быстрых способов найти невидимую утечку диска в Linux-системах.

🚪 Linux Ready | #практика
  • 👍 17
  • 🔥 8
  • 🤝 6
  • ❤ 2
More from @linux_ready
  1. Oct 5, 2026Для отладки изолированного процесса необязательно заходить внутрь контейнера или менять ег…
  2. Oct 5, 2026Как оплачивать зарубежные сервисы в 2026 году? Можно бегать между посредниками и бояться б…
  3. Oct 5, 2026📂 Напоминалка для работы с SED! Например, sed 's/old/new/g' file.txt заменяет все вхожден…
  4. Oct 2, 2026В Linux можно копировать собранные файлы так, чтобы не менять файл назначения, если новая…
  5. Oct 2, 2026🎓 Как гарантированно войти в сферу кибербезопасности с официальным дипломом? Самостоятель…
  6. Oct 2, 2026👩‍💻 SSH: подключение, ключи, туннели и Jump Host! В этом посте собраны основные команды…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →