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有不支持动态增加空间,怎么办?
这种情况下,你只有两个选择:
- 如果这个系统是使用的LVM(逻辑卷管理),可以增加逻辑卷的大小。
- 备份和创建一个新的文件系统,指定一个比较高的INODE空间。
mke2fs -N
Ok,关于INODE和磁盘空间,小卓就介绍到这里,希望对你有所帮助。