如何解決Linux中“磁盤空間不足”的問題
明明有很多剩余空間,但 Linux 系統(tǒng)依然提示沒有空間剩余。為什么會這樣呢?Linux 偶爾會有一些令人沮喪的模糊的錯誤消息出現(xiàn),而這就是其中一種。不過這種錯誤通常都是由某幾種因素導(dǎo)致的。
通過 du 和 df 檢查磁盤空間
在開始行動前,***先檢查一下是否磁盤上是否確實還有空間剩余。雖然桌面環(huán)境的工具也很不錯,但命令行上的工具更直接,要好的多。
Linux Filesystem du
首先讓我們看看 du
命令。用它來檢查問題磁盤所在的掛載點目錄。本文假設(shè)出問題的分區(qū)掛載點為根目錄。
sudo du -sh /
Linux Filesystem df
由于它要遍歷磁盤中的所有文件,因此需要花費一點時間?,F(xiàn)在再讓我們試試 df
。
sudo df -h
把根目錄和在其中掛載的文件系統(tǒng)加在這條命令的后面。比如,若你的有一個獨立的磁盤掛載到 /home
,那么除了根目錄之外,你也需要把它加進(jìn)來。使用空間的總和應(yīng)該跟你 du
命令得到的結(jié)果接近。否則的話,就說明可能有已刪除文件的文件被進(jìn)程占用。
當(dāng)然,這里主要專注點在于這些命令的結(jié)果是否要小于磁盤的大小。如果確實小于磁盤大小,那么很明顯有很多地方不對勁。
相關(guān):使用 Agedu 分析硬盤空間使用狀況
可能的原因
這里列出了一些產(chǎn)生這種情況的主要原因。若你發(fā)現(xiàn) du
和 df
的結(jié)果之間有差別,那么可以直接檢查***項原因。否則從第二項原因開始檢查。
已刪除文件被進(jìn)程所占用
有時,文件可能已經(jīng)被刪掉了,但有進(jìn)程依然在使用它。在進(jìn)程運行期間,Linux 不會釋放該文件的存儲空間。你需要找出這個進(jìn)程然后重啟這個進(jìn)程。
Check processes for deleted files
使用下面命令來定位進(jìn)程。
sudo lsof / | grep deleted
這應(yīng)該會列出出問題的進(jìn)程了,然后重啟該進(jìn)程。
sudo systemctl restart service_name
i 節(jié)點不夠了
Linux check filesystem inodes
文件系統(tǒng)中有一些稱為 “i 節(jié)點” 的元數(shù)據(jù),其用來保存文件的相關(guān)信息。很多文件系統(tǒng)中的 i 節(jié)點數(shù)量是固定的,因此很可能 i 節(jié)點已經(jīng)耗盡了而文件系統(tǒng)本身還沒有用完。你可以使用 df
來檢查。
sudo df -i /
比較一下已用的 i 節(jié)點和總共的 i 節(jié)點數(shù)量。如果沒有可用的 i 節(jié)點了,那么很不幸,你也無法擴(kuò)充 i 節(jié)點。刪除一些無用的和過期的文件來釋放一些 i 節(jié)點吧。
環(huán)塊
***一個很常見的問題就是壞的文件系統(tǒng)塊。除非另有標(biāo)記,否則操作系統(tǒng)很可能會認(rèn)為這些塊都是可用的,這會導(dǎo)致文件系統(tǒng)損壞或者硬盤壞死。***是使用帶 -cc
標(biāo)志的 fsck
搜索并標(biāo)記出這些塊。記住,你不能使用正在使用的文件系統(tǒng)(LCTT 譯注:即包含壞塊的文件系統(tǒng))中的 fsck
命令。你應(yīng)該會要用到 live CD。
sudo fsck -vcck /dev/sda2
很明顯,這里需要使用你想檢查的磁盤路徑取代命令中的磁盤位置。另外,要注意,這恐怕會花上很長一段時間。
相關(guān):使用 fsck 檢查并修復(fù)你的文件系統(tǒng) [Linux]
希望這些方案能解決你的問題。這種問題在任何情況下都不是那么容易診斷的。但是,在運氣好的情況下,你可以把文件系統(tǒng)清理干凈并讓你的硬盤再次正常工作。