问题
今天服务器突然崩了,使用的amh面板,执行/etc/init.d/amh-start
后所有服务均出现相同的一个错误提示No space left on device
解决
排查
查看磁盘空间使用情况,使用df -h
命令,磁盘显然没有占满,那是什么问题呢?一番搜寻后发现居然有个叫inode的东西。引起了我的注意。
查看inodess使用情况,使用df -i
命令
由于我没有截图,所以借用一张网图。
inodes耗尽解决
- (1)查看文件最多的目录
for i in /*; do echo $i; find $i | wc -l; done
如果确定目录范围,把/*写的具体点
最终发现是/var/spool/postfix/maildrop
目录下小文件过多,原因如下:
由于linux在执行cron时,会将cron执行脚本中的output和warning信息,都会以邮件的形式发送给cron所有者。由于客户环境中的sendmail和postfix没有正常运行,邮件发送不成功,导致全部小文件都堆积在maildrop目录下,另由于缺乏自动清理的机制,故此目录下堆积了大量的文件。
- (2)删除大量文件
ls | xargs -n 1000 rm -rf
需要使用xargs
命令,不然会删除失败。
inodes介绍
Linux系统下文件数据储存在”块”中,文件的元信息,例如文件的创建者、文件的创建日期、文件的大小等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。
inode也占用硬盘空间,硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。