28

我需要创建大量不是很大的文件(如 4kb、8kb)。这在我的计算机上是不可能的,因为它占用了所有 inode 高达 100% 并且我无法创建更多文件:

$ df -i /dev/sda5
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
/dev/sda5            54362112 36381206 17980906   67% /scratch

(我开始删除文件,这就是为什么现在是 67%)

在我的文件系统(ext4)上,每个节点的字节数为 256

$ sudo tune2fs -l /dev/sda5 | grep Inode
Inode count:              54362112
Inodes per group:         8192
Inode blocks per group:   512
Inode size:               256

我想知道是否可以将此值设置得非常低,甚至低于 128(在重新格式化期间)。如果是,我应该使用什么值?谢谢

4

3 回答 3

35

每个 inode 的默认字节数通常为 16384,这是默认值(inode_ratio/etc/mke2fs.conf文件系统创建之前读取)。如果您的 inode 用完了,您可以尝试例如:

mkfs.ext4 -i 8192 /dev/mapper/main-var2

影响这一点的另一个选项是-T,通常-T news会进一步将其减少到 4096。

此外,您不能在不重新创建或十六进制编辑的情况下更改 ext3 或 ext4 文件系统中的 inode 数量。Reiser 文件系统是动态的,因此您永远不会遇到问题。

于 2011-03-24T20:47:34.860 回答
13

您可以通过将可用空间的大小除以可用 inode 的数量来找出大致的 inode 比率。例如:

$ sudo tune2fs -l /dev/sda1 | awk -F: ' \
    /^Block count:/ { blocks = $2 } \
    /^Inode count:/ { inodes = $2 } \
    /^Block size:/ { block_size = $2 } \
    END { blocks_per_inode = blocks/inodes; \
          print "blocks per inode:\t", blocks_per_inode, \
                "\nbytes per inode:\t", blocks_per_inode * block_size }'

blocks per inode:    3.99759 
bytes per inode:     16374.1
于 2015-05-26T16:22:53.477 回答
-8

我在 mke2fs 手册页上找到了我的问题的解决方案:

-I inode 大小

以字节为单位指定每个 inode 的大小。mke2fs 默认创建 256 字节的 inode。在 2.6.10 之后的内核和一些更早的供应商内核中,可以利用大于 128 字节的 inode 来存储扩展属性以提高性能。 inode-size 值必须是大于或等于 128 的 2 的幂。inode-size 越大,inode 表占用的空间就越多,这会减少文件系统中的可用空间,也会对性能产生负面影响。存储在大型 inode 中的扩展属性在旧内核中不可见,并且此类文件系统根本无法使用 2.4 内核挂载。创建文件系统后无法更改此值。

您可以设置的最大值由您的块大小给出。

sudo tune2fs -l /dev/sda5 | grep "Block size"
Block size:               4096

希望这可以帮助....

于 2010-09-13T11:18:43.837 回答