Linux

df 命令顯示 100% 已滿,即使在刪除文件後也顯示相同的使用情況 (100%)

  • January 27, 2021

Nand Flash 儲存分區使用 df 命令顯示為 100% 已滿。當手動計算使用量時,它僅約為 7-80%(最大值)。刪除了幾個文件(大約 50~60MB),df 命令輸出仍然沒有改變。我無法創建新文件,錯誤:“儲存設備上沒有剩餘空間”。試過sync命令,沒有區別。

Filesystem           1K-blocks      Used Available Use% Mounted on
tmpfs                   262144     20780    241364   8% /tmp
tmpfs                      512         0       512   0% /dev
/dev/ubi0_0            1275540   1275540         0  100% /storage

當實際儲存空間未滿時(根據手動計算),為什麼 df 命令顯示為 100% 滿?

重新啟動並重新安裝將解決我相信的問題。

**原因:**這背後的原因是df利用statfs(2)系統呼叫來獲取文件系統統計資訊。這意味著它檢查打開的核心文件描述符以計算其命名的可用空間(df = 可用磁碟)。如果你使用 . 你會得到不同的結果dudf顯示 100% 已使用,因為已刪除的文件尚未從核心文件描述符中釋放。

可能下面的場景會幫助你理解:

  1. 一個名為的正在執行的程序xyz.service正在使用一個名為的文件,該文件something.dump位於/storage分區中。
  2. file discriptorsomething.dump在 的process file descriptor tablexyz.service
  3. 然後你刪除了something.dumpxyz.service仍在執行。
  4. xyz.service不知道文件的更新狀態something.dump。所以文件描述符something.dump仍然存在。
  5. 然後您執行df命令,核心檢查所有程序表以查看使用的文件描述符來計算可用空間。
  6. 核心看到該inodes文件的something.dump文件仍然列在xyz.service程序的文件描述符表中。所以它something.dump仍然在文件系統中,因此它不認為 something.dump 的 inode 是免費的。這就是您看到更多使用的原因。
  7. 因此,當您SIGKILL xyz.service釋放這些 inode 時,您可能會看到可用空間。
  8. 重新啟動系統將執行與步驟 7 相同的操作。

引用自:https://unix.stackexchange.com/questions/391100