FastNetMon

четверг, 4 ноября 2010 г.

Почему могут не совпадать показания df и du -sh / ?

Имеем вот такую картину:

df -h
Filesystem Size Used Avail Use% Mounted on
/dev/simfs 16G 16G 115M 100% /
tmpfs 5.9G 0 5.9G 0% /lib/init/rw
tmpfs 5.9G 0 5.9G 0% /dev/shm

du -sh /
du: cannot access `/proc/23728/task/23728/fd/4': No such file or directory
du: cannot access `/proc/23728/fd/4': No such file or directory
5.2G /

Очевидно, куда-то пропало несколько гигабайт разницы между показаниями команд.

Вкратце объясню как так получилось - на сервере были крупные файлы (логи) и они были открыты в некоторых программах (например, nginx и apache). Эти файлы были удалены из системы посредством команды rm, но так как дескрипторы были открыты, данные, разумеется не были удалены (дабы не поломать программы) и хранились до того, пока программа их не "отпустит", но самих ссылок на файлы уже не существовало и du -sh их, разумеется, не видела и не учитывала в отличие от системы квот ядра, которая отлично понимала ситуацию. После перезаупска программ (в данном случае nginx и apache) файлы были отпущены и df -h начал показывать корректные значения.

Итого, после перезпуска демонов имеем корректные показания:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/simfs 16G 5.2G 11G 34% /
tmpfs 5.9G 0 5.9G 0% /lib/init/rw
tmpfs 5.9G 0 5.9G 0% /dev/shm

Дабы не искать, какой именно демон использует файл, можно просто перезапустить машину / VPS.

6 комментариев :

  1. то есть du -sh / показывает более точную информацию ? только от пересчет файлов du -sh / намного дольше, чем df -h

    ОтветитьУдалить
  2. Сложный вопрос. Формально, df -h выдает вполне верные данные, диск-то все равно занят и не важно, что на файл удалены ссылки - место он занимает и занять его чем-то другим не получится.

    ОтветитьУдалить
  3. А что в этот момент показывает ncdu?

    ОтветитьУдалить
  4. Понятия не имею :) Я по системным вызовам ориентируюсь, а не софтинкам-скриптам :)

    ОтветитьУдалить
  5. А если ваш openVZ VPS такое продолжает показывать после рестарта, то надо остановить ВПС и сделать init квоты :D

    ОтветитьУдалить
  6. Ну это не только на VPS, квоты лего бьются и на выделенных машинках. Да и, к слову, в инит скриптах есть чек квот, если они рассыпались.

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.