为什么硬盘明明还有空间,linux却说硬盘空间不足?

Posted 沧海一粟,何以久远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么硬盘明明还有空间,linux却说硬盘空间不足?相关的知识,希望对你有一定的参考价值。

  现象:df -h显示硬盘还有14G空间,但是touch file/mkdir directory都失败,提示硬盘没有空间

  

  原因:df -ia查看下inode的使用情况,发现已经爆了,(下图显示使用88%,还没有用完)

  

  那么,inode究竟是什么?为什么它使用完,就不能创建文件和文件夹了?

  解释:文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

  文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"(index node)。

  每一个文件都有对应的inode,里面包含了与该文件有关的一些信息

  

  可以使用stat命令查看inode的信息:stat example.txt

 

  另外,单个目录下子目录的数量也是有限制的

 

  统计目录inode占用数目:

find */ ! -type l | cut -d / -f 1 | uniq -c

find */ -exec stat -c "%n %i" {} \\;|awk -F "[/ ]" \'{if(! a[$1-$NF]++) l[$1]++}END{for (i in l) print i,l[i]}\'

 

 

   echo file{1..500000} |xargs touch     批量新建大量文件;参数过多,touch无法直接创建
   echo file{1..500000} |xargs rm        批量删除大量文件;参数过多,rm无法直接删除

 

 

参考:

1、http://www.ruanyifeng.com/blog/2011/12/inode.html

2、https://www.jianshu.com/p/6978bddd69af

3、http://blog.51cto.com/13520924/2092364

4、https://blog.csdn.net/lidan3959/article/details/16981137

 

以上是关于为什么硬盘明明还有空间,linux却说硬盘空间不足?的主要内容,如果未能解决你的问题,请参考以下文章

win7下安装fedora双系统时出现分区空间不足 但是在明明还有100多G呢 是怎么回事

安装linux时提示空间不足要我回收空间,会把windows的数据删掉吗?还有为啥会提示空间不足

用vmware 安装red hat Linux 出现空间磁盘不足

linux 硬盘满了,现在加一块硬盘,挂到根目录下,却显示可用空间为零,实际是空的。要怎么挂,求大

虚拟机里磁盘空间不足怎么弄

VMware安装linux空间不足,用VM硬盘扩充工具转化后 硬盘不能识别