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使用完,存儲空間可能還有,這種狀況通常是生成了大量的小文件,把inode table佔滿。 shell
通常狀況下存儲空間使用完,inodes每每才使用百分之幾,因此容易忽視對inodes使用狀況的監控。 ide
借用網圖來講明inodes用盡,而磁盤空間還未用完的狀況:查看磁盤空間使用狀況,使用df命令post
查看inodess使用狀況,使用df -i命令 操作系統
上述兩個命令能夠使用-h參數,命令爲df -h和df -hi。從圖中看見磁盤空間使用71\%,可是inodes使用100\%。 日誌
inodes的大小在磁盤格式化分區時肯定,跟分區的大小相關,分區越大,inodes越大,反之亦然。 code
linux操做系統根目錄通常分區比較小,若是有定時性的小文件產生而又未及時清理,則很容易形成inodes佔滿。 blog
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的寫法和產生的文件的定時清理