Linux系統(tǒng)inodes資源耗盡解決辦法

2020年12月28日14:15:45 發(fā)表評(píng)論 3,542 ℃

1.inodes介紹

Linux系統(tǒng)下文件數(shù)據(jù)儲(chǔ)存在"塊"中,文件的元信息,例如文件的創(chuàng)建者、文件的創(chuàng)建日期、文件的大小等。這種儲(chǔ)存文件元信息的區(qū)域就叫做inode,中文譯名為"索引節(jié)點(diǎn)"。

inode也占用硬盤空間,硬盤格式化的時(shí)候,操作系統(tǒng)自動(dòng)將硬盤分成兩個(gè)區(qū)域。一個(gè)是數(shù)據(jù)區(qū),存放文件數(shù)據(jù);另一個(gè)是inode區(qū)(inode table),存放inode所包含的信息。

每個(gè)inode節(jié)點(diǎn)的大小,一般是128字節(jié)或256字節(jié)。inode節(jié)點(diǎn)的總數(shù),在格式化時(shí)就給定,一般是每1KB或每2KB就設(shè)置一個(gè)inode。假定在一塊1GB的硬盤中,每個(gè)inode節(jié)點(diǎn)的大小為128字節(jié),每1KB就設(shè)置一個(gè)inode,那么inode table的大小就會(huì)達(dá)到128MB,占整塊硬盤的12.8%。

2.inodes資源耗盡

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

一般情況下存儲(chǔ)空間使用完,inodes往往才使用百分之幾,所以容易忽視對(duì)inodes使用情況的監(jiān)控。

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

[root@www.zhongjima.net ~]# 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@www.zhongjima.net ~]# 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

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

3.inodes耗盡解決

inodes的大小在磁盤格式化分區(qū)時(shí)確定,跟分區(qū)的大小相關(guān),分區(qū)越大,inodes越大,反之亦然。

linux操作系統(tǒng)根目錄一般分區(qū)比較小,如果有定時(shí)性的小文件產(chǎn)生而又未及時(shí)清理,則很容易造成inodes占滿。

inodes占滿解決步驟:

①查看文件最多的目錄

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

如果確定目錄范圍,把/*寫的具體點(diǎn)

最終發(fā)現(xiàn)是/var/spool/postfix/maildrop目錄下小文件過多,原因如下:由于linux在執(zhí)行cron時(shí),會(huì)將cron執(zhí)行腳本中的output和warning信息,都會(huì)以郵件的形式發(fā)送給cron所有者。由于客戶環(huán)境中的sendmail和postfix沒有正常運(yùn)行,郵件發(fā)送不成功,導(dǎo)致全部小文件都堆積在maildrop目錄下,另由于缺乏自動(dòng)清理的機(jī)制,故此目錄下堆積了大量的文件。

經(jīng)過排查root用戶下發(fā)現(xiàn)有個(gè)每分鐘進(jìn)行一次時(shí)鐘同步的定時(shí)任務(wù),該定時(shí)任務(wù)每分鐘產(chǎn)生一個(gè)小文件。

②刪除大量文件

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

4.總結(jié)

①設(shè)置方面在crontab -e 第一行增加MAILTO="" ,就沒有文件產(chǎn)生啦

②重定向?qū)Χ〞r(shí)任務(wù)設(shè)置定向輸出文件,不需要日志輸出的定時(shí)任務(wù)可以將日志重定向到/dev/null,如下:

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

③定時(shí)清理文件

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

④監(jiān)控inodes的使用,如下圖:

Linux系統(tǒng)inodes資源耗盡解決辦法

備注:應(yīng)注意crontab的寫法和產(chǎn)生的文件的定時(shí)清理。

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫(kù)、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評(píng)論

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