Linux inode佔用100%的解決辦法

dbasdk發表於2017-06-24
當你的 Linux 系統無法建立新檔案時,有可能是你的磁碟滿了,還有可能是你的磁碟的 inode 用光了,我們今天要說的就是後一種情況,要解決這個問題,只能是刪除一些檔案,但是一般情況下,其實是你的系統中的某個地方產生了大量的你並不需要的檔案,你要做的就是找到他們並刪除就可以了,我並不是讓你刪除你有用的檔案,因為你一般不會有那麼多有用的檔案來把系統的 inode 用光。


什麼是 inode ?
檔案儲存在硬碟上,硬碟的最小儲存單位叫做”扇區”(Sector)。每個扇區儲存512位元組(相當於0.5KB)。
作業系統讀取硬碟的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個”塊”(block)。這種由多個扇區組成的”塊”,是檔案存取的最小單位。”塊”的大小,最常見的是4KB,即連續八個 sector組成一個 block。
檔案資料都儲存在”塊”中,那麼很顯然,我們還必須找到一個地方儲存檔案的元資訊,比如檔案的建立者、檔案的建立日期、檔案的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為”索引節點”。
每一個檔案都有對應的inode,裡面包含了與該檔案有關的一些資訊。


如何檢視系統的 innode 佔用情況
df -ih
如何查詢那個目錄下檔案最多
首先切到根目錄 /


cd /
然後執行
for i in /*; do echo $i; find $i | wc -l; done
或者
for i in `ls -1A | grep -v "\.\./" | grep -v "\./"`; do echo "`find $i | sort -u | wc -l` $i"; done | sort -rn | head -10


這樣會依次返回/目錄下檔案最多的目錄,進入這個目錄,再執行上述命令,就這樣層層深入最終確定是那個目錄檔案最多


如何刪除那個目錄的的所有檔案
一般情況下,如果這個目錄下應該會有數以百萬的檔案,如果你直接用 rm -rf 目錄名 的話效率會很低,可以用下面方法


find 目錄 -type f -name '*' -print0 | xargs -0 rm
時間可能會比較久,所以你最好開一個 screen 來處理


有可能是你遇到了下面的情況
/var/spool/postfix/maildrop 下面有很多檔案
為了避免,可以執行 crontab -e
在最開頭新增 MAILTO='"' 儲存,然後 server crond restart 重啟 crond


來源:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-2141218/,如需轉載,請註明出處,否則將追究法律責任。

相關文章