разные значения du и df

Закончилось место в /var, cron начал ругаться и сыпать на почту алармы. Смотрю df -h место занято на 99%. Делаю du -hs /var места свободного как минимум 50%.

$ lsof | grep deleted
cmasm2d 3291 root 1w REG 253,1 476834734 82306 /var/spool/compaq/cma.log.1 (deleted)

и таких строк очень много.

Я нашел два способа очистить место. Перезапустить процесс держащий удаленные файлы на привязи (так я поступил с заббикс агентом) или сделать размер файла чуток поменьше.

$ ls -l /proc/3291/fd/
итого 0
lr-x------ 1 root root 64 Авг 28 12:16 0 -> /dev/null
l-wx------ 1 root root 64 Авг 28 12:16 1 -> /var/spool/compaq/cma.log.1 (deleted)
l-wx------ 1 root root 64 Авг 28 12:16 2 -> /var/spool/compaq/cma.log.1 (deleted)
lrwx------ 1 root root 64 Авг 28 12:16 3 -> /dev/hpilo/d0ccb6

cat /dev/null > /proc/3291/fd/1

Файл останется открытым, но размер у него будет 0 байт

Теперь df -h покажет более приятную глазу картинку.

Если есть еще варианты решения, буду благодарен.

Почему вообще du и df показывают разный объем доступного дискового пространства?

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

Когда программа использует файл, а вы его удалили, файл на самом деле не удаляется из файловой системы, пока программа не прекратит его использовать. Однако файл тут же удаляется из списка каталога. Вы можете легко это видеть при помощи такой программы, как more. Предположим, что у вас имеется файл, настолько большой, что его присутствие влияет на вывод команд du и df. (Так как в настоящее время диски могут быть настолько большими, это может быть очень большой файл!) Если вы удалите этот файл в процессе работы more над ним, на команду more это не повлияет и она не сообщит, что не может просматривать файл. Запись о файле просто удалена из каталога, так что другие программы или пользователи не смогут к нему обратиться. du покажет, что файл исчез — она просматривает дерево каталогов, а файла там не будет. df показывает, что он все еще здесь, так как файловая система знает, что more все еще использует это пространство. Как только вы закончите работу с more, команды du и df придут в соответствие.

http://www.freebsd.org/doc/ru_RU.KOI8-R/books/faq/disks.html#idp77037104

Материалы распространяются под лицензией Creative Commons: Атрибуция — Некоммерческое использование — С сохранением условий (Attribution-NonCommercial-ShareAlike) 3.0 Unported.
Рейтинг@Mail.ru