搜尋
首頁php教程PHP开发Linux伺服器檔案刪除策略

磁碟空間滿

由於Linux沒有回收站功能,所以線上伺服器上所有要刪除的檔案都會先移到系統/tmp目錄下,然後定期清除/tmp目錄下的資料。這個策略本身沒有問題,但是透過檢查發現這台伺服器的系統分區中並沒有單獨劃分/tmp分區,這樣/tmp下的資料其實佔用了根分區的空間。既然找到了問題,那麼刪除/tmp目錄下一些佔空間較大的資料檔案即可,檢查/tmp下最大的三個資料文。

du -sh /tmp/* | sort -nr | head -3

查看/tmp下最大的前三個資料檔案透過命令輸出發現在/tmp目錄下有個66GB大小的文件access_log,這個文件應該是Apache產生的存取日誌文件,從日誌大小來看,應該是很久沒有清理Apache日誌檔案了,基本判定是這個檔案導致的根空間爆滿,在確認此檔案可以刪除後,執行如下刪除操作:

rm /tmp/access_log

接著查看系統根分割區空間是否釋放,從輸出可以看到,根分割區空間仍然沒有釋放,這是怎麼回事?

刪除檔案空間不釋放

一般來說不會出現刪除檔案後空間不釋放的情況,但是也存在例外,例如檔案被進程鎖定,或者有進程一直在寫資料給這個檔案等,要理解這個問題,就需要知道Linux下檔案的儲存機制和儲存結構。

檔案的資料與指標部分

一個檔案在檔案系統中的存放分為兩個部分:資料部分和指標部分,指標位於檔案系統的meta-data中,將資料刪除後,這個指標就從meta-data中清除了,而資料部分儲存在磁碟中。在將資料對應的指標從meta-data中清除後,檔案資料部分所佔用的空間就可以被覆寫並寫入新的內容,之所以在出現刪除access_log檔案後,空間還沒釋放,就是因為httpd進程還在一直向這個文件寫入內容,導致雖然刪除了access_log文件,但是由於進程鎖定,文件對應的指針部分並未從meta-data中清除,而由於指針並未刪除,系統內核就認為文件並未刪除。

查找被應用程式佔用的已刪除檔案清單

因此透過df指令查詢空間並未釋放也就既然有了解決問題的思路,那麼接下來看看是否有進程一直在向access_log檔案中寫數據,這裡需要用到Linux下的lsof指令,透過這個指令可以取得一個仍然被應用程式佔用的已刪除檔案清單:

lsof | grep delete

從輸出結果可以看到,/tmp/access_log檔案被進程httpd鎖定,而httpd進程也一直向這個檔案寫入日誌資料。從第7列可知,這個日誌檔案大小約70GB,而係統根分割區總大小才100GB,由此可知,這個檔案就是導致系統根分割區空間耗盡的罪魁禍首。最後一列的「deleted」狀態說明這個日誌檔案已經被刪除,但由於進程還在一直向此檔案寫入數據,因此空間並未釋放。

正確地清空檔案

解決這一類問題的方法有很多種,最簡單的方法是關閉或重啟httpd進程,當然也可以重啟作業系統,不過這些並不是最好的方法。對待這種進程不停對文件寫日誌的操作,要釋放文件佔用的磁碟空間,最好的方法是在線清空這個文件,具體可以通過以下命令完成:

[root@localhost ~]# echo " " >/tmp/access_log

通過這種方法,磁碟空間不僅可以馬上釋放,也可保障進程繼續寫入日誌到檔案的日誌,此方法常用於線上清理Apache、Tomcat、Nginx等Web服務所產生的日誌檔案。


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能