linux中怎么解決文件已刪除但空間不釋放的問題

本篇內(nèi)容主要講解“l(fā)inux中怎么解決文件已刪除但空間不釋放的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“l(fā)inux中怎么解決文件已刪除但空間不釋放的問題”吧!

10年積累的成都做網(wǎng)站、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有淮上免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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

1、錯(cuò)誤現(xiàn)象

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

[root@localhost ~]# df -h

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

[root@localhost ~]# du -sh /tmp/*|sort -nr|head -3

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

[root@localhost ~]# rm /tmp/access_log

接著查看系統(tǒng)根分區(qū)空間是否釋放:

[root@localhost ~]# df -h

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

2、解決思路

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

一個(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)刪除access_log文件后,空間還沒釋放,就是因?yàn)閔ttpd進(jìn)程還在一直向這個(gè)文件寫入內(nèi)容,導(dǎo)致雖然刪除了access_log文件,但是由于進(jìn)程鎖定,文件對(duì)應(yīng)的指針部分并未從meta-data中清除,而由于指針并未刪除,系統(tǒng)內(nèi)核就認(rèn)為文件并未刪除,因此通過df 命令查詢空間并未釋放也就不足為奇了。

3、問題排查

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

[root@localhost ~]# lsof | grep delete

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

4、解決問題

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

[root@localhost ~]# echo " " >/tmp/acess.log

通過這種方法,磁盤空間不但可以馬上釋放,也可保障進(jìn)程繼續(xù)向文件寫入日志,這種方法經(jīng)常用于在線清理Apache、Tomcat、Nginx等Web服務(wù)產(chǎn)生的日志文件。

到此,相信大家對(duì)“l(fā)inux中怎么解決文件已刪除但空間不釋放的問題”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁題目:linux中怎么解決文件已刪除但空間不釋放的問題
URL鏈接:http://muchs.cn/article28/jojgcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、微信小程序網(wǎng)頁設(shè)計(jì)公司、全網(wǎng)營(yíng)銷推廣品牌網(wǎng)站設(shè)計(jì)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)