当碰到服务器 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服务才可以