首先MAN一下倆個命令,看一下解釋的區別:java
du - estimate file space usagelinux
df - report file system disk space usagewindows
du估計文件空間佔用狀況,df報告文件系統磁盤空間使用狀況。兩個命令所要獲取的對象時不一樣的。在linux下,幾乎全部東西均可以稱爲文件,常規文件,二進制文件,socket流。因此,一般狀況下,使用du獲得到的根路徑文件空間佔用狀況應當與df獲得的文件系統磁盤佔用的狀況是一直的或者說相差無幾。可是在某些狀況下卻會出現du獲得的空間佔用狀況要遠小於df獲得的。oracle
後經過查詢,發現問題出如今deleted文件上。socket
root下lsof | grep deleted會發現多多少少有些文件狀態出於deleted狀態。spa
[root@eb152 ~]# lsof |grep deleted日誌
進程名 PID USER FD 文件類型 大小(字節) 索引節點 文件名 [(狀態)]對象
java 3311 AuSP 8w REG 253,0 778 10879268 ***.log (deleted)索引
java 3311 AuSP 9w REG 253,0 3275 10879269 ***.log (deleted)進程
java 3311 AuSP 10w REG 253,0 0 10879815 ***.log (deleted)
java 3311 AuSP 11w REG 253,0 0 10879816 ***.log (deleted)
oracle 4195 oracle 7u REG 253,0 0 14254321 *** (deleted)
狀態爲deleted爲標記被刪除,其實該文件並無從磁盤中刪除,相似windows下的回收站狀態。
據稱當有其餘進程打開某文件時文件被刪除,就會將該文件標記爲deleted,並刪除其目錄節點。使用du查看時,由於沒有該刪除狀態文件的節點信息,因此就不作統計,從而致使與df的結果不一致。
若要將deleted狀態文件刪除,則根據pid直接kill調相應進程便可。
找回被刪除文件:
根據以上分析,若刪除的文件仍有進程進行操做是有找回數據的可能的。
quote:
若刪除的文件爲系統日誌中的secure文件,則能夠根據如下方法找回:
# lsof |grep /var/log/secure
syslogd 2574 root 2w REG 253,0 1099 525125 /var/log/secure (deleted)
能夠看到進程號爲2574的syslogd進程仍然打開了/var/log/secure這個文件,這個文件所顯示狀態是deleted,已經被刪除。如今FD文件描述符是2w。它的意思是文件描述符是2,狀態是w寫。
咱們能夠根據這個在/proc/2574/fd/2找到被刪除的/var/log/secure的內容。
當文件被誤刪時,切忌reboot操做。