du vs df вихід


3

Чому існують відмінності між виходами команд dfта duкомандами?

Чому вони не точні у виході?

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 1012M 394M 567M 42% /
/dev/sda2 99M 47M 48M 50% /boot
/dev/sda8 9.9G 1.5G 7.9G 16% /home
none 1004M 0 1004M 0% /dev/shm
/dev/sda9 347G 93G 236G 29% /srv
/dev/sda11 2.0G 81M 1.8G 5% /tmp
/dev/sda10 4.0G 1.3G 2.6G 33% /usr
/dev/sda6 4.0G 2.1G 1.8G 55% /usr/local
/dev/sda5 20G 19G 0 100% /var

Однак, якщо я це роблю, du -sh /varвін повідомляє, що використовується лише 4.6G:

# du -sh /var
4.6G /var

Відповіді:


8

Типовою причиною цього є деякий користувальницький процес, який зберігає видалений файл відкритим . Коли це відбувається, пробіл не видно через 'du' , оскільки файл більше не видно у дереві каталогів. Однак файл все ще використовується файлом, поки він не буде розміщений, і це може статися лише після того, як останній процес, який відкриває файл, або закриє його дескриптор файлу до файлу, або процес виходить. Ви можете скористатися програмою lsof, щоб спробувати знайти, який процес зберігає відкритий файл. Зазвичай це якийсь файл журналу або якийсь великий файл бази даних, який повертається назовні, але деякі старіші процеси зберігають файл журналу відкритим.

джерело : команда 'df' команда VS 'du'


4

Спробуйте це:
http://www.cyberciti.biz/tips/freebsd-why-command-df-and-du-reports-different-output.html
Якщо файли видалено (командою rm) під час їх відкриття або Використовувана програмою / процесом Linux, виникає проблема проблеми "відкритого дескриптора файлів" і плутає файлову систему Linux з повідомленням про реальну фігуру використаного дискового простору або вільного місця на диску.

Для вирішення підробленої проблеми "повного простору дискового простору", тобто для повернення "використаного простору на диску", вам потрібно вбити або припинити "неіснуючий процес" - в цьому випадку команда rm, яка перетворюється на неіснуючий процес, поки файли використовуються.

Після завершення цих неіснуючих процесів проблема "відкритого дескриптора файлу" буде вирішена, і обидва команди du і df погоджуються повідомити про реальну файлову систему, що використовується на диску або вільному просторі на диску!

Як знайти та припинити або вбити неіснуючі процеси, які викликають проблему дескриптора відкритого файлу, щоб вирішити різницю використовуваного дискового простору в команді du і df?

Для цього конкретного сценарію команда lsof (список відкритих команд для файлів) чудово показує світло:

#lsof | grep "deleted"

і шукайте ідентифікатор процесу Linux у другому стовпці виводу команди lsof. Сьомий стовпчик - це розмір файлу, який "видаляється" (але не є успішним і виявляється неіснуючим процесом).

Тепер вам просто потрібно буде вбити ідентифікатори процесу Linux, щоб побачити правильний вихід DU та DF. Використовуйте наступну команду, щоб вбити ідентифікатори процесу

#lsof | grep "deleted" | awk '{print $2}' | xargs kill -9

Тепер перевірте використання диска обома командами; ви не повинні отримувати різницю.


Ось дещо менш небезпечна команда лістингу: lsof | grep "видалено" | awk '{print $ 2}' | uniq | сортувати | xargs ps -p
Joe Casadonte

1

Це не стосується у вашому випадку, але загалом важливо пам’ятати -xпрапор du. В іншому випадку він може перейти в інші змонтовані файлові системи і, звичайно, не збігаються з dfрезультатами, який за замовчуванням є файловою системою.


0

Це, звичайно, після запитання, тому це більше для нащадків.

Для цього може бути ще одна (менш поширена, але значна) причина - встановлені каталоги.

Розглянемо сценарій (наприклад, під час використання тюрем FreeBSD), де каталог ( /multimedia) встановлений в іншому місці ( /usr/something/media). Тепер вказівка duбуде містити розмір / мультимедійного каталогу під /usr/something/mediaкаталогом, а отже, показувати завищений розмір /usr. Але dfпокаже справжній розмір /usr- виключаючи вміст змонтованого /multimediaкаталогу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.