Получите `df` для отображения обновленной информации о FreeBSD - PullRequest
0 голосов
/ 26 августа 2008

Недавно мне не хватило места на диске на сервере FreeBSD. Я усек файл, который вызывал проблемы, но я не вижу изменений, отраженных при запуске df. Когда я запускаю du -d0 на разделе, он показывает правильное значение. Есть ли способ заставить эту информацию быть обновленной? Что приводит к тому, что вывод здесь отличается?

Ответы [ 3 ]

3 голосов
/ 15 января 2009

В BSD запись каталога - это просто одна из многих ссылок на базовые данные файла (называемые индексом). Когда файл удаляется с помощью команды rm (1), уменьшается только счетчик ссылок. Если счетчик ссылок по-прежнему положителен (например, файл содержит другие записи каталога из-за символических ссылок), то данные базового файла не удаляются.

Новые пользователи BSD часто не осознают, что программа, у которой открыт файл, также содержит ссылку. Это предотвращает исчезновение данных базового файла, пока процесс их использует. Когда процесс закрывает файл, если счетчик ссылок падает до нуля, файловое пространство помечается как доступное. Эта схема используется, чтобы избежать проблем с типом Microsoft Windows, когда она не позволяет удалить файл, потому что в какой-то неуказанной программе он по-прежнему открыт.

Простой способ убедиться в этом - сделать следующее

cp /bin/cat /tmp/cat-test
/tmp/cat-test &
rm /tmp/cat-test

До тех пор, пока фоновый процесс не будет завершен, файловое пространство, используемое / tmp / cat-test, будет оставаться выделенным и недоступным, как сообщает df (1), но команда du (1) не сможет его учесть, так как нет больше имеет имя файла.

Обратите внимание, что если система будет аварийно завершать работу без процесса, закрывающего файл, тогда данные файла все еще будут присутствовать, но не будут ссылаться, для восстановления пространства файловой системы потребуется запуск fsck (8).

Процессы, удерживающие открытые файлы, являются одной из причин, по которым команда newsyslog (8) отправляет сигналы syslogd или другим программам регистрации, чтобы сообщить им, что они должны закрыть и заново открыть свои файлы журнала после их поворота.

Softupdates также может влиять на свободное пространство файловой системы, поскольку реальное восстановление пространства inode может быть отложено; команда sync (8) может быть использована для того, чтобы это произошло раньше.

2 голосов
/ 26 августа 2008

Вероятно, в центре как вы усекли файл. du и df сообщают о разных вещах, поскольку этот пост на unix.com объясняет . То, что пространство не используется, не обязательно означает, что оно свободно ...

0 голосов
/ 26 августа 2008

Работает ли df --sync?

...