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的使用,如下圖:
備注:應(yīng)注意crontab的寫法和產(chǎn)生的文件的定時(shí)清理。