LINUX下INODE用光的问题

磁盘磁头磁盘空间不足是LINUX系统下常见的问题,经常遇到的情况是在LINUX下使用命令行tab补全或新建文件时会看到“no space left on device”(磁盘空间不足)的错误提示,但是用df查看磁盘使用情况,却发现像下面这样磁盘使用率并没有满的结果,那是怎么回事呢?这种情况下多半就是LINUX磁盘的INODE用光的问题。

df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/xvda1            10321208   3159012   6637908  33% /

既然说是LINUX磁盘的INODE用光的问题,那么先要理解一下INODE。

什么是INODE?

INODE就是index node,即:索引节点。对于任何一个文件系统对象,比如:文件或文件夹,都会有相应的索引节点,索引节点包含了诸如文件大小、文件类型等必要的基础信息。索引节点并不包含文件内容和文件名称,它通过指针指向对应的文件或文件夹。

INODE存在的问题

INODE的总数和为INODE所预留的磁盘空间是在文件系统创建的时候设定的。所有的文件系统都会有INODE,而上述INODE的限制不能被动态消除。

在磁盘空间有剩余的情况下遇到INODE空间不足的问题通常意味着系统上有很多小文件、小文件夹或者是软链接。

查看INODE的使用情况

在LINUX系统上使用-i参数来查看INODE空间的使用情况:

df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/xvda1           1310720  1310720        0  100% /

用下面的命令可以得到更多关于INODE的信息详情:

tune2fs -l /dev/xvda1 | grep -i inode

小文件在哪里?

既然知道是大量小文件导致INODE被耗尽,找到并清理这些小文件就是解决此类磁盘空间不足问题的方法。寻找这些小文件并不难,但需要一些时间来完成手工操作。

从LINUX文件系统的根目录开始使用下面的命令输出文件和文件夹的数量:

for i in /*; do echo $i; find $i |wc -l; done

命令的输出结果可能是像这样的:

/bin
119
/sys
9293
/tmp
1
/usr
10583

上面输出的数字代表对应目录下所有子文件夹和子文件的数量。如果系统的某个文件夹含有大量小文件,上面的命令应该会在统计相应文件夹时运行缓慢,那就意味着此文件夹是可疑的问题文件夹。当你进入到这个问题文件夹,你可以继续使用之前的命令来检测该文件夹下的问题子文件夹。

找到最终的问题文件夹后,如果确认其中的小文件是不需要的,可以批量删除。下面的命令就是一个例子:

for i in /usr/*; do echo $i; find $i |wc -l; done

不能删除小文件,怎么办?

通过上面的方法定位到了大量小文件,但都是有用文件,不能也不敢随意删除,而INODE有不支持动态增加空间,怎么办?

这种情况下,你只有两个选择:

  1. 如果这个系统是使用的LVM(逻辑卷管理),可以增加逻辑卷的大小。
  2. 备份和创建一个新的文件系统,指定一个比较高的INODE空间。
mke2fs -N

Ok,关于INODE磁盘空间小卓就介绍到这里,希望对你有所帮助。

>>原创文章,欢迎转载。转载请注明:转载自惠州市卓优互联科技有限公司,谢谢!
>>原文链接地址:LINUX下INODE用光的问题


关于作者

留下您的回复