檔案已經刪除,但是空間沒有釋放的異常

2021-10-03 03:28:48 字數 1196 閱讀 3280

[root@localhost ~]

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

通過命令發現在 /tmp 目錄下有個 66g 大小的檔案 access_log,這個檔案應該是 apache 產生的訪問日誌檔案,從日誌大小來看,應該是很久沒有清理的 apache 日誌檔案了,基本判定是這個檔案導致的根空間爆滿,在確認此檔案可以刪除後,執行如下刪除命令,

[root@localhost ~]

#rm /tmp/access_iog

[root@localhost ~]

#df -h

從輸出來看,根分割槽空間仍然沒有釋放,這是怎麼回事?

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

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

問題排查:

既然有了解決思路,那麼接下來看看是否有程序一直在向 access_log 檔案中寫入資料,這裡需要用到 linux 下的 losf 命令,通過這個命令可以獲取乙個仍然被應用程式占用的已刪除檔案列表。

[root@localhost ~]

# lsof | grep delete

從輸出可以看出,/tmp/access_log 檔案被程序 httpd 鎖定,而 httpd 程序還一直向這個檔案寫入日誌資料,最後一列的『deleted』狀態說明這個日誌檔案已經被刪除,但是由於程序還在一直向此檔案寫入資料,因此空間並未釋放。

解決問題:

[root@localhost ~]

# echo 「」>/tmp/access_log

檔案已經刪除,但是空間沒有釋放的原因,處理。

du sh tmp sort nr head 3通過命令發現在 tmp 目錄下有個 66g 大小的檔案 access log,這個檔案應該是 apache 產生的訪問日誌檔案,從日誌大小來看,應該是很久沒有清理的 apache 日誌檔案了,基本判定是這個檔案導致的根空間爆滿,在確認此檔案可以刪除後,...

linux刪除檔案後沒有釋放空間

author skate time 2009 12 09 linux刪除檔案後沒有釋放空間 今天發現一台伺服器的home空間滿了,於是要清空無用的檔案,當我刪除檔案後,發現可用空間沒有變化 os centos4.7 現象 發現當前磁碟空間使用情況 通過下面的命令找到無用的檔案,然後刪除 root t...

linux RM刪除檔案,磁碟空間沒有釋放

今天公司乙個伺服器的磁碟滿了。經過du命令發現是乙個服務的日誌太大了,佔了將近乙個t的空間。然後 果斷用rm把日誌刪了。以為這下磁碟肯定空間足夠了。但是df一看,磁碟使用率仍然很高,沒有多少改觀。經過網上查詢,知道rm只是將檔案鏈結解除,如果此時有程序開啟檔案,系統是不會 檔案。但此時用ls命令卻看...