df與du命令區別解析

1、正常情況下,df和du輸出結果都會有差距。

  du -sh命令通過將指定文件系統中所有的目錄、符號鏈接和文件使用的塊數累加得到該文件系統使用的總塊數;
而df命令通過查看文件系統磁盤塊分配圖得出總塊數與剩餘塊數。
文件系統分配其中的一些磁盤塊用來記錄它自身的一些數據,如i節點,磁盤分佈圖,間接塊,超級塊等。這些數據對大多數用戶級的程序來說是不可見的,通常稱爲Meta Data。
du命令是用戶級的程序,它不考慮Meta Data,而df命令則查看文件系統的磁盤分配圖並考慮Meta Data。

因此正常情況下,df計算的USED空間會比du計算的結果要稍大。

2、異常情況下,df計算的USED空間會比du大很多。

這也是之前碰到的問題,df查看結果文件系統100%使用了,而du的結果是還有6GB空閒的,就這麼個問題硬件廠商一個SUPPORT居然不知道怎麼解釋,這也是讓我好奇晚上回來查查看究竟的原因,結果GOOGLE一下就有了。

原因在於du是以文件名、目錄名爲依據計算空間使用的,而df是以硬盤塊使用情況來計算空間使用的。

當一個應用程序正在寫一個大文件的時候,我們RM或者MV了這個文件(UNIX是允許這麼幹的,WINDOWS在這一點上傻有傻福),應用程序會佔有句柄,並根據句柄所指磁盤位置直接寫磁盤,而不會檢查該文件是否被刪除。

因此就會產生上述的問題。具體到Oracle層面,可能發生這種情況的有:Oracle因爲某種原因在生成很大的TRACE文件,可能導致oracle等目錄滿,如果此時直接RM或MV掉該TRACE文件會發現空間並不會釋放,進而可能導致Oracle數據庫DOWN機。

解決辦法:使用“> tracefile.trc”命令清空掉該文件,如果需要保留TRACE文件便於事後分析問題,可以使用CP先複製該文件到其他地方,然後清空掉原來的文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章