Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 磁碟空間查詢指令:du 與 df 差異深度解析

編輯:Linux 教學

前言

在 Linux 系統管理中,查看目錄佔用空間與硬碟總容量是基本且關鍵的技能。最常用的兩個指令 du(Disk Usage)與 df(Disk Free)雖然都能回報檔案系統大小資訊,但它們的統計邏輯、適用場景與回傳數值往往不同。本文將系統整理這兩個指令的核心差異、常見參數與實務操作技巧,幫助管理員精準掌握磁碟使用狀況。

一、du 指令:統計檔案與目錄實際佔用空間

常用參數

  • du -ks:以 KB 為單位顯示指定目錄總大小(僅顯示總計)
  • du -k:以 KB 為單位遞迴顯示每個子目錄大小
  • du -h:以人類可讀單位(K、M、G)顯示
  • du -s:僅顯示總計,不列出子目錄
  • du -S:不包含子目錄大小,僅統計該目錄下檔案大小

實用技巧

快速找出最大的目錄:

du -S | sort -n

二、df 指令:檢視檔案系統整體容量與剩餘空間

常用參數

  • df -h:以人類可讀單位顯示所有掛載點的總量、已用、可用、使用率
  • df -T:顯示檔案系統類型(ext4、xfs、vfat 等)
  • df -i:顯示 inode 使用情況

三、核心差異:為何 du 與 df 數值不一致?

這是許多管理員困惑的焦點。簡單說:

  • du:用戶層程式,遍歷目錄樹,累加所有檔案、目錄、符號連結實際佔用的資料區塊(data blocks)。不包含中繼資料。
  • df:讀取檔案系統的超級區塊與區塊分配圖,回報整個檔案系統已配置的總區塊數。包含中繼資料(inode table、superblock、block bitmap、indirect blocks、journal 等)。

經典案例:空檔案系統的中繼資料開銷

一個 4MB、frag=4096、nbpi=4096 的空日誌檔案系統,其 metadata 分配如下:

  • 1 個 4k 區塊給 LVM
  • 2 個 4k superblock
  • 2 個 4k disk map
  • 2 個 4k inode map
  • 2 個 4k indirect block
  • 32 個 4k inode table
  • 共 41 個 4k 區塊 = 328 個 512-byte 區塊

若用 du -s /foo 僅得 16 區塊(僅 lost+found 目錄),加上 328 區塊 metadata,共 344 區塊,與 df 回報的 8192 - 7848 = 344 完全吻合。

另一差異場景:已刪除但仍被開啟的檔案

若程式正開啟一大型檔案,此時以 rm 刪除該檔案:

  • du 立即反映空間釋放(目錄項已移除)
  • df 仍顯示空間被佔用,直到該程式關閉檔案描述符或進程結束

此時可用 lsof | grep deleted 找出佔用進程並重啟服務釋放空間。

四、實務排查流程建議

  1. 先用 df -h 找出使用率高的掛載點
  2. 進入該掛載點,用 du -h --max-depth=1 定位大目錄
  3. 再用 du -h --max-depth=1 * 細分到檔案層級
  4. 若 df 與 du 差異極大,檢查是否有大量已刪除未釋放檔案或 inode 耗盡(df -i)

五、補充:quota 使用者磁碟配額

若系統啟用 quota,可用 quota -v 查看特定使用者的磁碟限額與使用量,適合多使用者共享環境。

結語

理解 du 與 df 的統計視角差異,是精準掌握 Linux 磁碟狀態的關鍵。實務上請配合 lsof、fuser 等工具,快速定位空間異常根因,避免誤判導致服務中斷。

Copyright © Windows教程網 All Rights Reserved