额,linux系统无法写入文件

上次由于磁盘空间不够,不能写入文件造成mysql死锁(测试容器磁盘空间默认10GB)。这次又出现了磁盘不能写入的问题,首先想到是不是磁盘满了,不看不知道一看吓一尿!分区么有满空闲40%+,磁盘没有满为什么不能写入文件,原来是容器那个分区的inode耗尽了:

[root@xxxxxx ~]# df -i
Filesystem             Inodes  IUsed    IFree IUse% Mounted on
rootfs                 655360 655360    0     100% /
/dev/mapper/docker-8:3-61079671-96d6b91ea4aeccad53cb07a7f3a79e0d6e4083db1bc079a26ff806bfc0048901
                       655360 655360    0     100% /
tmpfs                 6171993    278  6171715    1% /dev
shm                   6171993      1  6171992    1% /dev/shm
/dev/sda3            72056832 298300 71758532    1% /etc/resolv.conf
/dev/sda3            72056832 298300 71758532    1% /etc/hostname
/dev/sda3            72056832 298300 71758532    1% /etc/hosts
[root@xxxxxx ~]#

容器分区的大小是10GB,inode有655360个,大概2KB就分配一个inode。磁盘剩下40%+的空间,而inode耗尽了,肯定是小文件太多了。首先找哪个目录的小文件最多:

#方法比较笨,慢慢找,先到根目录下看看那个目录的文件最多
[root@xxxxxx /]# for i in `ls`;do echo $i; ls $i -lR|wc -l;done
... ... ...
var
536432
... ... ...

首先定位到了/var目录下的文件最多,然后按照同样的方法找到了文件最多目录/var/spool/postfix/maildrop,50几个万文件大部分在这个目录下,删掉这些垃圾文件,inode也就释放出来了,其它的进程就可以继续写入文件了。

[root@xxxxxx ~]# df -i
Filesystem             Inodes  IUsed    IFree IUse% Mounted on
rootfs                 655360 121905   533455   19% /
/dev/mapper/docker-8:3-61079671-96d6b91ea4aeccad53cb07a7f3a79e0d6e4083db1bc079a26ff806bfc0048901
                       655360 121905   533455   19% /
tmpfs                 6171993    278  6171715    1% /dev
shm                   6171993      1  6171992    1% /dev/shm
/dev/sda3            72056832 298302 71758530    1% /etc/resolv.conf
/dev/sda3            72056832 298302 71758530    1% /etc/hostname
/dev/sda3            72056832 298302 71758530    1% /etc/hosts

没有开启postfix服务怎么也会产生这些邮件,原来是定时任务造成的,输出信息没有处理,系统默认就输出到那里了。定时任务脚本无用的信息重定向到/dev/null这个设备就好了:

*/1 * * * * root 脚本 > /dev/null 2>&1

文章出处:http://www.xiaomastack.com/2015/12/08/unable-to-write/

发表评论:

你的电子邮件地址将不会被公开.

39 + = 47

1 Trackback

  1. can someone write my dissertation (Trackback)