上次由于磁盘空间不够,不能写入文件造成mysql死锁(测试容器磁盘空间默认10GB)。这次又出现了磁盘不能写入的问题,首先想到是不是磁盘满了,不看不知道一看吓一尿!分区么有满空闲40%+,磁盘没有满为什么不能写入文件,原来是容器那个分区的inode耗尽了:
1 | $ df -i |
容器分区的大小是10GB,inode有655360个,大概2KB就分配一个inode。磁盘剩下40%+的空间,而inode耗尽了,肯定是小文件太多了。首先找哪个目录的小文件最多:
1 | #方法比较笨,慢慢找,先到根目录下看看那个目录的文件最多 |
首先定位到了/var目录下的文件最多,然后按照同样的方法找到了文件最多目录/var/spool/postfix/maildrop,50几个万文件大部分在这个目录下,删掉这些垃圾文件,inode也就释放出来了,其它的进程就可以继续写入文件了。
1 | $ df -i |
没有开启postfix服务怎么也会产生这些邮件,原来是定时任务造成的,输出信息没有处理,系统默认就输出到那里了。定时任务脚本无用的信息重定向到/dev/null这个设备就好了:
1 | */1 * * * * root 脚本 > /dev/null 2>&1 |