В 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) может быть использована для того, чтобы это произошло раньше.