A-A+

解决Linux索引节点(inode)用满导致故障的方法

2017年05月05日 Linux运维 暂无评论 阅读 4,048 views 次

今天服务器监控突然曝出了如下的错误:Free inodes is less than 20%,即

 vfs.fs.inode[/,pfree]):20 %

登录到服务器上df -i一看/路径下81%,而数据目录/data下才用了30%,故初步判断生成的数据量正常,可能是一些系统产生的文件把根路径占满了

于是乎在执行以下命令,查看根路径下各个文件夹的文件数

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

数文件数超过10W的有两个/data(我们的数据分区,确认数据量正常)和/var

/data 13W+文件

/var下70W+文件

楼主linux水平有限,于是把/var下的目录一个个的执行了上面的命令

for i in /var/cache; do echo $i; find $i |wc -l|sort -nr; done

for i in /var/db; do echo $i; find $i |wc -l|sort -nr; done
........

重点来了,当执行到下面的时候

 for i in /var/spool/; do echo $i; find $i |wc -l|sort -nr; done

文件夹里有70W+文件

于是重复上述步骤,终于找到了罪魁祸首

for i in /var/spool/postfix/maildrop/; do echo $i; find $i |wc -l|sort -nr; done

/var/spool/postfix/maildrop/下有67W+文件

在网上搜索之后明白是mail没有成功的邮件。由于linux在执行cron时,会将cron执行脚本中的output和warning信息,都会以邮件的形式发送cron所有者, 而我的服务器中关闭了postfix,导致邮件发送不成功,全部小文件堆积在了maildrop目录下面。如果sendmail或者postfix正常运行,则会在/var/mail目录下也会堆积大量的邮件。

于是乎执行rm -rf ./* 竟然报错说/bin/rm的参数列表过长,不能一次性删除。

只能来大招了。

find . -name "*" | xargs rm -rf

10S后,成功收到报警解除的邮件,胜利处理完此问题

给我留言

本站理念:

致力于运维技术的分享,运维前源技术的探讨,欢迎广大朋友一起参与,一起分享,共同成长。

交流探讨:

QQ群:26489714