索引节点用尽

索引节点用尽

我无法更新 Ubuntu,因为我的 inode 使用率已达到 99%。缓解此问题最简单的方法是什么?

感谢您的帮助。

答案1

分区格式化时设置了 inode 数量。通常,创建的 inode 数量足以满足几乎所有用途;但是,如果您有大量非常小的文件,那么您可以在磁盘满之前用完 inode。

您需要找到系统中占用 inode 的数千个小文件,然后删除它们,或将它们移动到专门设置有大量可用 inode 的分区。格式化分区后,无法更改其可用 inode 数量。

剧本由stackoverflow 上的 paxdiablo这可能是检查您可能没有意识到的小文件过多使用的便捷方法。下面是它:

#!/bin/bash
# count_em - count files in all subdirectories under current directory.
echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$
chmod 700 /tmp/count_em_$$
find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n
rm -f /tmp/count_em_$$

将此脚本放入文本文件 ~/bin/count_em 中,然后发出命令

chmod +x ~/bin/count_em

使其可执行。如果您必须创建目录 ~/bin,那么它还不在可执行路径中,因此只需注销并重新登录即可。

要运行程序,只需输入

count_em

它会列出当前目录和子目录中所有文件的编号,并将计数最高的列在最后。非常方便!

答案2

您还可以使用以下命令按 inode 数量显示排序的目录列表:du --inodes -d 3 / | sort -n | tail

从那里,您可以确定要删除哪些目录

答案3

当 inode 用完时,您有两个选择:

  1. 从磁盘中删除一些文件(通常是小文件)。
  2. 重新格式化受影响的驱动器,以允许更多的 inode。

这里的其他答案讨论了选项 1,但没有答案涉及选项 2 - 我将在这里讨论。

对于此示例,假设受影响的磁盘是/dev/sda1

要在格式化时指定特定数量的 inode,可以使用mke2fs带有-i-N选项的命令。从手册页

-i bytes-per-inode
      Specify  the  bytes/inode ratio.  mke2fs creates an inode for every bytes-per-inode
      bytes of space on the disk.  The larger the bytes-per-inode ratio, the fewer inodes
      will  be  created.  This value generally shouldn't be smaller than the blocksize of
      the file system, since in that case more inodes would be  made  than  can  ever  be
      used.   Be  warned  that  it  is not possible to change this ratio on a file system
      after it is created, so be careful deciding the correct value for  this  parameter.
      Note  that  resizing  a  file  system changes the number of inodes to maintain this
      ratio.

-N number-of-inodes
      Overrides  the  default calculation of the number of inodes that should be reserved
      for the file system (which is based on the number of blocks and the bytes-per-inode
      ratio).  This allows the user to specify the number of desired inodes directly.

因此,要使用默认的 inode 数量(16384 字节/inode)格式化设备,请使用常规命令:(对于 1 TB 的磁盘,这将创建大约 6000 万个 inode)

sudo mke2fs -t ext4 /dev/sda1

要创建具有比以前多一倍 inode 数量的分区,请使用以下命令:(请注意,字节/inode 值必须是 1 TB 磁盘的一半 - 这将创建大约 1.2 亿个 inode)

sudo mke2fs -i 8192 -t ext4 /dev/sda1

最后,要手动设置特定数量的 inode,请使用以下命令:(创建一个有 2 亿个 inode 的文件系统)

sudo mke2fs -N 200000000 -t ext4 /dev/sda1

答案4

我发现 inode 使用来自 /root/.local,并删除了该文件夹。

相关内容