WenRou's Blog
No space left on device ,原来是inode使用完了
2017-8-18 温柔哥


今天想要设置crontab时出现,No space left on device,后来查了下,才知道是因为inode已经满了,所以系统无法再创建文件



在/var/spoo/clientmqueue/下有超多的文件 ls 半天没反应

用rm -rf * 会自动跳出root,用xargs来解决。



# cd /var/spool/clientmqueue



# ls | xargs rm -f

原因分析:系统中cron执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件;

解决办法:  将crontab里面的命令后面加上> /dev/null 2>&1



接下来我从网上收集的也积累下,省得下次再遇到别的又找,如下:



故障现象:



1 when you create a new directory or file , system will say : No space left on device



[shelladm@linux /var]# mkdir aa



mkdir: cannot create directory `aa': No space left on device

2 when create crontab for account shelladm , you will receive error information as follows:

"crontab.6655" 1L, 13C written



crontab: installing new crontab



cron/tmp.6655: No space left on device



crontab: edits left in /tmp/crontab.6655



处理步骤:



1 检查分区使用率



[root@linux ~]# df -lk

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/hda2              3020172    136008   2730744   5% /

/dev/hda1               101089      9378     86492  10% /boot

/dev/hda7            105708092  38996880  61341488  39% /b2006

none                   1028548         0   1028548   0% /dev/shm

/dev/hda3              3020172   1421092   1445660  50% /usr

/dev/hda6               497829    371795    100332  79% /var

分区/var的使用率只有79%,系统有空间可以用



2 检查/var/lock下的文件,删除/var/lock/subsys/nfs后,touch /var/aa,成功创建文件,删除/var/aa



3 发现删除/var/lock下的任意一个文件后



[root@linux /var]#touch /var/aa        -------------------成功



[root@linux /var]# touch aa1                -------------------失败

touch: creating `aa1': No space left on device



4 将检查扩大到/var下的其他目录,

[root@linux icons]# cd /var/www/icons

[root@linux icons]# mv a.gif /tmp

[root@linux icons]# mv a.png /tmp     -------------------移走两个文件

[root@linux icons]# df -li

[root@linux icons]# touch aa

[root@linux icons]# touch bb

[root@linux icons]# touch cc

touch: creating `cc': No space left on device -----------只能创建两个文件,当创建第三个文件时,出错



5 怀疑分区/var的inode用尽导致上述问题,检查inode使用率



[root@linux icons]# df -li

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/hda2             384000   23698  360302    7% /

/dev/hda1              26104      41   26063    1% /boot

/dev/hda7            13434880    7964 13426916    1% /b2006

none                  257137       1  257136    1% /dev/shm

/dev/hda3             384000   78026  305974   21% /usr

/dev/hda6             128520  128520       0  100% /var

发现/var的inode使用率已经达到100%,空余的inode为0



6 分区/var没有配置quota ,平均每个inode的占用空间为:497829k(var size)/128520(inodes)=3.87k,说明分区的最小block为4k,无法增加inode限额。



7 发现/var/spool/clientmqueue下面有太多的文件,共有127679个,占用了127679/128520(inodes)=99.3%的inode

系统的邮件配置有问题,导致系统发出的邮件堆积在队列中,占用的大量的inode.

处理方法:确认/var/spool/clientmqueue下的文件已经无用后,删除之。然后/var写入正常。

最好的解决办法是重新设置系统邮件,使其能正常发送。



删除文件后的inode使用情况

[root@linux clientmqueue]# df -li

Filesystem            Inodes   IUsed   IFree IUse% Mounted on

/dev/hda2             384000   23698  360302    7% /

/dev/hda1              26104      41   26063    1% /boot

/dev/hda7            13434880    7964 13426916    1% /b2006

none                  257137       1  257136    1% /dev/shm

/dev/hda3             384000   78026  305974   21% /usr

/dev/hda6             128520    4561  123959    4% /var



结论:分区/var的inode全部用尽,free inode为0,导致无法创建新的文件或目录,以后遇到类似的问题要注意



用df -li 检查inode的使用情况。

################################################################################



当启动apache的时候报这种错:


No space left on device: Couldn't create accept lock
df -h 一下发现不是磁盘空间的问题,google了一下发现是系统的Semaphore Arrays不够用了,用以下命令可以查看所有的
Semaphore Arrays:
ipcs -s
然后用这行命令删除所有的Semaphore Arrays即可:
ipcs -s | grep nobody | perl -lane '
print `ipcrm sem $F[1]`' (其中nobody表示用户名)
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容