請幾天,我刪除系統彙總的大文件,大約100G左右,當我使用rm -rf xxxx.log刪除後,使用df -h發現空間並未釋放。
一開始以爲是由於磁盤虛擬掛載,導致我刪除的文件並不是當前目錄的文件。但後來發現並不是。
我在網絡上搜索發現都是 要:
lsof | grep delete
kill -9 xxx
但是我覺得這樣不安全。
比如文件被進程鎖定,或者有進程一直在向這個文件寫數據等等。
要理解這個問題,就需要知道Linux下文件的存儲機制和存儲結構。空間還沒釋放,就是因爲httpd進程還在一直向這個log文件寫入內容,導致Linux還認爲存在這個文件,導致不能釋放。
一、
echo " " >xxxx.log 這種方法可以清除大數據文件。
二、
cat /dev/null >xxxx.log 這種方法也可以清除大數據文件。
上面這兩種方法根本無需殺掉進程,方便且安全,適用於動態的刪除數據。