xiaolingzi's blog

每天都在成长...

欢迎您:亲

Linux中inode数量耗尽导致“No space left on device”错误的问题解决

xiaolingzi 发表于 2016-05-12 16:24:16

今天上班就有用户反馈应用上不去,报服务器错误。查看了服务器log之后发现mysql直接报错,全文检索也在报错。

其中的mysql的错误信息如下:

Can't  create/write  to  file  '/tmp/#sql_612_0.MYI'  (Errcode:  28  -  No  space  left  on  device)

乍看这错误信息,在想是不是磁盘满了,但又没有收到警报。

首先,查看磁盘空间使用情况,命令如下

df -h

查看发现磁盘剩余空间还很大,那就应该不是磁盘满了。

接下来查看inode数,命令如下:

df -i

一查发现系统盘的IUse%达到了100%,IFree为0。文件数太多,inode已满,接下来就是查看哪个文件夹占用了那么多的文件数,查询命令如下:

find /var -maxdepth 1 -type d | while read dir; do count=$(find "$dir" -type f | wc -l); echo "$dir : $count"; done

以上命令是查询当前目录下各子目录的文件数,通过逐级的查找,发现/var/spool/postfix/maildrop文件夹中文件数极其多,以致通过 rm -rf * 来删除时都直接挂了。最后只能rm -rf /var/spool/postfix/maildrop 直接删除整个目录,然后重启就好了。但删除后记得再把目录手动建起来,并赋予之前一样的权限,否则/var/log/maillog里面可以看到该目录不存在的错误。

接下来就是要查找是什么导致这么多文件的产生。。

查看/var/log/maillog的日志文件发现大量的一下警告:

postfix/postdrop[4161]: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol

错误信息很明显,就是服务器IPv6不可用,所以需要修改postfix设置只使用ipv4

vi /etc/postfix/main.cf

将其中的

inet_protocols = all

改为

inet_protocols = ipv4

然后重启postfix

service restart postfix

除此之外,如果计划任务比较多,导致过多无用邮件的发送,可以取消crontab中的邮件发送。

vi /etc/crontab

将其中的

MAILTO=root

改为

MAILTO=""

这样就不会再发送邮件了。


      

转载请注明出处:http://www.xxling.com/article/3098.aspx

  • 分类: Linux
  • 阅读: (1859)
  • 评论: (0)
拍砖 取消
请输入昵称
请输入邮箱
*
 选择评论类型
300字以内  请输入评论内容