首頁 > 軟體

解決df和du命令查出來的已使用空間不同的問題

2020-06-16 17:42:01

我之前在系統上寫過一個監控硬碟剩餘空間的指令碼,今天它給我發來報警了,於是我就登入到伺服器上檢視,結果發現df和du查出來的結果不一樣,du查出來的“實際使用空間”明顯比df查出來的已使用空間要小很多,這是為什麼呢?難道有些空間被隱藏起來了?
最終,借助網上的力量,解決了這個“詭異”的事件,並全程記錄下來了。
首先,我們用df來檢視已使用空間:

從上圖可知,根分割區已使用5456700KB(合約5.20GB)。
然後,我們用du查出根分割區下每個目錄的大小:

排除紅框中的兩個目錄(因為他們是掛載上去的),所有目錄的總大小為3075332KB(合約2.93GB),比df查出來足足小了2.27GB。
為什麼會少了這麼多空間呢?
其實是因為我們之前刪除了一些進程正在寫入的檔案,雖然已經被我們刪除了,但只要進程還在,那個檔案就不會被真正地刪除,只是被臨時存放到系統的某個地方而已,有點類似於Windows的回收站。
想解決這個問題,最簡單地就是重新啟動伺服器了,但是生產環境一般都不會輕易重新啟動的,所以我們可以通過其他方式來解決。
先用lsof命令配合grep命令查出哪些是已經被刪除,卻依舊佔用系統空間的“無賴”。

上圖紅框中的檔案正是我之前刪除的一個大檔案,我現在嘗試去重新啟動這個程式(node),我直接kill掉這個進程,因為我做了自動啟動,所以我不用手動去啟動它。

已使用空間一下子下降到3226324KB(合約3.08GB),已經很接近du統計的總空間了。
接下來,我逐個重新啟動了其他deleted的檔案,最終df查出來的大小就和du統計的總空間差不多大了。
到此,就解決了df和du查出來的結果不同的檔案,趕走了系統裡的“無賴”,索回屬於我們的空間。
如果讀者根據此法依舊無法解決問題,說明你們的情況可能跟我的不太一樣。

本文永久更新連結地址http://www.linuxidc.com/Linux/2016-05/131220.htm


IT145.com E-mail:sddin#qq.com