Разница между du и df

У меня есть файловый сервер, где df сообщает о 94% / full. Но по словам дю, гораздо меньше используется:

# df -h /
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             270G  240G   17G  94% /
# du -hxs /
124G    /

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

Это Linux, ext3.

С уважением

7 ответов

Решение

Хорошо, нашел это.

У меня была старая резервная копия в /mnt/Backup в той же файловой системе, а затем в этом месте был подключен внешний диск. Так что дю не видел файлы. Таким образом, очистка вернула мне место на диске.

Вероятно, так и было: внешний диск был размонтирован во время выполнения сценария ежедневного резервного копирования.

Я не думаю, что вы найдете более подробное объяснение, чем эта ссылка по всем причинам, по которым она может быть отключена. Некоторые основные моменты, которые могут помочь:

  • Каково ваше использование инода, если оно почти на 100% может испортить ситуацию:

    df -i

  • Какой у тебя размер блока? Множество маленьких файлов и большой размер блока могут немного исказить его.

    sudo tune2fs -l / dev / sda1 | grep 'Размер блока'

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

    sudo find / proc / * / fd -printf "% l \ t% s \ n" | grep удалено | cut -f2 | (tr '\n' +; echo 0) | до н.э

Тем не менее, это почти в 2 раза меньше. Запустите fsck для раздела, пока он отключен, чтобы быть безопасным.

Это похоже на случай удаления файлов, в то время как процессы все еще имеют их открытыми. Это разъединение происходит потому, что команда du суммирует пространство файлов, существующих в файловой системе, а df показывает блоки, доступные в файловой системе. Блоки открытого и удаленного файла не освобождаются, пока этот файл не будет закрыт.

Вы можете узнать, какие процессы открыли, но удалили файлы, изучив /proc

find /proc/*/fd -ls | grep deleted

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

Я согласна с тем что

lsof +L 1 /home | grep -i deleted

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

Я убил функции Perl, и это сделало du а также df почти идентичны, дело закрыто.

По умолчанию, когда вы форматируете файловую систему с EXT3, 5% диска зарезервировано для root. df учитывает этот резерв, когда сообщает о том, что доступно, а du показывает, что на самом деле используется.

Вы можете просмотреть зарезервированные блоки, выполнив:

tune2fs -l / dev / sda | grep -i резерв

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

Reserved block count:     412825
Reserved GDT blocks:      1022
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)

Если вы хотите отрегулировать это до более низкого процента, вы можете сделать это с помощью чего-то вроде

tune2fs -m 1 /dev/sda

Вы можете уменьшить его до 0, однако, поскольку это ваша корневая файловая система, я бы с осторожностью это сделал. Если файловая система фактически заполнена, это может усложнить задачу обслуживания, необходимую для ее очистки.

Возможно ли, что du не добавляет размер каталогов? Тем не менее, кажется, огромная разница, которая не может нести ответственность за все это.

Другие вопросы по тегам