Назад | Перейти на главную страницу

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

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

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

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

Это Linux, ext3.

С уважением

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

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

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

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

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

    df -i

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

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

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

    sudo find / proc / * / fd -printf "% l \ t% s \ n" | grep удален | вырезать -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 не увеличивает размер каталогов? Тем не менее, это кажется ОГРОМНОЙ разницей, которая не может нести за все это.