存储 频道

JFS布局:日志文件系统如何处理磁盘布局(4)

        文件集中 inode 的分配如下所示:

 

        保留文件集 inode 0。

        文件集 inode 1 包含附加的文件集信息,它们无法放入聚集 inode 表中的文件集分配映射表 inode 。

        文件集 inode 2 是文件集的根目录 inode 。注意,JFS 保留了 inode 2 是文件系统的根这一公共 Unix 约定。

        文件集 inode 3 是文件集的 ACL 文件。

        从文件集 inode 4 开始,文件集 inode 用于一般文件集对象、用户文件、目录和符号链接。

        盘区、inode 、B+ 树

        盘区是当作单元分配给 JFS 对象的连续聚集块序列。盘区完全包含在一个聚集(并且因此也是在一个分区)中;但是,大盘区可能跨多个分配组。

        每个 JFS 对象可用一个 inode 来表示。inode 包含预期的对象特定信息,例如:时间戳和文件类型。它们还包含记录盘区分配的 B+ 树。注意,所有 JFS 元数据结构(除超级块之外)都以文件表示。通过重用这种数据的 inode 结构,数据格式(即磁盘布局) 自然是可扩展的。

        盘区、B+ 树、inode 在以下章节中详细描述。

        盘区

        文件是按盘区顺序分配的。盘区是当作一个单元分配的聚集块的连续变长序列。盘区的尺寸范围是 1 到 2(24)-1 个聚集块。盘区可能跨越多个分配组(AG)。为了在插入新盘区、定位特定盘区等操作方面有更优性能,这些盘区是按 B+ 树索引的。

        定义一个盘区需要两个值,即其长度和其地址。长度以聚集块尺寸为单位计算。JFS 使用 24 位值来表示盘区的长度,因此盘区的范围大小是 1 到 2(24)-1 个聚集块。

        对于 512 字节的聚集块尺寸 (所允许的最小值),最大盘区是512*(2(24)-1)字节,(比 8G 稍小)。对于 4096 字节的聚集块尺寸(所允许的最大值),盘区的最大长度是 4096*(2(24)-1)字节,(比 64G 稍小)。这些限制仅适用于一个的盘区;对整体文件大小没有限制作用。地址指的是盘区中第一个块的地址。地址同样以聚集块为单位:它从聚集的开始处计算块偏移量。

        结合了用户特定聚集块尺寸的基于盘区的文件系统,允许 JFS 不需要单独支持内部存储碎片。可配置聚集使用小的聚集块尺寸(例如,512 字节),以使大量小尺寸文件的聚集内部存储碎片最小化。

        通常,JFS 分配尝试通过分配最小数量的盘区策略,而使每个盘区尽可能大。这就允许大的 I/O 传送,结果使得性能提高。然而,对于特殊情况,不一定总有这种结果。例如,一个段的写入时复制会造成连续盘区被分割成更小的连续盘区系列。另一种情况是盘区大小的限制。例如:由于 JFS 必须把整个盘区读入内存,然后进行解压缩,所以压缩文件盘区大小是有限的。由于 JFS 的可用内存数量有限,因此它必须保证有足够的空间用于解压缩盘区。

        提供了一个碎片整理实用程序,以减少动态分配/释放可变长盘区时出现的外部存储碎片。这种分配和释放可能导致不相连的变长空闲盘区遍及整个聚集。碎片整理实用程序会把多个小的空闲盘区合并成一个较大的盘区。

0
相关文章