Linux系統inodes資源耗盡解決辦法

2020年12月28日14:15:45 發表評論 3,687 ℃

1.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%。

2.inodes資源耗盡

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

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

下面的結果為inodes用盡,而磁盤空間還未用完的情況:查看磁盤空間使用情況,使用df -h命令

[root@m.maowutv.com ~]# df -h
Filesystem  Size  Used  Avail  Use%  Mounted
/dev/sda2   30G   18G   13G    59%   /
/dev/sda3   62G   21G   41G    34%   /data
/dev/sda1   497M  130M  367M   27%   /boot

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

[root@m.maowutv.com ~]# df -i 
Filesystem  Inodes    IUsed     IFree     IUse%  Mounted
/dev/sda2   15728640  15728640  0         100%   /
/dev/sda3   32248832  130054    32118778  1%     /data
/dev/sda1   256000    327       255673    1%     /boot

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

3.inodes耗盡解決

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

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

inodes占滿解決步驟:

①查看文件最多的目錄

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命令,不然會刪除失敗。

4.總結

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

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

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

③定時清理文件

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

④監控inodes的使用,如下圖:

Linux系統inodes資源耗盡解決辦法

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

【騰訊云】云服務器、云數據庫、COS、CDN、短信等云產品特惠熱賣中

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: