通常報磁碟不足的錯誤,有兩個原因:
•磁碟空間滿:可以通過df -h命令檢視磁碟的使用情況。
•磁碟inode資源占用完:可以通過df -i命令檢視,確認inode節點使用率;
如果是inode資源占用完,是因為使用的小檔案過多導致的。但如果是磁碟空間滿,我們需要刪除檔案,擠出空間來,但發現磁碟空間根本沒減少。這就需要了解rm刪除檔案原理。
rm刪除檔案原理
linux是link的數量來控制檔案刪除的。只有當乙個檔案不存在任何link的時候,這個檔案才會被刪除。一般來講,每個檔案都有兩個link計數器:i_count和i_nlink
•i_count的意義是當前檔案使用者(或被呼叫)的數量
當乙個檔案被某乙個程序引用時,對應的這個值就會增加
•i_nlink的意義是介質連線的數量(硬鏈結的數量)
當建立檔案的硬鏈結的時候,這個值就會增加
rm操作只是將檔案的i_nlink減少了,實際就是將檔名到inode的鏈結刪除了,如果沒有其它的鏈結,i_nlink就為0。但是由於該檔案依然被程序引用,因此,此時檔案對應的i_count並不為0,所以執行rm操作,系統並沒有真正的刪除這個檔案,只有當i_nlink和i_count都為0的時候,這個檔案才會被真正的刪除。也就是說,必須要解除該程序對該檔案的呼叫,才能真正的刪除。
解決方案
lsof | grep deleted
當發現刪除檔案後,磁碟的空間還是沒有變,庫使用使用以上命令,獲得乙個已經被刪除但是仍然被應用程式占用的檔案列表,然後可以kill 掉相關程序即可強制要求系統**分配給正在使用的的檔案,這樣就可以釋放次磁碟資源。
注:系統中,只有已釋放的檔案資料塊被重用其中資料被覆蓋時,原檔案資料才算刪除掉。
Linux rm刪除檔案,但空間不釋放?
一般說來不會出現rm掉不釋放空間的情況 出現這樣的情況一般是由於有程序在向檔案中寫資料或有程序正在訪問檔案 而此時rm檔案則會出現不釋放空間的情況 理解這樣的問題需要理解rm的操作內含 乙個檔案的存放有資料部分和指標部分,而指標位於檔案系統的頭 刪除作業系統的乙個檔案與oracle drop表的實質...
Linux 檔案已刪除但空間不釋放問題
有時候linux磁碟空間已滿,手動刪除了大檔案之後,df檢視一下發現空間占用還是100 這是啥問題呢?lsof grep deleted使用以上命令可以檢視已經刪除的檔案程序,kill掉之後,空間就能得到釋放。服務用不了,mysql插入資料超時堵塞,登入上伺服器檢視果然又是磁碟滿了,之前遇到過幾次這...
運維實戰案例之檔案已刪除但空間不釋放問題解析
1 錯誤現象 運維的監控系統發來通知,報告一台伺服器空間滿了,登陸伺服器檢視,根分割槽確實沒有空間了,如下圖所示 這裡首先說明一下伺服器的一些刪除策略,由於linux沒有 站功能,我們的線上伺服器所有要刪除的檔案都會首先移動到系統 tmp目錄下,然後定期清除 tmp目錄下的資料。這個策略本身沒有問題...