關(guān)于linux不停的報(bào)磁盤已滿的處理辦法
各位小伙伴,以下是我的一些處理方法,與大家共享。
今天上傳了一個(gè)13kb的文件,提示磁盤已滿,不能上傳。df -h 查了一下,如下圖:
磁盤慢了
由于是開發(fā)環(huán)境,堆滿了大量的日志沒刪,10g了,于是我刪除了一些很久的日志,8g。奇怪的事情發(fā)生了,命令查看磁盤,依然是100%。linux還是跟windows區(qū)別挺大的么,windows我們刪除了文件,馬上就有磁盤釋放了。想到的就是刪除的文件并不能釋放出磁盤(當(dāng)時(shí)只是猜測(cè)),于是lsof | grep deleted 查了一下。
果斷地把這些進(jìn)程都kill掉了,哎呦喂,奇跡發(fā)生了,df -h 查看:
已經(jīng)從100%降到了13%。問題解決了,于是找度娘查了下linux刪除的機(jī)制,大致如下:
一個(gè)文件在文件系統(tǒng)中的存放分為兩個(gè)部分:數(shù)據(jù)部分和指針部分,指針位于文件系統(tǒng)的meta-data中,數(shù)據(jù)被刪除后(例如我們的日志文件),這個(gè)指針就從meta-data中清除了,而數(shù)據(jù)部分存儲(chǔ)在磁盤中,數(shù)據(jù)對(duì)應(yīng)的指針從meta-data中清除后,文件數(shù)據(jù)部分占用的空間就可以被覆蓋并寫入新的內(nèi)容,之所以出現(xiàn)刪除log文件后,空間還沒釋放,就是因?yàn)閔ttpd進(jìn)程還在一直向這個(gè)文件寫入內(nèi)容,導(dǎo)致雖然刪除了log文件,但文件對(duì)應(yīng)的指針部分由于進(jìn)程鎖定,并未從meta-data中清除,而由于指針并未被刪除,那么系統(tǒng)內(nèi)核就認(rèn)為文件并未被刪除,因此通過df命令查詢空間并未釋放也就不足為奇了。一般說來不會(huì)出現(xiàn)刪除文件后空間不釋放的情況,但是也存在例外,比如文件被進(jìn)程鎖定,或者有進(jìn)程一直在向這個(gè)文件寫數(shù)據(jù)等等,要理解這個(gè)問題,就需要知道Linux下文件的存儲(chǔ)機(jī)制和存儲(chǔ)結(jié)構(gòu)。