“ inode大小”和“每个inode的字节数”之间有什么区别


18

下面的信息取自手册页,我想知道字节数/ inode和inode-size之间的区别吗?

-i bytes-per-inode

指定字节/索引节点比率。mke2fs为磁盘上每个字节的每个索引字节空间创建一个索引节点。每inode的字节数比率越大,将创建的inode越少。该值通常不应小于文件系统的块大小,因为这样会导致过多的inode。请注意,创建文件系统后无法扩展inode的数量,因此请谨慎选择正确的值。此参数的值。

-I inode-size

指定每个inode的大小(以字节为单位)。mke2fs默认情况下会创建256字节的inode。在2.6.10之后的内核以及一些更早的供应商内核中,可以使用大于128字节的索引节点来存储扩展属性以提高性能。索引节点大小值必须是2的幂或大于128的幂。 -增大索引节点表将占用的空间,这会减少文件系统中的可用空间,并且还会对性能产生负面影响。存储在大型索引节点中的扩展属性在较旧的内核中不可见,并且此类文件系统无法在2.4内核中安装完全没有。创建文件系统后无法更改此值。

Answers:


13

好吧,首先,什么是索引节点?在Unix世界中,索引节点是一种文件条目。目录中的文件名只是一个索引节点的标签(链接!)。可以在多个位置引用一个inode(硬链接!)。

-i每个索引节点字节数(aka inode_ratio)

出于某种未知的原因,此参数有时被记录为每inode字节数,有时被记录为inode_ratio。根据文档,这是字节/索引节点的比率。不论是哪种情况,大多数人都会有更好的理解(对不起,我的英语):

  • 每X个存储字节1个inode(其中X是每个inode字节)。
  • 您可以容纳的最低平均文件大小。

公式(取自mke2fs 源代码):

inode_count = (blocks_count * blocksize) / inode_ratio

甚至简化了(假设“分区大小”大致等于blocks_count * blocksize,我还没有检查分配):

inode_count = (partition_size_in_bytes) / inode_ratio

注意1:即使您在FS创建时间(mkfs -N ...)提供固定数量的inode ,该值也会转换为比率,因此在扩展文件系统大小时可以容纳更多inode。

注意2:如果您调整此比率,请确保分配的inode比计划中使用的要多得多……您确实不想重新格式化文件系统。

-我inode大小

这是文件系统将为文件系统可能具有的每个索引节点分配/保留的字节数。该空间用于存储inode的属性(请参阅Intro to Inodes)。在Ext3中,默认大小为128。在Ext4中,默认大小为256(以存储extra_isize并为嵌入式扩展属性提供空间)。阅读Linux:为什么更改inode大小?

注意:为空闲的或已使用的每个已分配索引节点分配了X个字节的disjkspace,其中X = inode-size。


5

每个索引节点的字节数确定为该文件系统创建多少个索引节点。索引节点大小确定每个索引节点的大小。

如果要在文件系统上放置许多小文件(和/或许多目录),则需要大量的inode 。

AFAIK,如果您要存储文件的扩展属性,则实际上仅需要大于默认大小256字节的inode 。 psusi在评论中说这是不正确的。


4
实际上,扩展属性存储在它们自己的块中,而不是存储在inode中,因此您不需要为它们使用更大的inode。邮件列表上最近有一些补丁,如果它们足够小,可以最终添加在inode中存储扩展属性的功能,但是如果它们已经达到了主线,那就已经是最近了。
psusi 2014年

1

极其粗糙的文件系统原理图:

|_|__inodes__|_______________________DATA_________________________________|
  • inode比率 / 每inode字节数 = DATA区域的inode数量
  • inode-size = inode区域中每个inode的大小

0

我真的很喜欢sjas的答案,它给出了区别的实质。

这只是我自己的扩展(因为我不能对此发表评论或投票,仅从此stackexchange开始),我想要一个自己的答案,以平衡的方式以非技术性的方式陈述,这对于需要在数据量期间做出决定的用户来说是可以理解的设置,但不一定知道实施背后的所有细节。

角色/对象:-存储设备中的数据量-卷中的文件-存储设备,它们被格式化并提供字节块及其地址-存储中文件的位置

操作:通过操作系统在存储中创建/删除/重命名文件和文件夹,文件读取/写入/移动,权限更改等。

需要以“块”(块)创建N字节大小的文件。尽管从理论上可以认为文件可以按单个字节的序列进行管理(从逻辑上讲可以),但我们在空间中管理文件所需要的只是一个指定的索引,告诉某些文件属性(名称等)以及每个文件的起始位置存储空间。但是,由于硬件采用“总线”和“块”进行设计的方式以及性能方面的考虑,这些“块”具有特定的大小,并且是介质块大小的倍数(例如512字节,4096字节),并且由inodes层管理,它告诉下一层有关文件位置以及何时需要查找块,将块装载到内存等如何将块串在一起的信息。

如果一个人有一大卷纸(卷),并且必须设计用于由页面(字符或信息位)组成的文档的信息存储,以存储多页文档,则需要一个索引(用于查找文档),用于页面(页面的一些简单位置)。在Unix中的排序机制(inodes)和实际切入页面。inode-size是索引条目的大小(或多或少),每个inode的字节数是页面的大小

更改有关两个设置的效果:

changin inode-size-通常无需更改,坚持默认设置(根据先前讨论讨论区中发布的链接)

每个索引节点的字节数-影响一个人可能在卷中创建的最大文件数(可能是未使用字节的性能和“浪费”)

回到纸卷类比:假设必须在这样的系统中写入和存储特定大小的文件(文件)(或许多不同大小的文件)-如果页面大小是在“写入和存储系统”期间设定的定义并不灵活,因为同一文档可能需要很多页面,如果“系统”页面尺寸很大而文档尺寸很小,那么在一页中放入空白并放入小文件可能会浪费大量纸张。如果页面大小很大-需要用于文档的页面较少,但是在最后使用的页面中可能会有很多“浪费的空白”。因此,这完全取决于……将使用的文件大小以及数量。另一个考虑因素是查找和携带多页文档的速度。

希望这有意义(对我有用),如果我严重滥用了ext design或mkfs选项的任何部分,请发表评论。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.