系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux系統(tǒng)文件已刪除但空間未釋放

如何解決Linux系統(tǒng)文件已刪除但空間未釋放的情況

時間:2014-12-12 15:02:22 作者:qipeng 來源:系統(tǒng)之家 1. 掃描二維碼隨時看資訊 2. 請使用手機(jī)瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20141212/32506.html 手機(jī)查看 評論

  當(dāng)你在進(jìn)行Linux系統(tǒng)操作的時候,有時會遇到文件被刪除但空間未被釋放的問題,那么是什么原因?qū)е碌哪?又該如何解決,下面小編就給大家介紹下文件被刪除但空間未被釋放的解決方法。

  1、錯誤現(xiàn)象

  運(yùn)維的監(jiān)控系統(tǒng)發(fā)來通知,報告一臺服務(wù)器空間滿了,登陸服務(wù)器查看,根分區(qū)確實(shí)沒有空間了,如下圖所示:

   如何解決Linux系統(tǒng)文件已刪除但空間未釋放的情況

  這里首先說明一下服務(wù)器的一些刪除策略,由于Linux沒有回收站功能,我們的線上服務(wù)器所有要刪除的文件都會首先移動到系統(tǒng)/tmp目錄下,然后定期清除/tmp目錄下的數(shù)據(jù)。這個策略本身沒有問題,但是通過檢查發(fā)現(xiàn)這臺服務(wù)器的系統(tǒng)分區(qū)中并沒有單獨(dú)劃分/tmp分區(qū),這樣/tmp下的數(shù)據(jù)其實(shí)是占用了根分區(qū)的空間。既然找到了問題,那么刪除/tmp目錄下一些大數(shù)據(jù)即可,執(zhí)行如下命令,檢查/tmp下最大的三個數(shù)據(jù)文件,如下圖所示:

 。踨oot@localhost~ ]# du -s /tmp/*|sort -nr|head -3

  69206016 /tmp/access_log

  36 /tmp/hsperfdata_root

  36 /tmp/hsperfdata_mapred

  通過命令輸出發(fā)現(xiàn)在/tmp目錄下有個66G大小的文件access_log,這個文件應(yīng)該是apache產(chǎn)生的訪問日志文件,從日志大小來看,應(yīng)該是很久沒有清理apache日志文件了,基本判定是這個文件導(dǎo)致的根空間爆滿,在確認(rèn)此文件可以刪除后,執(zhí)行如下刪除操作:

 。踨oot@localhost ~]# rm /tmp/access_log

  接著查看系統(tǒng)根分區(qū)空間是否釋放,如下圖所示:

   如何解決Linux系統(tǒng)文件已刪除但空間未釋放的情況

  從輸出可以看到,根分區(qū)空間仍然沒有釋放,這是怎么回事?

  2、解決思路

  一般說來不會出現(xiàn)刪除文件后空間不釋放的情況,但是也存在例外,比如文件被進(jìn)程鎖定,或者有進(jìn)程一直在向這個文件寫數(shù)據(jù)等等,要理解這個問題,就需要知道Linux下文件的存儲機(jī)制和存儲結(jié)構(gòu)。

  一個文件在文件系統(tǒng)中的存放分為兩個部分:數(shù)據(jù)部分和指針部分,指針位于文件系統(tǒng)的meta-data中,數(shù)據(jù)被刪除后,這個指針就從meta-data中清除了,而數(shù)據(jù)部分存儲在磁盤中,數(shù)據(jù)對應(yīng)的指針從meta-data中清除后,文件數(shù)據(jù)部分占用的空間就可以被覆蓋并寫入新的內(nèi)容,之所以出現(xiàn)刪除access_log文件后,空間還沒釋放,就是因?yàn)閔ttpd進(jìn)程還在一直向這個文件寫入內(nèi)容,導(dǎo)致雖然刪除了access_log文件,但文件對應(yīng)的指針部分由于進(jìn)程鎖定,并未從meta-data中清除,而由于指針并未被刪除,那么系統(tǒng)內(nèi)核就認(rèn)為文件并未被刪除,因此通過df命令查詢空間并未釋放也就不足為奇了。

  3、問題排查

  既然有了解決問題的思路,那么接下來看看是否有進(jìn)程一直在向acess.log文件中寫數(shù)據(jù),這里需要用到Linux下的lsof命令,通過這個命令可以獲取一個已經(jīng)被刪除但仍然被應(yīng)用程序占用的文件列表,命令執(zhí)行如下圖所示:

   如何解決Linux系統(tǒng)文件已刪除但空間未釋放的情況

  從輸出結(jié)果可以看到,/tmp/acess.log文件被進(jìn)程httpd鎖定,而httpd進(jìn)程還一直向這個文件寫入日志數(shù)據(jù),從第七列可知,這個日志文件大小僅70G,而系統(tǒng)根分區(qū)總大小才100G,由此可知,這個文件就是導(dǎo)致系統(tǒng)根分區(qū)空間耗盡的罪魁禍?zhǔn)祝谧詈笠涣械?ldquo;deleted”狀態(tài),說明這個日志文件已經(jīng)被刪除,但由于進(jìn)程還在一直向此文件寫入數(shù)據(jù),空間并未釋放。

  4、解決問題

  到這里問題就基本排查清楚了,解決這一類問題的方法有很多種,最簡單的方法是關(guān)閉或者重啟httpd進(jìn)程,當(dāng)然也可以重啟操作系統(tǒng),不過這并不是最好的方法,對待這種進(jìn)程不停對文件寫日志的操作,要釋放文件占用的磁盤空間,最好的方法是在線清空這個文件,可以通過如下命令完成:

 。踨oot@localhost ~]# echo “ ” 》/tmp/acess.log

  通過這種方法,磁盤空間不但可以馬上釋放,也可保障進(jìn)程繼續(xù)向文件寫入日志,這種方法經(jīng)常用于在線清理Apache、Tomcat、Nginx等Web服務(wù)產(chǎn)生的日志文件。謝謝閱讀,希望能幫到大家,請繼續(xù)關(guān)注腳本之家,我們會努力分享更多優(yōu)秀的文章。

  上面就是Linux文件被刪除但空間不釋放的解決方法的介紹了,文件被刪除但卻占著空間確實(shí)很麻煩,空間得不到有效的利用,如果你遇到這樣的問題,不妨試試本文介紹的方法吧。

標(biāo)簽 文件

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨(dú)特見解

立即評論

以上留言僅代表用戶個人觀點(diǎn),不代表系統(tǒng)之家立場

其他版本軟件

熱門教程

人氣教程排行

Linux系統(tǒng)推薦

官方交流群 軟件收錄