df -l показывает заполнение на 100%, но файл был удален

1463
capser

Я получил предупреждение, что локальный диск был заполнен;

dm@fooserv:/local/data/plog $ df -l Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/rootvg-datavol 121790564 115659468 0 100% /local/data tmpfs 102400 1028 101372 2% /var/asagent/lib/asagen 

Я проверил каталог и увидел файл.

user@fooserv:/local/data/plog $ ls -ltr total 84926904 lrwxrwxrwx 1 user ers_gsd 37 Aug 15 03:00 bomb.log -> /local/data/plog/bomb.31655.log -rw-rw-rw- 1 user ers_gsd 0 Aug 15 03:00 recovery.log drwxrwxrwt 2 user ers_gsd 4096 Aug 15 03:00 log/ -rw-rw-rw- 1 user ers_gsd 0 Aug 15 03:00 dropping.log -rw-rw-rw- 1 user ers_gsd 10109 Aug 15 09:20 proc_fooserv.log -rw-rw-rw- 1 user ers_gsd 381083 Aug 15 10:25 trip_bomb.rip.1.log -rw-rw-rw- 1 user ers_gsd 60563456 Aug 15 13:35 bomb.31655.log -rw-rw-rw- 1 user ers_gsd 0 Aug 15 13:37 bomb.stats -rw-rw-rw- 1 user ers_gsd 86819237888 Aug 15 13:37 process-one.log 

Я узнал, какой процесс создавал файлы, и убил их:

user@fooserv:/local/data/plog $ ps -ef | grep 12077 user 12077 1 0 09:20 ? 00:00:00 /bin/bash /home/user/bin/process_big.sh /local/data/plog/process-one.log user 12085 12077 0 09:20 ? 00:00:35 tail -f /local/data/plog/process-one.log user 12088 12077 0 09:20 ? 00:01:31 grep ERR user 12095 12077 0 09:20 ? 00:02:06 grep -v FIXME user 12098 12077 61 09:20 ? 02:38:56 /bin/bash /home/user/bin/process_big.sh /local/data/plog/process-one.log user 22836 32756 0 13:36 pts/0 00:00:00 grep 12077 user@fooserv:/local/data/plog $ kill 12098 user@fooserv:/local/data/plog $ kill 12100 

Я удалил файл:

user @ fooserv: / local / data / plog $ rm process-one.log

df все еще говорит, что каталог полон:

dm@fooserv:/local/data/plog $ df -l Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/rootvg-datavol 121790564 115659468 0 100% /local/data tmpfs 102400 1028 101372 2% /var/asagent/lib/asagent user@fooserv:/local/data/plog $  ~ 
0
Я не уверен, как помочь (извините), но +1 за хорошо задокументированный вопрос. Nate 9 лет назад 0

4 ответа на вопрос

2
R J

Попытка проверить, не запущен ли еще процесс, который приводит к задержке файловых ресурсов.

lsof -nP | grep '(deleted)' 

Должен дать вам отправную точку.

0
hymie

Вы уверены, что убили правильный процесс? Похоже, 12077это тот, который открывает / создает / содержит файл, о котором идет речь.

если я удалил файл, не убивая процесс - это блокирует файл? - я не вижу и inode для файла capser 9 лет назад 0
«Удаление файла» удаляет только ссылку для доступа к этому файлу в будущем. Пока файл «используется» одной или несколькими активными запущенными программами, соответствующая файловая система будет продолжать помечать пространство как «использованное». Вы не можете получить к нему с новым процессом, потому что пространство не имеет доступной ссылки в файловой системе. Но программа, которая уже использует это файловое пространство, все еще имеет его, и она все еще активна, и она все еще используется. hymie 9 лет назад 1
0
Ian McGowan

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

Попробуй ИСОФ. И так как вы уже удалили файл, посмотрите, что открыто в каталоге:

$ lsof + D / local / data / plog

Или одно из других заклинаний lsof: http://www.thegeekstuff.com/2012/08/lsof-command-examples/

0
Mircea

Я нашел это хорошее объяснение здесь:

https://access.redhat.com/solutions/2316

Как и в ответе RJ, lsof | grep deletedэто очень помогает. После того, как я определил основных нарушителей (т.е. десятки файлов ГБ), я использовал echo > /proc/pid/fd/fd_number, где pid и fd идентифицированы, как в ссылке выше.

Это потребует sudo. Также помогает перезагрузка.

Связанный совет был особенно полезен, так как у нас было ограничение не перезапускать машину.

Похожие вопросы