Разные результаты комманд du и df +

Материал из wiki.helpdesk.by

Перейти к: навигация, поиск

Почему комманды df и du иногда выводят разные значения ?

Иногда на серверах UNIX и Linux систем комманды df (отображение свободного места на диске) и du (отображает статистику использования диска) сообщают разные значение. Обычно df показывает большее значение, нежели du.

Вот пример такой ситуации:

Following is normal output of df and du for /tmp filesystem: Это нормальный вывод комманд df и du для /tmp

# df -h /tmp
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1e    496M     22M    434M     5%    /tmp


# du -d 0 -h /tmp/
22M    /tmp/


Вот результат этих же комманд, но с разными значениями:

# df -h /tmp/
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/ad0s1e    496M     39M    417M     9%    /tmp
# du -d 0 -h /tmp/
22M    /tmp/

Как видно, обе комманды выводят разные значения. Это связано с OFD (Open file descriptor). Например если отрыт файл /tmp/application.log каким либо приложением или пользователем и этот же файл удалить, то df и du будут показывать разные результаты. Все это связано с тем, что файл который Вы удалили все еще используется и занимает дисковое пространство, о чем и говорит комманда df. Для проверки этого можно воспользоваться коммандой lsof


# lsof | grep tmp
bash   594  root  cwd   VDIR  0,86      512      2 /tmp
bash   634  root  cwd   VDIR  0,86      512      2 /tmp
pwebd  635  root  cwd   VDIR  0,86      512      2 /tmp
pwebd  635  root  3rW   VREG  0,86 17993324     68 /tmp (/dev/ad0s1e)
pwebd  635  root   5u   VREG  0,86        0     69 /tmp (/dev/ad0s1e)
lsof   693  root  cwd   VDIR  0,86      512      2 /tmp
grep   694  root  cwd   VDIR  0,86      512      2 /tmp

Как видно файл размером 17993324K открытый в /tmp через pwebd, но, как писали ранее удален. Для решения данной проблемы, необходимо либо закрыть файл без сохранения в приложении которым он используется, либо "убить" приложение. В данном случае можно убить приложение pwebd с PID 635 коммандой

$kill 635

После этого дискритпор файла будет освобожден и файл полностью удален.

Личные инструменты
Инструменты