当碰到服务器 Inodes 报警,排查流程如下
操作系统环境:Centos6.8
一、使用 df -i 查看那个分区用量最多
- 这样就先定位到了问题分区
二、进入该分区,使用文件数量统计脚本
#文件数量统计脚本
#!/bin/bash
for i in `ls`;
do
file_num=`find ./$i/ -type f -print | wc -l`
echo "$i,$file_num"
done
- 这个脚本会统计出当前目录下的每个目录有多少个文件,这样就可以找出文件最多的目录,然后层层排查,就可以定位到问题目录。
三、小量分批删除
ls | grep '^' | xargs -n 100 rm -f #删除列出的文件,以100个为一组
# 使用这个指令是为了避免 "argument list too long "
- 最后不要忘记了排查问题的原因
最后分享下笔者遇到问题
- 我用上诉方法排查出 /var/spool/postfix/maildrop/ 有大量文件
原因是系统在执行 cron 任务时,会将 cron 执行脚本中的输出信息(output)和告警信息(warning)以邮件的形式发送给 cron 所有者,而我的服务器上关闭了 postfix ,导致邮件发送失败,小文件就堆积在了 maildrop 目录下。如果 sendmail 或 postfix 正常运行,则会在 /var/mail 目录下堆积大量的邮件文件。
- 解决方法:修改 crond 配置文件
vim /etc/crontab
将 MAILTO=root 替换成 MAILTO="",需要重启crond服务才可以