![索引节点用尽](https://linux22.com/image/1002475/%E7%B4%A2%E5%BC%95%E8%8A%82%E7%82%B9%E7%94%A8%E5%B0%BD.png)
我无法更新 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 用完时,您有两个选择:
- 从磁盘中删除一些文件(通常是小文件)。
- 重新格式化受影响的驱动器,以允许更多的 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,并删除了该文件夹。