當我df -h在我的實體中寫作時,我得到了這些資料:
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 7.7G 408K 7.7G 1% /run
tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
/dev/nvme0n1p1 32G 24G 8.5G 74% /
tmpfs 1.6G 0 1.6G 0% /run/user/1000
但是當我點擊sudo du -sh /我得到:
11G /
所以在 中df -h,/大小是 24G,但在du -sh同一目錄中,大小是 11G。我試圖在我的實體上獲得一些可用空間,但找不到導致該空間的檔案。我缺少什么?也df -h真的給假資料?
uj5u.com熱心網友回復:
這個問題經常出現。檔案系統在檔案系統中分配磁盤塊來記錄其資料。此資料稱為元資料,對大多數用戶級程式(例如 du)不可見。元資料的示例包括 inode、磁盤映射、間接塊和超級塊。
du 命令是一個不知道檔案系統元資料的用戶級程式,而 df 查看檔案系統磁盤分配映射并知道檔案系統元資料。df 獲取真實的檔案系統統計資訊,而 du 只看到部分圖片。
運行 du 或 df 命令時使用或可用的磁盤空間不同的原因有很多。
也許最常見的是洗掉檔案。已被洗掉的檔案可能仍被至少一個行程打開。此類檔案的條目將從關聯目錄中洗掉,從而使檔案無法訪問。因此,僅對檔案進行計數的命令 du 不會考慮這些檔案并得出較小的值。然而,只要行程仍然有被洗掉的檔案在使用,相關的塊還沒有在檔案系統中釋放,所以在內核級別作業的 df 會正確地將這些塊顯示為已占用。您可以通過運行以下命令來確定是否是這種情況:
lsof | grep '(deleted)'
此問題的解決方法是重新啟動仍然打開這些已洗掉檔案的服務。
第二個最常見的原因是,如果您有一個磁區或驅動器安裝在同名目??錄的頂部。例如,如果您在 / 下有一個名為 backup 的目錄,其中包含資料,然后您在該目錄的頂部安裝一個新驅動器并將其標記為 /backup 但它不包含任何資料,則使用的空間將顯示為 df 命令,即使du 命令不顯示任何檔案。
要確定活動掛載點下是否隱藏了任何檔案或目錄,您可以嘗試使用系結掛載來掛載您的 / 檔案系統,這將使我能夠在其他掛載點下進行檢查。請注意,這僅建議有經驗的系統管理員使用。
mkdir /tmp/tmpmnt
mount -o bind //tmp/tmpmnt
du /tmp/tmpmnt
確認這是問題后,可以通過運行以下命令洗掉系結安裝:
umount /tmp/tmpmnt/
rmdir /tmp/tmpmnt
另一個可能的原因可能是檔案系統損壞。如果懷疑,請確保您有良好的備份,并在您方便時卸載檔案系統并運行 fsck。
同樣,這應該由有經驗的系統管理員來完成。
您還可以通過運行來檢查計算:
strace -e statfs df /
這將為您提供類似于以下內容的輸出:
statfs("/", {f_type=XFS_SB_MAGIC, f_bsize=4096, f_blocks=20968699, f_bfree=17420469,
f_bavail=17420469, f_files=41942464, f_ffree=41509188, f_fsid={val=[64769, 0]},
f_namelen=255, f_frsize=4096, f_flags=ST_VALID|ST_RELATIME}) = 0
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 83874796 14192920 69681876 17% /
exited with 0
注意到 f_bfree 和 f_bavail 之間的區別了嗎?這些是檔案系統中的空閑塊與非特權用戶可用的空閑塊。使用的列只是兩者之間的計算。
希望這會讓你的想法清晰。如果您還有任何疑問,請告訴我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/365931.html
