TGViewer
DevOps DevOps @devopsitsec · 23.7K subscribers
Post #1483 4.12K
🐧 Задача с подвохом: Странное поведение с `df` и `du`

Условие:

Вы замечаете, что на сервере /var/log неожиданно «занялось» много места. Проверяете это так:


df -h /var


И видите, что диск почти полностью заполнен. Но при этом, когда проверяете размер файлов в /var/log:


du -sh /var/log


— оказывается, что размер логов совсем небольшой, явно не соответствующий тому, что показывает df.

❓ Вопрос:
Почему возникает такая ситуация? Что именно занимает место, если файлы почти пустые? Как это исправить, не перезагружая сервер?

🔍 Подсказка:

На сервере активно работают несколько приложений, которые записывают логи. Недавно был произведён logrotate, старые логи удалились.

---

✅ Разбор:

💥 Подвох:

Многие думают, что после удаления файла место сразу освобождается. Но в Linux есть важный нюанс: если процесс всё ещё держит файл открытым, даже после удаления файла из файловой системы, его содержимое продолжает занимать место на диске.

Вот что происходит:

-
du показывает размер существующих файлов, поэтому он маленький (ведь файлы удалены).
-
df показывает реальное использование блочного устройства, и оно включает те данные, которые всё ещё заняты удалёнными, но открытыми файлами.

🚩 Это классическая ситуация после
logrotate: старые логи удаляются, но процессы, которые их писали (например, nginx, `mysql`), продолжают держать дескрипторы открытыми.

🔧 Как найти виновника:

Используем
lsof для поиска удалённых, но ещё открытых файлов:

```bash
lsof | grep deleted
```

Вы увидите что-то вроде:

```
nginx 1234 ... /var/log/nginx/access.log (deleted)
```

🛠 Как исправить без перезагрузки:

1️⃣ Перезапустить приложение, которое держит файл открытым:

```bash
systemctl restart nginx
```

2️⃣ Если нельзя перезапустить, можно попробовать «сбросить» файл, подменив его на новый (подходит не всегда).

---

✅ Вывод:

•
df и du показывают разное, потому что считают разными методами:
-
df: что реально занято на диске (включая удалённые, но ещё открытые файлы)
-
du: что физически доступно через файловую систему

• Если место не освобождается после удаления файла — ищите открытые файловые дескрипторы удалённых файлов. Это классика для DevOps!

💡 Бонус-вопрос для гуру:
Что произойдёт, если в
lsof вы видите удалённый файл, но процесс — это docker? Как поступить в этом случае? 😉
  • 👍 30
  • 🔥 15
  • ❤ 3
  • 👎 1
More from @devopsitsec
  1. Sep 29, 2026photo post
  2. Sep 28, 2026Фильтр Блума: миллион элементов в 1,2 МБ - как это работает? Почему алгоритм «помнит» то,…
  3. Sep 26, 2026Согласны ?
  4. Sep 26, 2026📌Fable 5.1 рассчитала амплитуду рассеяния в девяти петлях Модель в среде Claude Science р…
  5. Sep 25, 2026Как строить инфраструктуру, когда часть сервисов — on-prem, а часть — в cloud Гибридная ин…
  6. Sep 24, 2026Снёс коммиты? Как вернуть код после git reset -hard Одна команда - и три коммита исчезли и…
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 →