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

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

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

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

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

пользователь@fooserv:/local/data/plog $ rm процесс-один.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 $

~

решение1

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

lsof -nP | grep '(deleted)'

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

решение2

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

решение3

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

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

$lsof +D /local/data/plog

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

решение4

Я нашел вот такое хорошее объяснение:

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

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

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

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

Связанный контент