1、用df命令查看磁盤空間發現:總空間大於已用空間 + 剩餘空間,剩餘的3G空間沒有了。造成應用程序無法啓動。
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 60G 21G 36G 37% /
根分區是ext3文件類型,ext3文件系統會默認保留5%的空間作爲預留空間。
2、du得到到的根路徑文件空間佔用情況應當與df得到的文件系統磁盤佔用的情況是一直的或者說相差無幾。但是在某些情況下卻會出現du得到的空間佔用情況要遠小於df得到的。
後通過查詢,發現問題出現在deleted文件上。
root下lsof | grep deleted會發現多多少少有些文件狀態出於deleted狀態。
[root@eb152 ~]# lsof /data | grep -i delete
進程名 PID USER FD 文件類型 大小(字節) 索引節點 文件名 [(狀態)]
java 3311 AuSP 8w REG 253,0 778 10879268 ***.log (deleted)
狀態爲deleted爲標記被刪除,其實該文件並沒有從磁盤中刪除,類似windows下的回收站狀態。
據稱當有其他進程打開某文件時文件被刪除,就會將該文件標記爲deleted,並刪除其目錄節點。使用du查看時,因爲沒有該刪除狀態文件的節點信息,所以就不做統計,從而導致與df的結果不一致。
若要將deleted狀態文件刪除,則根據pid直接kill調相應進程即可。如kill -9 pid
Linux中徹底刪除文件
我們知道在Linux中刪除文件一般使用rm, 但是rm命令並不會真的清空保存該文件的數據塊的內容,而只是釋放了該文件所佔用的索引節點和數據塊。因此用rm刪除的文件是可以通過一些方法恢復的(比如可以用debugfs恢復,具體方法Google之)。
有些時候我們要徹底刪除一些文件,可以使用shred命令來實現,shred是coreutils的一部分,所以Linux中基本都會有這個命令。
shred徹底刪除文件的方法:
$ shred -u file
shred會用一些隨機內容覆蓋文件所在的節點和數據塊,並刪除文件(-u參數)。
如果想清除的更徹底一點可以加-z 參數,意思是先用隨機數據填充,最後再用0填充。
$ shred -u -z file
另外shred還可以清除整個分區或磁盤,比如想徹底清除/dev/sdb1分區的內容可以這樣:
$ shred /dev/sdb1 (注意不要加-u參數)
shred的詳細參數:
-f, --force 更改權限允許寫入(如有必要)
-n, --iterations=N 重寫N次,默認爲3次
--random-source=FILE 從指定文件讀取數據
-s, --size=N 將文件粉碎爲固定大小 (可使用後綴如K、M、C等)
-u, --remove 重寫後截短並移除文件
-v, --verbose 顯示進度
-z, --zero - add 用0覆蓋數據
–help 顯示幫助
–version 顯示版本信息