本篇內容主要講解“l(fā)inux中怎么解決文件已刪除但空間不釋放的問(wèn)題”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“l(fā)inux中怎么解決文件已刪除但空間不釋放的問(wèn)題”吧!
1、錯誤現象
運維的監控系統發(fā)來(lái)通知,報告一臺空間滿(mǎn)了,登錄服務(wù)器查看,根分區確實(shí)沒(méi)有空間了:
[root@localhost ~]# df -h
這里首先說(shuō)明一下服務(wù)器的一些刪除策略,由于Linux沒(méi)有回收站功能,所以線(xiàn)上服務(wù)器上所有要刪除的文件都會(huì )先移動(dòng)到系統/tmp目錄下,然后定期清除/tmp目錄下的數據。這個(gè)策略本身沒(méi)有問(wèn)題,但是通過(guò)檢查發(fā)現這臺服務(wù)器的系統分區中并沒(méi)有單獨劃分/tmp分區,這樣/tmp下的數據其實(shí)占用了根分區的空間。既然找到了問(wèn)題,那么刪除/tmp目錄下一些占空間較大的數據文件即可,檢查/tmp下最大的三個(gè)數據文件。
[root@localhost ~]# du -sh /tmp/*|sort -nr|head -3
通過(guò) 命令輸出發(fā)現在/tmp目錄下有個(gè)66GB大小的文件access_log,這個(gè)文件應該是Apache產(chǎn)生的訪(fǎng)問(wèn)日志文件,從日志大小來(lái)看,應該是很久沒(méi)有清理Apache日志文件了,基本判定是這個(gè)文件導致的根空間爆滿(mǎn),在確認此文件可以刪除后,執行如下刪除操作:
[root@localhost ~]# rm /tmp/access_log
接著(zhù)查看系統根分區空間是否釋放:
[root@localhost ~]# df -h
從輸出可以看到,根分區空間仍然沒(méi)有釋放,這是怎么回事?
2、解決思路
一般來(lái)說(shuō)不會(huì )出現刪除文件后空間不釋放的情況,但是也存在例外,比如文件被進(jìn)程鎖定,或者有進(jìn)程一直在向這個(gè)文件寫(xiě)數據等,要理解這個(gè)問(wèn)題,就需要知道Linux下文件的存儲機制和存儲結構。
一個(gè)文件在文件系統中的存放分為兩個(gè)部分:數據部分和指針部分,指針位于文件系統的meta-data中,在將數據刪除后,這個(gè)指針就從meta-data中清除了,而數據部分存儲在磁盤(pán)中。在將數據對應的指針從meta-data中清除后,文件數據部分占用的空間就可以被覆蓋并寫(xiě)入新的內容,之所以在出現刪除access_log文件后,空間還沒(méi)釋放,就是因為httpd進(jìn)程還在一直向這個(gè)文件寫(xiě)入內容,導致雖然刪除了access_log文件,但是由于進(jìn)程鎖定,文件對應的指針部分并未從meta-data中清除,而由于指針并未刪除,系統內核就認為文件并未刪除,因此通過(guò)df 命令查詢(xún)空間并未釋放也就不足為奇了。
3、問(wèn)題排查
既然有了解決問(wèn)題的思路,那么接下來(lái)看看是否有進(jìn)程一直在向access_log文件中寫(xiě)數據,這里需要用到Linux下的lsof命令,通過(guò)這個(gè)命令可以獲取一個(gè)仍然被應用程序占用的已刪除文件列表,命令執行如下:
[root@localhost ~]# lsof | grep delete
從輸出結果可以看到,/tmp/access_log文件被進(jìn)程httpd鎖定,而httpd進(jìn)程還一直向這個(gè)文件寫(xiě)入日志數據。從第7列可知,這個(gè)日志文件大小約70GB,而系統根分區總大小才100GB,由此可知,這個(gè)文件就是導致系統根分區空間耗盡的罪魁禍首。最后一列的“deleted”狀態(tài)說(shuō)明這個(gè)日志文件已經(jīng)被刪除,但由于進(jìn)程還在一直向此文件寫(xiě)入數據,因此空間并未釋放。
4、解決問(wèn)題
到這里問(wèn)題就基本排查清楚了,解決這一類(lèi)問(wèn)題的方法有很多種,最簡(jiǎn)單的方法是關(guān)閉或重啟httpd進(jìn)程,當然也可以重啟操作系統,不過(guò)這些并不是最好的方法。對待這種進(jìn)程不停對文件寫(xiě)日志的操作,要釋放文件占用的磁盤(pán)空間,最好的方法是在線(xiàn)清空這個(gè)文件,具體可以通過(guò)如下命令完成:
[root@localhost ~]# echo " " >/tmp/acess.log
通過(guò)這種方法,磁盤(pán)空間不但可以馬上釋放,也可保障進(jìn)程繼續向文件寫(xiě)入日志,這種方法經(jīng)常用于在線(xiàn)清理Apache、Tomcat、Nginx等Web服務(wù)產(chǎn)生的日志文件。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站