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
Иногда ситуация выглядит странно:
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