資料夾為空,但 du 報告使用率很高

資料夾為空,但 du 報告使用率很高

115GB我的硬碟上有一個分區(輸出cgdisk /dev/sda如下):

Part. #     Size        Partition Type            Partition Name
----------------------------------------------------------------
            1007.0 KiB  free space
   1        499.0 MiB   Windows RE                Basi
   2        100.0 MiB   EFI System                EFI 
   3        16.0 MiB    Microsoft reserved        Micr
   5        43.9 GiB    Linux filesystem          ubuntu-root
   6        43.9 GiB    Linux filesystem          ubuntu-home
   4        114.9 GiB   Linux filesystem          data         <--- this partition
   7        29.5 GiB    Linux filesystem

我已將該分割區安裝在/data我的/etc/fstab

UUID=<drive-uuid>  /data  ext4  defaults  0  0

當我這樣做時df -h /data,我有以下輸出:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       113G   96G   11G  90% /data

當我du這樣使用時:du /data -h --max-depth=1 | sort -hr,我看到這個:

51G    /data
40G    /data/virtual-box
4.4G   /data/temp
4.1G   /data/manjaro-minikube
1.9G   /data/.nuget
764M   /data/OneDrive
62M    /data/manjaro-lxd
40K    /data/.minikube
16K    /data/lost+found

如果我沒記錯的話,它顯示正在/data佔用51G,然後我有virtual-boxtempmanjaro-minikube.nuget目錄佔用空間(其他目錄不佔用大量空間)

如果我列出我的目錄的長列表 ( ls -alh /data):

total 68K
drwxr-xr-x  10 farzad farzad 4.0K Aug 13 21:47 .
drwxr-xr-x  19 root   root   4.0K Jul 13 10:32 ..
drwx------   2 farzad farzad  16K Mar 22 18:22 lost+found
drwx--x--x  15 root   root   4.0K Aug 20 17:47 manjaro-lxd
drwxr-xr-x   3 farzad farzad 4.0K Jul  3 18:16 manjaro-minikube
drwxrwxr-x   9 farzad farzad 4.0K Jul 30 17:38 .minikube
drwxr-xr-x 202 farzad farzad  16K Aug 17 10:00 .nuget
drwxr-xr-x   3 farzad farzad 4.0K Aug 13 21:47 OneDrive
drwxrwxr-x  16 farzad farzad 4.0K Jun  3 21:45 temp
drwxr-xr-x   6 farzad farzad 4.0K Aug 20 20:21 virtual-box

我沒有看到任何文件或對51G報告有貢獻的東西/data,所以我希望我的驅動器幾乎65G有空空間,但由於某種原因,/data父目錄正在51G自行佔用!

我嘗試在互聯網上進行研究,但我找不到任何東西。有人可以讓我知道發生了什麼事嗎?


更新

正如答案中所建議的,我lsof /data | grep deleted(以 root 身份)運行,但沒有任何結果,儘管我看到一條警告,但我不確定該警告是否相關:

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

答案1

/data正在服用51G。這包括其中的所有子目錄和檔案。如果您新增du子目錄報告的大小(並考慮舍入問題),您將獲得大約51G.如果 中直接存在常規文件/data,它們也會對報告的值有所貢獻/data

因此du不會報告高使用率。這是df報告高使用率的內容:96G正在檔案系統中使用。

由於/data是一個安裝點,您可能期望這兩個值相同。但這兩個工具的工作方式不同:du遍歷目錄並添加遇到的物件的大小,df查詢檔案系統有關其自身狀態的知識。

如此大的差異可能是因為:

  • du無法存取(或取得有關)所有物件的資訊。有什麼permission denied錯誤嗎?
  • 文件系統存在不一致;fsck.ext4又名e2fsck可能有幫助。
  • 最有可能的)至少有一個檔案被刪除(指向相應索引節點的所有目錄條目都被刪除,該檔案沒有出現在任何目錄列表中,因此du無法知道它),但它仍然被某個進程使用(因此檔案系統保留數據並在向報告時將其考慮在內df)。看這個答案,這個問題

    以下命令應該找到此類文件和使用它們的進程:

    lsof /data | grep deleted
    

    輸出範例:

    some_daemon  …  …  …  …  …  …  …  /data/temp/huge_file (deleted)
    

    這意味著檔案系統只有在停止使用huge_file後才會真正刪除它。some_daemon請注意,通常該進程仍然可以追加到文件或截斷文件,因此文件可能會增大或縮小。這會影響所說df的內容,但不會du

答案2

所以,事實證明這裡存在一些問題(感謝@Kamil 幫助找到它們):

du儘管這是我最初的直覺,即for報告的數量/data是其所有子目錄的總和(進行了一些四捨五入),但我想我是在試圖證明 和 之間的差異dfdu並認為我應該總結和 所有的du輸出/data它的子目錄以獲得與相同的結果df

另一個問題是導致差異的主要原因,是因為我如何配置我的/etc/fstab

UUID=<uuid>  /data  ext4  defaults  0  0
                                       ^
                                     ISSUE

當我創建我的 時/etc/fstab,我認為我不需要通過fsck在掛載上啟用文件系統檢查()來延長啟動時間,因此0對於第六個字段,但事實證明,這導致索引節點不被清理,因此造成df和之間的巨大差異du

因此,查看man 5 fstab,我們可以看到,為了啟用檢查,根檔案系統應該具有 value 1,其他檔案系統應該具有 value 2,所以我將該行更改為:

UUID=<uuid>  /data  ext4  defaults  0  2

重啟後,報告了很多問題fsck,我選擇修復它們,現在輸出du /data -h --max-depth=1 | sort -hr

28G    /data
16G    /data/virtual-box
4.5G   /data/temp
4.1G   /data/manjaro-minikube
1.9G   /data/.nuget
824M   /data/OneDrive
64M    /data/manjaro-lxd
40K    /data/.minikube
16K    /data/lost+found

和輸出df /data -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       113G   28G   80G  26% /data

值得注意的是,與我原來的問題相比,我刪除了一些文件(因此28G使用而不是51G),但好處是dudf報告相同的值:)

答案3

您的命令正在將結果從最高到最低排序。最高值為全部的所使用的空間/data,而不是它自己使用的空間。

相關內容