Linux 系統 inodes 資源耗盡,如何解決?


inodes介紹

Linux系統下文件數據儲存在"塊"中,文件的元信息,例如文件的創建者、文件的創建日期、文件的大小等。這種儲存文件元信息的區域就叫做inode,中文譯名爲"索引節點"。inode也佔用硬盤空間,硬盤格式化的時候,操作系統自動將硬盤分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。

每個inode節點的大小,一般是128字節或256字節。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設置一個inode。假定在一塊1GB的硬盤中,每個inode節點的大小爲128字節,每1KB就設置一個inode,那麼inode table的大小就會達到128MB,佔整塊硬盤的12.8%。

inodes資源耗盡

inodes使用完與存儲空間使用完相似,都是創建不了文件或無法正常執行一些命令。inodes使用完,存儲空間可能還有,這種情況一般是生成了大量的小文件,把inode table佔滿。

一般情況下存儲空間使用完,inodes往往才使用百分之幾,所以容易忽視對inodes使用情況的監控。

借用網圖來說明inodes用盡,而磁盤空間還未用完的情況:查看磁盤空間使用情況,使用df命令

查看inodess使用情況,使用df -i命令

上述兩個命令可以使用-h參數,命令爲df -h和df -hi。從圖中看見磁盤空間使用71%,但是inodes使用100%。

inodes耗盡解決

inodes的大小在磁盤格式化分區時確定,跟分區的大小相關,分區越大,inodes越大,反之亦然。

linux操作系統根目錄一般分區比較小,如果有定時性的小文件產生而又未及時清理,則很容易造成inodes佔滿。

inodes佔滿解決步驟:

1、查看文件最多的目錄

for i in /*; do echo $i; find $i | wc -l; done

如果確定目錄範圍,把/*寫的具體點

最終發現是/var/spool/postfix/maildrop目錄下小文件過多,原因如下:由於linux在執行cron時,會將cron執行腳本中的output和warning信息,都會以郵件的形式發送給cron所有者。由於客戶環境中的sendmail和postfix沒有正常運行,郵件發送不成功,導致全部小文件都堆積在maildrop目錄下,另由於缺乏自動清理的機制,故此目錄下堆積了大量的文件。

經過排查root用戶下發現有個每分鐘進行一次時鐘同步的定時任務,該定時任務每分鐘產生一個小文件。

2、刪除大量文件

ls | xargs -n 1000 rm -rf  #需要使用xargs命令,不然會刪除失敗。  

總結

1、設置方面在crontab -e 第一行增加MAILTO="" ,就沒有文件產生啦

2、重定向對定時任務設置定向輸出文件,不需要日誌輸出的定時任務可以將日誌重定向到/dev/null,如下:

*/10 * * * * /tmp/test.sh >/dev/null 2>&1

3、定時清理文件

find 目錄 -type f -mtime +30 | xargs -n 1000 rm -f**

4、監控inodes的使用

備註:應注意crontab的寫法和產生的文件的定時清理

來源:https://www.cnblogs.com/cheyunhua/p/14195510.html

推薦閱讀:

Linux下日誌文件過大的解決方案

如何理解Linux中的load averages?

Linux 查詢 OS、CPU、內存、硬盤信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章