du查看的目錄大小與df查看的大小不一樣的時候用lsof查找

首先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操做。

相關文章
相關標籤/搜索