iNode使用率过高的问题
# 一、问题查找
磁盘 iNode 使用率报警,通过
df -i
查看发现是/var
目录 iNode 使用率达到 100% 了;iNode 使用率过高,但是磁盘使用率不高,说明是有大量的小文件,沿着
/var
目录一步步查看是哪个文件夹下有大量的文件;通过命令
for i in /var/*;do num=$(find "$i"|wc -l); if [ $num -gt 100 ];then echo "$num"_"$i"; fi;done
打印超过 100 个文件的文件夹,逐步查找,发现是/var/spool/postfix/maildrop
目录下有着大量的文件;
# 二、解决方法
- 进入到
/var/spool/postfix/maildrop
目录,直接通过ls | rm -rf
根本无法执行,因为文件太多直接夯住了; - 可以通过
ls | xargs -n 1000 rm -rf
的方式,每次传递 1000 个文件的方式进行删除,执行一段时间后可以发现 iNode 使用率已经下降了;
# 三、原因分析
- 由于 Linux 在执行 cron 时,会将 cron 执行脚本中的 output 和 warning 信息以邮件的形式发送 cron 所有者,而由于服务器上的 sendmail 或 postfix 没有正常运行,导致邮件发送不成功,小文件全部堆积在了
/var/spool/postfix/maildrop
目录下面,而且没有自动清理机制,经历较长时间后,此目录已堆积了大量的小文件; - 在 crontab 的第一行加入 MAILTO="",这样执行当前用户的 cron 时,不会发送邮件;或者把对应 cron 的中执行脚本的 output 重定向到文件或
/dev/null
中;
参考文章
[1] cron 引起 /var/spool/postfix/maildrop 目录生成大量小文件 (opens new window)
编辑 (opens new window)
上次更新: 2024/06/28, 11:37:53