问题如题,出现“cannot create temp file for here-document: No space left on device”,且部分应用出现故障,比如重启后Docker容器无法启动
先使用 df -h
检查磁盘使用率,显示使用率50%还不到
继续排查,使用 lsof | grep deleted 或 lsof -w | grep deleted 检查是否存在未释放的已删大文件,未发现
继续使用 df -i ,发现inodes使用率99%,到此问题找到。
依次使用如下命令,定位目录:
for i in /var/*; do echo $i; find $i |wc -l; done
for i in /var/tmp/*; do echo $i; find $i |wc -l; done
for i in /var/spool/*; do echo $i; find $i |wc -l; done
for i in /var/spool/postfix/*; do echo $i; find $i |wc -l; done
发现问题出在Crontab中设置了2个1分钟级别的定时任务,请过长期运行,执行完毕后都会使用系统邮件功能进行通知,最终导致inodes数量不够用。
解决方法:
直接删除/var/spool/postfix/maildrop中的所有文件。由于数量较多,删除时间会比较久,耐心等待即可。这里需注意,postfix服务是不能关闭的,crontab的运行需要依赖该服务,但是可以通过以下命令停止postfix的系统邮件。
echo "unset MAILCHECK">> /etc/profile
source /etc/profile
chmod 0 /usr/sbin/sendmail
mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
cat /dev/null > /var/spool/mail/root