No space left on device的发现与解决

首先,df -h 查看磁盘容量。

如果磁盘已满,那么清理磁盘。

如果容量未满,那么 df -i 查看磁盘inode信息。

常见情况是 /var/spool/postfix/maildrop 或 /var/spool/clientmqueue 目录有太多零碎文件导致 inode 使用达到100%。


原理分析:

linux在执行cron时,会将cron执行脚本中的output和warning信息,都会以邮件的形式发送Cron所有者,而由于系统环境中的sendmail和postfix没有正常运行,导致邮件发送不成功,全部小文件堆积在了clientmqueue 和 maildrop目录下面,而且没有自动清理转换的机制,所以长时间累积导致此目录堆积了大量的文件。(注意:如果sendmail或者postfix正常运行,则会在/var/mail目录下产生大量的邮件,也会堆积。)


删除大量文件方法

find /var/spool/mqueue /var/spool/clientmqueue 可以多个目录 空格分开 -name "*" | xargs rm -rfv '*'


清除所有缓存垃圾邮件 清除邮件中的所有队列 postsuper -d ALL


解决办法1:

列出所有用户的定时任务

for u in `cat /etc/passwd | cut -d":" -f1`;do crontab -l -u $u;done

crontab里面定时执行的句子结尾加 “ > /dev/null 2>&1 ”,不输出内容。

(网上最常见解决办法,测试无效。)


解决办法2:

在cron的第一行加入 MAILTO="",这样执行当前用户的Cron时,不会发送邮件。


解决办法3:

卸载 sendmail 和 postfix邮件服务


注:编辑定时任务 crontab -e