linux系統中,使用rm刪除某個大文件,,但如果在刪除之前有進程已經打開該文件,卻沒有關閉這個的句柄,那麼linux內核還是不會釋放該文件的磁盤空間,最後造成磁盤空間佔用100%,因爲沒有磁盤提供讀寫,使系統無法正常運行。
使用 du 和 df 查看磁盤空間時,兩個結果不匹配
df -h 顯示磁盤使用100%
du -sh * 查看個目錄佔用磁盤空間卻很小
遇到這種情況基本斷定,某些打文件被某些進程佔用,導致內核不能釋放空間,不能更新磁盤顯示,但是磁盤目錄又佔用。顯示不一致。因爲文件刪除後,而佔用該文件的進程沒有被關閉,造成內核無法回收這些文件佔用的空間。
解決步驟:
df -h 查看磁盤分區使用情況
du -sh * 查看系統目錄和文件磁盤使用情況
lsof -n |grep deleted 列出已刪除文件的磁盤讀寫操作進程,這類操作是無效的。
gearmand 22377 gearmand 3w REG 253,1 32753639424 201505632 /var/log/gearmand/gearmand.log (deleted)
gearmand 22377 22413 gearmand 3w REG 253,1 32753639424 201505632 /var/log/gearmand/gearmand.log (deleted)
gearmand 22377 22414 gearmand 3w REG 253,1 32753639424 201505632 /var/log/gearmand/gearmand.log (deleted)
gearmand 22377 22415 gearmand 3w REG 253,1 32753639424 201505632 /var/log/gearmand/gearmand.log (deleted)
kill pid 殺死佔用被刪除文件的進程(殺死該進程前,最好先關閉相關服務,一面服務發生錯誤)。
如果在mysql正常運行的情況下,使用rm刪除對應的表文件,就會出現這種情況,此時重啓mysql即可!(有博友說登陸mysql,執行flush tables也可以,沒有試過!)