明明有很多剩餘空間,
但 Linux 系統依然提示沒有空間剩餘。
為什麼會這樣呢?Linux 偶爾會有一些令人沮喪的模糊的錯誤消息出現,
而這就是其中一種。
不過這種錯誤通常都是由某幾種因素導致的。
通過 du 和 df 檢查磁碟空間
在開始行動前, 最好先檢查一下是否磁片上是否確實還有空間剩餘。 雖然桌面環境的工具也很不錯, 但命令列上的工具更直接, 要好的多。
Linux Filesystem du
首先讓我們看看 du 命令。 用它來檢查問題磁片所在的掛載點目錄。 本文假設出問題的分區掛載點為根目錄。
sudo du -sh /
Linux Filesystem df
由於它要遍歷磁片中的所有檔, 因此需要花費一點時間。 現在再讓我們試試 df。
sudo df -h把根目錄和在其中掛載的檔案系統加在這條命令的後面。 比如, 若你的有一個獨立的磁片掛載到 /home, 那麼除了根目錄之外, 你也需要把它加進來。 使用空間的總和應該跟你 du命令得到的結果接近。 否則的話, 就說明可能有已刪除檔的檔被進程佔用。
當然, 這裡主要專注點在於這些命令的結果是否要小於磁片的大小。 如果確實小於磁片大小, 那麼很明顯有很多地方不對勁。
相關:使用 Agedu 分析硬碟空間使用狀況
可能的原因
這裡列出了一些產生這種情況的主要原因。 若你發現 du 和 df 的結果之間有差別, 那麼可以直接檢查第一項原因。 否則從第二項原因開始檢查。
已刪除檔被進程所佔用
有時, 檔可能已經被刪掉了, 但有進程依然在使用它。 在進程運行期間, Linux 不會釋放該檔的存儲空間。 你需要找出這個進程然後重啟這個進程。
Check processes for deleted files
使用下面命令來定位進程。
sudo lsof / | grep deleted這應該會列出出問題的進程了, 然後重啟該進程。
sudo systemctl restart service_namei 節點不夠了
Linux check filesystem inodes
檔案系統中有一些稱為 “i 節點inode” 的中繼資料, 其用來保存檔的相關資訊。 很多檔案系統中的 i 節點數量是固定的, 因此很可能 i 節點已經耗盡了而檔案系統本身還沒有用完。 你可以使用 df 來檢查。
sudo df -i /比較一下已用的 i 節點和總共的 i 節點數量。 如果沒有可用的 i 節點了, 那麼很不幸,
壞塊
最後一個很常見的問題就是壞的檔案系統塊。 除非另有標記, 否則作業系統很可能會認為這些塊都是可用的, 這會導致檔案系統損壞或者硬碟壞死。 最好是使用帶 -cc 標誌的 fsck搜索並標記出這些塊。 記住, 你不能使用正在使用的檔案系統(LCTT 譯注:即包含壞塊的檔案系統)中的 fsck 命令。 你應該會要用到 live CD。
sudo fsck -vcck /dev/sda2很明顯, 這裡需要使用你想檢查的磁片路徑取代命令中的磁片位置。 另外, 要注意, 這恐怕會花上很長一段時間。