Linux/centos inode 占用100%的解决办法
当你的 Linux 系统无法创建新文件时,有可能是你的磁盘满了,还有可能是你的磁盘的 inode 用光了,我们今天要说的就是后一种情况,要解决这个问题,只能是删除一些文件,但是一般情况下,其实是你的系统中的某个地方产生了大量的你并不需要的文件,你要做的就是找到他们并删除就可以了,我并不是让你删除你有用的文件,因为你一般不会有那么多有用的文件来把系统的 inode 用光。
什么是 inode ?
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
现象:我们在创建文件的时候提示:No space left on device
此时,查看inode信息:可以看到已经没有空闲的inodes。而此时,我们的服务器磁盘是有空间的。
原因:
大多数情况下是由于文件数量过多所引起的,只需要删除无用的就好了。
第一步:查找哪个目录下文件最多
这样会依次返回 / 目录下文件最多的目录,文件数越多说明Inode占用越高。请您根据实际环境进行操作。进入这个目录,再执行上述命令,就这样层层深入最终确定那个目录文件最多。
第二步:删除那个目录的所有文件(根据实际情况删除多余的垃圾文件)
这个命令的作用是查找当前目录及其子目录下所有文件,并使用rm命令删除这些文件。
xargs命令默认将输入作为参数,以空格作为分隔符。但是,如果输入中包含空格或其他特殊字符,则需要使用-0、--mull选项指定用0作为分隔符。
具体来说,find命令用于查找当前目录及其子目录下的.txt文件,其选项和参数含义如下:
.︰表示从当前目录开始查找。
-type f:表示只查找普通文件,不包括目录、符号链接等。
-name "*.txt":表示查找扩展名为.txt 文件。
-print0:表示输出结果时用空字符(\0)分隔每个结果。
| xargs -0 rm -rf:将find命令的输出结果传递给xargs命令,并使用-0选项指定用空字符\0)分隔每个输入参数,然后删除这些文件。
总之,这个命令可以用来快速删除当前目录及其子目录下文件。
增加inode数量的方法
如果清理文件后inode使用率仍然较高,则您需要通过备份数据、重新格式化磁盘来增加inode数。
注意:inode数量的调整需要重新格式化磁盘,磁盘内的数据将被删除,请确保数据已经得到有效备份后,再进行以下操作。
示例如下,请根据实际环境进行替换
1.卸载/home
#umount /home
2.重建文件系统,增加inode节点数
#mkfs.ext4 /dev/vdb1 -N 1638400
3.重新挂载目录
#mount /dev/vdb1 /home
4.查看并确认修改后的inode节点数
#dumpe2fs -h /dev/vdb | grep node