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

2021-07-17 05:30:22 字數 1168 閱讀 1446

我之前在系統上寫過乙個監控硬碟剩餘空間的指令碼,今天它給我發來報警了,於是我就登入到伺服器上檢視,結果發現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查出來的結果不同的檔案,趕走了系統裡的「無賴」,索回屬於我們的空間。 

如果讀者根據此法依舊無法解決問題,說明你們的情況可能跟我的不太一樣。

linux的du和df命令

df命令 name 報告檔案系統磁碟空間的使用情況 格式 df option file 描述 此手冊頁文件是df的gnu版本.df命令列出指定的每乙個檔名所在的檔案系統上可用磁碟空間的數量。如果沒有指定檔名,則顯示當前所有使用中的檔案系統.預設設定時,磁碟空間以1k為一塊顯示,如果環境變數posix...

執行這個SQL查出來剛插入記錄對應的自增列的值

這個也是老生常談的乙個東西,特別簡單,也特別常用。在學習以來,我就記得到一種方式,今天經過學習發現,有三種方式可以獲取該值,具體如何使用,大家要看看場景了,嘿嘿!有三個函式分別是 scope identity ident current 和 identity,它們都返回插入到 identity 列中...

Linux中du和df命令的區別

昨天阿里巴巴的筆試中出現這乙個題目,直接給鄙視了,得補補linux 的知識點 因為df和du的統計機制不一樣。du會把指定目錄下所有檔案 目錄 目錄下的檔案都統計。是建立在檔案系統能看到的的確確是有這樣一些檔案的基礎上的。也就是說我們能在檔案系統裡面看到的檔案才會被du統計。df df命令通過檢視檔...