1. 程式人生 > >Linux磁碟空間被未知資源耗盡100%

Linux磁碟空間被未知資源耗盡100%

在linux中,當我們使用rm在linux上刪除了大檔案,但是如果有程序打開了這個大檔案,卻沒有關閉這個檔案的控制代碼,那麼linux核心還是不會釋放這個檔案的磁碟空間,最後造成磁碟空間佔用100%,整個系統無法正常執行。這種情況下,通過df -lh 和du命令查詢的磁碟空間,兩者是無法匹配的,可能df顯示磁碟100%,而du查詢目錄的磁碟容量佔用卻很小。

遇到這種情況,基本可以斷定是某些大檔案被某些程式佔用了,並且這些大檔案已經被刪除了,但是對應的檔案控制代碼沒有被某些程式關閉,造成核心無法回收這些檔案佔用的空間。

那麼,如何查詢那些檔案被某些程式佔用呢,命令如下:

# lsof -n | grep deleted
COMMAND     PID      USER   FD      TYPE             DEVICE        SIZE       NODE NAME
dd        31708      higkoo    1w      REG                8,2 5523705856     429590 /data/filetest (deleted)

命令打lsof -n | grep deleted印出所有針對已刪除檔案的讀寫操作,這類操作是無效的,也正是磁碟空間莫名消失的根本原因

備註:本人遇到的場景是同事刪除了mysql的表,但是是在shell上執行rm表的檔案,而不是通過drop table之類的命令去刪除表的,於是mysql會一直佔用這些表文件的控制代碼,最後造成磁碟空間100%,這種情況下,也不用重啟mysql,只要進入mysql客戶端執行flush tables就行了。