AIX日志型文件系统之i-node节点的价值

196 阅读5分钟

温故:

         “逻辑块 31是逻辑块1的备份,逻辑块31从不使用,是专门用来对逻辑块1进行灾难恢复的。在块号 2 至块号 30 之间保存着特殊的i节点。第 1个分配组从32 号逻辑块开始,分配组包括i节点和数据块,每个分配组包含固定数目的i节点,逻辑块 32 至逻辑块 m(m 的值根据分配组中包含固定i节点的数目而定)为i 节点,每一个i节点有一个编号,i节点的编号是连续而且在系统中是惟一的。从逻辑块 m+1开始到逻辑块n是一般数据块,是专门存放数据的。以此类推,从 n+1 开始可能是下一个分配组的空间,在下一个分配组中同样也包含着 i节点和数据块。”——引用自《AIX日志型文件系统之逻辑块和碎片(Fragment)

        上面这段话中提到了一个名词:i节点。所以本篇文章的目的就是和大家聊聊这个i节点的作用。

知新:

        文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

        在AIX系统中,每一个文件或目录对应一个inode,在早期的AIX版本中,创建文件系统的同时,i节点的数量就被定下来了。早期的版本中1个i节点可以管理4kb(默认值)的文件系统空间,也就是说一个4MB的文件系统,那么这个文件系统中最多可以有1024个i节点,即最多可以有1024个文件或目录。

                                   4MB X1024 X1024 ÷4096 =1024

        在早期的AIX版本中确实如此,但是还记得我在《AIX日志型文件系统之逻辑块和碎片(Fragment)》这篇文章中提到了“碎片”概念吗?自从有了碎片之后,有了更小的存储单元,那么就意味着同样大小的文件系统现在却可以存更多的文件,也就意味着要有更多的i节点。那么如何实现设置多于或少于默认节点数量的文件系统该怎么办呢?需要由nbpi参数来指定。

       日志型文件系统有一个 nbpi(Number of Bytes Per i-node,每一个i节点拥有的字节数)参数,它影响着文件系统中i节点的数量。日志型文件系统支持的 nbpi值有 512,1024, 2048,4096,8192,16384,32768,65 536和131072,其中,32 768,65536和131072只适用于 AIX 4.2 及以后版本的操作系统。在创建文件系统时要指定 nbpi值,它的默认值为4096字节,日志型文件系统允许指定多于或少于默认值的 nbpi。在创建文件系统时用 nbpi 来代替要指定的 i节点数量

        比如:要创建一个 8MB 的文件系统,同时指定 nbpi值为4 096Byte,也就是说,每一个i节点可以控制一个4096 字节的数据块,那么这个文件系统就有2 048个i节点。

                    8MB×1 024×1 024÷4 096 (Byte)=2 048(i-nodes)

        每一个文件或目录需要一个i 节点,这就意味着在这个文件系统中,如果每一个文件的大小不超过 4KB,则在这个 8MB 的文件系统中最多能创建 2048个文件。那么假设每个文件的大小依旧不超过4kb,如果要增加文件系统中允许创建文件的最大值该如何呢?自然是减小nbpi的值。

        所以综上所述:在创建文件系统时,并不是直接去指定i节点的数量,而是间接的通过设置nbpi的值来调整文件系统中i节点的数量,进而调整文件系统中文件或目录的数量。

      总结: 如果 nbpi为 4 096 个字节,也就是说一个i节点指向 4 096个字节大小的空间,对于4 096 字节的空间只需要一个i节点来管理。如果nbpi为1024 字节,也就是说一个i节点指向1 024 字节大小的空间,4 096 字节的空间需要4个i节点来管理,因此在不改变文件系统的大小的前提下,当 nbpi 值越小,越需要有更多的i节点来管理。