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

圖片

inodes介紹

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

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

inodes資源耗盡

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

通常狀況下存儲空間使用完,inodes每每才使用百分之幾,因此容易忽視對inodes使用狀況的監控。post

借用網圖來講明inodes用盡,而磁盤空間還未用完的狀況:查看磁盤空間使用狀況,使用df命令圖片查看inodess使用狀況,使用df -i命令spa

圖片

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

inodes耗盡解決

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

linux操做系統根目錄通常分區比較小,若是有定時性的小文件產生而又未及時清理,則很容易形成inodes佔滿。code

inodes佔滿解決步驟:blog

一、查看文件最多的目錄索引

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用戶下發現有個每分鐘進行一次時鐘同步的定時任務,該定時任務每分鐘產生一個小文件。

二、刪除大量文件

ls | xargs -n 1000 rm -rf  #須要使用xargs命令,否則會刪除失敗。

總結

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

二、重定向對定時任務設置定向輸出文件,不須要日誌輸出的定時任務能夠將日誌重定向到/dev/null,以下:

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

三、定時清理文件

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

四、監控inodes的使用

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

_來源: https://www.cnblogs.com/cheyu...

image

相關文章
相關標籤/搜索