監控系統報告一臺服務器的空間滿了,登錄後發現/tmp下有大量access_log文件,分析是Apache的日誌文件好久沒有清理了,確認並執行刪除操做。web
可是,問題來了,執行 rm /tmp/access_log 操做後,再次查看發現磁盤分區的空間並無釋放,這是怎麼回事?服務器
經查閱資料發現: 當文件進程鎖定,或者有進程一直在向這個文件寫數據,就會出現這種刪除文件後空間不釋放的狀況。指針
深刻理解相關Linux文件的存儲機制和存儲結構:日誌
一個文件在文件系統中存放分爲兩個部分:數據部分和指針部分,指針位於文件系統的meta-data中,在將數據刪除後,這個指針就從meta-data中清除了,而數據部分存儲在磁盤中。在將數據對應的指針從meta-data中清除後,文件數據部分佔用的空間就能夠被覆蓋並寫入新的內容,之因此出現刪除access_log文件後,空間沒有釋放,就是由於httpd進程還在一直向這個文件寫入內容,進程被鎖定,則文件對應的指針部分並未從meta-data中清除,而因爲指針並未刪除,系統內核就認爲文件並未被刪除。因此出現上述現象。進程
解決: 最優解決方案 echo 「 」 >/tmp/access_log 在線清空日誌文件,直接寫入 空內容 而後覆蓋整個文件,該方法經常使用來在線清理Apache、Tomcat、Nginx等web服務產生的日誌。監控
固然也能夠重啓進程,重啓系統。 meta