Linux,du df統計的硬碟使用情況不一致問題

2021-07-25 17:01:55 字數 1034 閱讀 3550

***

在運維linux伺服器時,會碰到需要檢視硬碟空間的情況,這時候,通常會使用df -lh命令來檢查每個掛載了檔案系統的硬碟的總量和已使用量,或者,可以使用du -sh [directory]命令來統計某個目錄下所有檔案的空間占用。

在使用df、du命令時,常常會遇到統計的硬碟使用情況不一致的問題。比如du統計根目錄下檔案總共大小為2g,而df判斷掛載在根目錄的硬碟已用空間達到了3g,20g甚至更多。發生這種情況,有以下三種原因:

為了預防緊急情況,linux ext檔案系統會預留部分硬碟空間,具體預留的數值可以通過tune2fs -l [dev_name] | grep 「reserved block count」檢視到(dev_name是裝置名),這裡預留的空間會被df計算到已用空間中,從而導致df和du統計不一致。如果需要調整預留空間大小,我們可以使用tune2fs -m [size] [dev_name]來進行調整。

du是統計被檔案系統記錄到的每個檔案的大小,然後進行累加得到的大小,這是通過檔案系統獲取到的。而df主要是從超級塊(superblock)中讀入硬碟使用資訊,df獲取到的是磁碟塊被使用的情況。當乙個檔案被刪除時,如果有別的程序正在使用它(占有控制代碼), 這個檔案將不會被du統計到,但是這個檔案被占用的磁碟空間卻依然會被df統計到。這些檔案,以及正在使用這些檔案的程序可以通過lsof | grep deleted查到。當程序停止或者被kill時,這些空間將被釋放。

如果上面兩種情況都排除了,但是資料還是不一致,那是怎麼回事?這裡隱藏著一種情況:當我們將乙個目錄掛在到乙個新的裝置(硬碟)上之前,如果這個目錄裡面已經有資料,那麼這一部分資料不會被du感知,在檔案系統中也看不到這些資料,但是這些資料又是確實占用了磁碟空間,是能夠被df所統計到的。這時候通過du/df統計原裝置的空間使用情況,就會發現df統計到的比du要多。遇到這樣的情況時,使用fuser -km [directory]殺死占用該目錄的所有程序(小心操作!),然後使用umount [directory]將該目錄掛載的裝置解除安裝,這時,目錄裡面原來已有的資料就會出現,我們將其刪除之後,再重新掛載裝置(mount -t [type] [dev] [directory])即可。

Mac載入NTFS格式硬碟,使硬碟可以讀寫

檢視掛載的磁碟列表 diskutil list 或者ls volumes macdisk my passport 輸入 sudo nano etc fstab 通過 etc fstab 路徑檢視生成的檔案 然後在檔案裡輸入 label my 040passport none ntfs rw,auto...

linux du df命令清除不要的大檔案

os centos 發現 home目錄完全滿了,如下處理找到大檔案並刪除。方法 步驟1.du du max depth 1 hm max depth 最大深度 h 容易理解 humanable m 以mb為單位 結果如下,root gdc1000 gftp du max depth 1 hm 233...

硬碟容量統計神器WinDirStat

最近遇到c盤快要爆滿的問題,我的筆記本是128g ssd 1t hdd,給c盤分配的空間是80g固態,由於平時疏遠管理,造成了c盤臃腫,遷移一些軟體,但還是沒有太好的解決,這是上知乎發現有大神推薦了這樣乙個軟體windirstat 硬碟容量統計。windirstat 是一款免費的硬碟容量統計軟體,它...