Пространство, занимаемое файлом, не может быть использовано до тех пор, пока не исчезнут все ссылки на этот файл.Поэтому любой процесс, в котором файл открыт, будет препятствовать удалению файла с диска.
Активный tail -f
, следующий за файлом, например.
Если эти файлы необходимо удалить, чтобы освободить место на диске (например, потому что они очень большие или их очень много), тогда наличие процессов, лежащих вокруг, которые содержат ссылки на них, предотвратит их удаление и в конечном итоге приведет к заполнению дискаup.
Отредактируйте в ответ на комментарий к другому ответу:
Диагностика, о которой вы сообщаете, точно , что вы ожидаете увидеть в ситуации, когда мы с Адамомописать.df
сообщает, что используется 56G
диска, а du
сообщает, что в папке виден только 10G
.Расхождение связано с тем, что существует 46G
файлов, которые были удалены из папки, но не могут быть физически удалены с диска, потому что некоторые процессы содержат ссылки на них.
Экспериментировать с этим достаточно просто.сами: найдите файловую систему, с которой можно безопасно играть, и создайте огромный файл.Напишите программу на C, которая открывает файл и входит в бесконечный цикл.Теперь сделайте следующее:
- Запустите программу
- Проверьте вывод
df
rm
файла - Проверьтевывод
df
снова - Остановите вашу программу
- Проверьте вывод
df
снова
Вы увидите, что вывод df
не '• изменить после rm
файла, но он изменится, как только вы остановите программу (удалив последнюю ссылку на файл).
Если вам нужно еще больше доказательств того, что это происходит, вы можетеиметь возможность получать информацию из файловой системы /proc
, если она у вас есть.В частности, найдите PID одного из tail -f
процессов (или других процессов, которые, по вашему мнению, могут быть причиной), и посмотрите на каталог /proc/<pid>/fd
, чтобы увидеть все открытые файлы.
(У меня нет * nix дома, поэтому я не могу проверить, что вы увидите /proc/<pid>/fd
в этой ситуации)