it-swarm-ru.tech

разница между 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.

с уважением

33
Andreas Kuntzagk

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

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

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

32
Andreas Kuntzagk

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

  • Каково ваше использование инода, если оно почти на 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) | до н.э

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

18
Kyle Brandt

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

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

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

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

8
wolfgangsz

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

lsof +L 1 /home | grep -i deleted

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

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

7
Sverre

По умолчанию, когда вы форматируете файловую систему с 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, однако, поскольку это ваша корневая файловая система, я бы с осторожностью это сделал. Если файловая система фактически заполнена, это может усложнить задачу обслуживания, необходимую для ее очистки.

1
Alex

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

0
Brian Knoblauch