管理 Linux 伺服器時,常發現 df 與 du 顯示的已用空間差異極大。du 統計的目錄總和明顯小於 df 回報的已用空間,這是否意味著空間被隱藏?本文解析成因並提供解決方案。
df 顯示根分區已用 5,456,700 KB(約 5.20 GB)。
du 統計根目錄下各目錄大小(排除掛載點),總和僅 3,075,332 KB(約 2.93 GB),相差 2.27 GB。
此現象通常因已刪除但仍被進程持有開啟的檔案導致。檔案雖從目錄移除,但只要進程未結束,其佔用的磁碟區塊不會釋放,類似 Windows 的「資源回收筒」機制。
lsof 搭配 grep 過濾 deleted 狀態的檔案:lsof | grep deleted
kill 進程)。若設有自動重啟機制,服務會自動拉起。df 顯示已用空間驟降至 3,226,324 KB(約 3.08 GB),接近 du 統計值。
df 與 du 數值趨近一致,成功追回「流失」空間。生產環境避免重啟伺服器,此法可線上釋放被佔用空間,無需停機維護。