У меня есть файловый сервер, где df сообщает о 94%/full. Но по словам дю, гораздо меньше используется:
# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 270G 240G 17G 94% /
# du -hxs /
124G /
Я читал, что открытые, но удаленные файлы могут быть ответственны за это, но перезагрузка не исправила это.
Это Linux, ext3.
с уважением
Хорошо, нашел это.
У меня была старая резервная копия в/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) | до н.э
Однако это почти вдвое меньше. Запустите 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 не добавляет размер каталогов? Тем не менее, кажется, огромная разница, которая не может нести ответственность за все это.