首页 > 代码库 > 生产环境下案例 No space left on device (inode使用满的情况)

生产环境下案例 No space left on device (inode使用满的情况)

第一种情况:

问题:

如果想磁盘写入数据提示如下错误: 

No space left on device。 

通过df -h查看磁盘空间,发现没满,请问可能原因是什么?

解答

可能是inode数量被消耗尽了。 

df -i查看是否耗尽了inode数量。

企业工作中邮件临时队列/var/spool/clientmquene这里很容易被大量小文件占满导致No space left on device的错误。

clientmquene目录只有安装了sendmail服务才会有。CentOS5.X默认会装sendmial,CentOS6.5默认没有sendmail。

知识点: 

CentOS5系列的系统会默认安装Sendmail服务,因此邮件临时存放地点的路径/var/spool/clientmqueue/。

CentOS6默认情况下没有安装Sendmail服务,而是安装了Postfix服务,因此邮件存放地点的路径为/var/postfix/maildrop/。 

以上两个目录很容易被垃圾文件填满导致系统的inode数量不够用,从而导致无法放文件。

当定时任务执行结尾不加>/dev/null 2>&1的时候,定时任务就会把上述目录就会存在大量小文件

第二种情况:

一个100M(block的总大小,个数和单个block大小有关)的磁盘分区,分别写入0.5K的文件或写入1 M的文件,分别可以写多少个?为什么?

解答:

  1. 默认分区常规情况下,对大文件来讲inode是足够的。而block数量会消耗得更快,block为4K的情况,1M的文件不会有磁盘浪费情况,所以文件数量大概为100/1=100个。
  2. 对于小文件0.5K,inode会消耗得更快。默认分区的时候block数量是大于inode数量的。 每个小文件都会占用一个inode和一个block。所以最终文件的数量是inode会消耗完,文件总量是inode的数量。

知识点:

    1. inode是存放文件属性信息的(也包含指向文件实体的指针),默认大小128字节(C5),256字节(C6)。
    2. block是存放文件实际内容的,默认大小1K(boot)或4K(非系统分区)。
    3. 一个文件至少要占用一个inode及一个block。
    4. 默认分区常规情况下,inode数量是足够的。而block数量会消耗得更快。

生产环境下案例 No space left on device (inode使用满的情况)