【问题标题】:How many bytes per inodes?每个 inode 有多少字节?
【发布时间】:2011-04-06 20:06:30
【问题描述】:

我需要创建大量不是很大的文件(例如 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(在重新格式化期间)。如果是,我应该使用什么值? 谢谢

【问题讨论】:

  • “索引节点大小”与每个索引节点的字节数不同。 “inode 大小”只是每个 inode 可以包含的数据量(字节数),而 bytes-per-inode 是指 inode 与磁盘空间的比率。这两个值是独立的。

标签: filesystems inode ext4


【解决方案1】:

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

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

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

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

【讨论】:

  • 如何确定文件系统的当前字节数/inode 值?您的命令有效,但 tune2fs 输出中是否有显示比率的值?
  • 我只是想评论一下,您可以在 Red Hat 和衍生产品上验证/更改 /etc/mke2fs.conf 中的默认值。
【解决方案2】:

您可以通过将可用空间大小除以可用 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

【讨论】:

  • 如果您收到类似“tune2fs:尝试打开 /dev/sda3 时超级块中的魔术数字错误”之类的错误,请尝试运行“blkid”。我需要使用的实际文件系统是“/dev/mapper/myubuntu--vg-root”。
【解决方案3】:

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

-I inode-size

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

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

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

希望这可以帮助....

【讨论】:

  • inode-size (-I) 与 bytes-per-inode (-i) 设置不同。 inode-size 决定了单个inode 的大小,更大的inode 可以包含更多指向块的指针,以减少对间接块的需求或增加磁盘使用量为代价。 bytes-per-inode 设置设置将用于确定最大 inode 数量的比率。创建文件系统后,这两个值都不能更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 2011-06-14
相关资源
最近更新 更多