Linux伺服器檔案刪除策略

2021-09-23 07:08:45 字數 1538 閱讀 8304

磁碟空間滿

由於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」狀態說明這個日誌檔案已經被刪除,但由於程序還在一直向此檔案寫入資料,因此空間並未釋放。

正確地清空檔案

[root@localhost ~]# echo 

" ">/tmp/access_log 

伺服器併發策略

一 簡介 從本質上講,所有到達伺服器的請求都封裝在ip包中,位於網絡卡的接收緩衝區中,這時候web伺服器軟體要做的事情就是不斷地讀取這些請求,然後進行處理,並將結果寫到傳送緩衝區,這其中包含了一系列的i o操作和cpu計算,而設計乙個併發策略的目的,就是讓i o操作和cpu計算盡量重疊進行。二 乙個...

網路策略伺服器

technet 庫 windows server windows server 2008 r2 und windows server 2008 按類別提供的 windows server 內容 按類別提供的 windows server 2008 r2 內容 已安裝的 windows server ...

Linux自動刪除伺服器日誌

linux是乙個很能自動產生檔案的系統,日誌 郵件 備份等。雖然現在硬碟廉價,我們可以有很多硬碟空間供這些檔案浪費,讓系統定時清理一些不需要的檔案很有一種爽快的事情。不用你去每天惦記著是否需要清理日誌,不用每天收到硬碟空間不足的報警簡訊,想好好休息的話,讓我們把這個事情交給機器定時 去執行吧。1.刪...