linux中inode使用率過高處理辦法
前幾天收到監控告警,說Inode節點空間不足,之前沒處理過這種問題,所以記錄一下處理過程,便於以後查閱。
Inode使用率高並不會影響系統正常運行和新文件的創建,但是當使用率達到100%的時候,此時雖然磁盤還有空間,也不能創建新的文件了。
這是因爲,文件在存儲到磁盤中的時候,會同時用到inode和block,inode保存文件屬性信息,包括文件名,大小,權限,時間,存儲位置等,而block中則保存實際的數據,
所以如果inode用完的話,即使磁盤還有空間也無法創建新文件了。
發生這種情況的原因一般是系統中小文件過多,佔用了大量的inode節點,找到對應目錄,刪除一些文件就可以了。
說明:以下執行結果並不是真實告警值,只是操作舉例。
1.查看磁盤分區和inode使用情況
df -h #查看磁盤分區使用情況 df -ih #查看inode節點使用情況
2.查找並刪除臨時文件
ll -rt /tmp | wc -l find /tmp -type f -exec rm {} \;
3.刪除0字節的文件
find /home -type f -size 0 -exec rm {} \;
4.查找包含大量文件的目錄並刪除
for i in /*; do echo $i; find $i |wc -l; done for i in /var/*; do echo $i; find $i |wc -l; done
大概率在/var目錄下的/var/spool中有大量文件,進入該目錄查看
for i in /var/spool/*; do echo $i; find $i |wc -l; done
發現 /var/spool/postfix/ 目錄下有大量文件,繼續進入該目錄查看
說明:/var/spool/postfix/ 下面生成那麼多的文件是因爲crontab定時任務導致的,定時任務執行後發送郵件告知聯繫人,但是發送失敗就會在postfix下生成,所有就產生了這麼多的垃圾文件。
for i in /var/spool/postfix/*; do echo $i; find $i |wc -l; done
可以看到,文件主要集中在/var/spool/postfix/maildrop目錄下,進入該目錄清除即可
執行rm命令直接刪除,可能會報錯參數列表太長,可以通過一下方式進行刪除
ls | xargs -n 500 rm -rf #-n表示一次傳遞參數的個數
執行完之後,再次用 df -ih 查看Inode節點使用率,發現恢復正常。