TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.52K subscribers
Post #648 476
du vs df: почему Linux показывает разный размер диска

Иногда ситуация выглядит странно:

df -h /


показывает, что занято 80 GB.

А:

du -sh /


находит только 55 GB.

Кажется, что Linux «потерял» 25 GB. На самом деле du и df измеряют разные вещи.

▪️Что считает df
df смотрит на файловую систему и её блоки:

df -h /


Он показывает, сколько места файловая система считает занятым и свободным.

▪️Что считает du
du обходит дерево каталогов и суммирует пространство, связанное с найденными файлами:

du -xhd1 / 2>/dev/null


-x здесь важен: он не позволяет уйти на другие файловые системы.

▪️Одна из главных причин расхождения
Процесс может держать открытым файл, который уже удалили.

Например:

rm /var/log/app.log


Имя файла исчезло из каталога, но процесс всё ещё держит его открытым.
Для du такого файла уже не существует.
А файловая система продолжает считать его блоки занятыми.
Проверить:

lsof +L1


Можно увидеть что-то вроде:

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


Пока процесс не закроет этот дескриптор, место может не освободиться.

▪️Есть и другие причины
Например, du без -x может пересекать mount points и давать неожиданный результат.
Или часть пространства файловой системы зарезервирована и не доступна обычным пользователям.

Посмотреть файловую систему подробнее:

findmnt /
df -h /
df -i /


▪️Практический сценарий
На сервере внезапно заканчивается место:

df -h /


Показывает:

/dev/sda2   100G   95G   5G   95% /


Но:

du -xsh /


показывает только 70G.

Первое, что стоит проверить:

lsof +L1


Если там огромный (deleted) лог, причина найдена.

▪️Важный нюанс
df отвечает примерно на вопрос:

«Сколько блоков файловой системы сейчас занято?»

А du:

«Сколько места занимают доступные мне файлы в этом дереве?»

Поэтому при расхождении df и du не стоит сразу запускать rm -rf по большим каталогам.

Сначала нужно понять, куда именно делось пространство.

BashTex 📱 #bash #systemd
  • 👍 6
More from @bash_tex
  1. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  2. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  3. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  4. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  5. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
  6. Sep 29, 2026tee + process substitution: один поток и несколько получателей Иногда нужно одновременно:…
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 →