Linux刪除檔案後空間不釋放
阿新 • • 發佈:2018-12-28
最近線上 elasticsearch 由於磁碟空間不足報錯,於是乎對磁碟進行了分析,刪除了一些 Tomcat 日誌檔案,但是刪除後發現並沒有磁碟空間釋放。於是 google 了一下。
原來在Linux或者Unix系統中,通過rm或者檔案管理器刪除檔案將會從檔案系統的目錄結構上解除連結(unlink),然而如果檔案是被開啟的(有一個程序正在使用),那麼程序將仍然可以讀取該檔案,磁碟空間也一直被佔用。而我刪除的是正在執行中的 Tomcat 的 logs,刪除的時候檔案正在被使用中。
Linux 使用 lsof | grep deleted
命令獲得一個已經被刪除但是仍然被應用程式佔用的檔案列表,kill 掉相關程序即可強制要求系統回收分配給正在使用的的檔案。或者也可以將檔案佔用取消,比如當前場景可以讓 Tomcat 關閉即可取消檔案佔用。
(lsof
list opened files
,也就是列舉系統中已經被開啟的檔案。)
在網上還看到了一種方法,使用 echo " " > logs/xxx.log
通過這種方法,磁碟空間不但可以馬上釋放,也可保障程序繼續向檔案寫入日誌,這種方法用於線上清理 Apache
、Tomcat
、Nginx
等 Web
服務產生的日誌檔案相當實用。
本文由個人 hexo 部落格 co2fe.com 遷移
date: 2018-11-21 16:53:29