当 Linux 文件系统的 inode 节点数量达到上限时,会报“out of inodes”错误,此时用户无法创建新的文件或目录。这种错误通常发生于使用大量小文件的情况下,比如一些日志文件或者某些程序的缓存文件。
解决该问题的方法主要有两种:增加 inode 节点数目或者减少文件数目。
增加 inode 节点数目
增加 inode 节点数目的方法是通过调整文件系统的 inode 表大小来实现的。对于 ext2、ext3、ext4 等文件系统,可以通过 mkfs.ext4
命令创建文件系统时指定 inode 数量,通过 tune2fs
命令动态调整 inode 数量。
使用 mkfs.ext4
指定 inode 数量:
mkfs.ext4 -N [num] /dev/sda1
其中 [num]
为需要指定的 inode 数量,/dev/sda1
为需要创建文件系统的设备。
使用 tune2fs
动态调整 inode 数量:
tune2fs -l /dev/sda1 | grep 'Inode count'
tune2fs -L [label] -i [interval] -c [count] /dev/sda1
其中 /dev/sda1
为需要调整 inode 数量的设备,-l
参数可以查看当前的 inode 数量,即第一条命令。-L [label]
用于设置文件系统的卷标,-i [interval]
用于设置自动检测文件系统错误的时间间隔,-c [count]
用于设置在文件系统挂载 [count] 次之后自动检测文件系统错误。这三个参数都是可选的。
减少文件数目
减少文件数目的方法是通过删除一些不必要的文件来释放 inode 资源。在删除文件时,应该尽可能删除较小的文件、占用 inode 数量较多的文件或者不再需要的临时文件等。
可以使用 find
命令查找一些不必要的文件:
find / -xdev -type f -size +500k -exec ls -lh {} \; | awk '{ print $NF ": " $5 }'
find / -xdev -type f -name "*.log" -mtime -1 -exec ls -lh {} \; | awk '{ print $NF ": " $5 }'
第一条命令用于查找大小大于 500KB 的文件,第二条命令用于查找最近一天内被修改过的名字匹配 .log
的文件。
查找到一些不必要的文件后,使用 rm
命令删除即可。需要注意的是,删除文件后,inode 数量不会立即释放,而是需要在磁盘空闲时才会被系统回收。若需要立即释放 inode 资源,则可以使用 debugfs
命令:
debugfs -w /dev/sda1
debugfs: clri [inode_number]
debugfs: quit
其中 /dev/sda1
为需要释放 inode 资源的设备,[inode_number]
为需要释放的 inode 节点号。执行成功后,该 inode 节点对应的磁盘空间将被标记为空闲并被系统回收。
总之,出现“out of inodes”错误时,既可以增加 inode 节点数目,也可以减少文件数目。通常情况下,应该尝试先减少文件数目,然后再考虑增加 inode 节点数目。