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

我刪除了該檔案:

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 $

~

答案1

嘗試檢查導致檔案資源被保留的進程是否仍在執行。

lsof -nP | grep '(deleted)'

應該會給你一個起點。

答案2

您確定您殺死了正確的進程嗎?它看起來像是12077打開/創建/保存相關文件的文件。

答案3

Hymie 可能是對的 - 要么您殺死了錯誤的進程,要么有多個進程打開了該檔案。刪除檔案會從目錄表中刪除索引節點,但直到使用該檔案的每個程序都將其關閉後,空間才會被釋放。它本身並沒有被鎖定,但是在回收空間之前有一個計數器需要為零。

嘗試一下lsof。由於您已經刪除了該文件,請查看目錄中開啟的內容:

$lsof +D /本地/資料/plog

或 lsof 的其他咒語之一:http://www.thegeekstuff.com/2012/08/lsof-command-examples/

答案4

我在這裡找到了這個很好的解釋:

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

正如 R J 的回答所示,lsof | grep deleted有很大幫助。一旦我確定了主要的罪犯(即數十 GB 檔案),我就使用了echo > /proc/pid/fd/fd_number,其中 pid 和 fd 的標識如上面的連結所示。

它將需要 sudo。此外,重新啟動也有幫助。

連結的建議特別有用,因為我們有不能重新啟動機器的限制。

相關內容