Я получил уведомление о том, что локальный диск заполнен;
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. Также помогает перезагрузка.
Связанный совет оказался особенно полезным, поскольку у нас было ограничение не перезапускать машину.