服务器故障:No space left on device

今天早上小编抱怨图片无法上传,说Wordpress提示没找到临时文件夹。这个错误从来没听过,ssh到后台发现很多操作都提示no space left on device,最后决定重启时,碰到下面的错误:

mktemp: failed to create file via template ‘/tmp/tmp.XXXXXXXXXX’: No space left on device
/etc/init.d/apache2: 91: /etc/init.d/apache2: cannot create : Directory nonexistent

运行了df -h后发现磁盘只有使用70%啊,为什么就满了呢?Google了一下,有人说可能是Inode满了。Inode用来对磁盘上每个文件进行信息索引,从而使操作系统通过Inode查询最快地找到磁盘上的文件。当文件夹里有很多小字节的文件时,在磁盘未满的情况下,Inode可能就先被100%占用了。

我做了一个df -hi的命令查询,发现确实/dev/xvda1 IUse百分比已经达到100%

依照网上的教程,我执行下面的命令找到了Inode占用最多的文件夹

for i in /*; do echo $i; find $i |wc -l; done

结果发现root用户文件夹占用Inode最多,又执行下面的命令

for i in /root/*; do echo $i; find $i |wc -l; done

找到/root/Maildir Inode占用数奇高,而且占用了5.5G的磁盘空间。

Maildir文件夹下共有3个文件夹,new, cur 和 tmp。 new文件夹里面都是未读邮件,cur存放已读邮件,而tmp文件夹则是存放待发送的邮件信息。查询了一下,Maildir文件夹的这5.5G的磁盘占用全部来自new文件夹。依照网上的教程,我执行了find ./new -type f -delete来删除new文件夹下的所有文件(执行这个命令花了10分钟时间)。Inode占用终于降了下来。

光是Inode使用量降下来当然不算解决问题。经过观察,我发现在这个new文件夹每分钟都会有新的文件生成。打开看了下是cron job发送的。于是执行crontab -e,增加MAILTO=”” 禁止cron job发送默认邮件到root。