| 
 咨询电话:010-51727811/12/13
当前位置: 首页 > 新闻中心 > 业内新闻 >
JFS布局日志文件系统如何处理磁盘布局(一)
时间:2013-12-30 09:33  来源:飞客数据恢复   作者:飞客数据恢复工程师
    聚集有:
    在此聚集的开始部分有 32K 保留区域。固定的聚集块尺寸,其合法值为 512、1024、2048 或 4096 字节,但不小于分区块尺寸。聚集块尺寸定义了聚集上支持的最小空间分配单元。不要把它与分区块尺寸混淆起来,后者定义的是 I/O 的最小单元。
    主聚集超级块和辅助聚集超级块。超级块包含聚集方面的信息,例如:聚集的大小、分配组的大小、聚集块的尺寸等等,辅助聚集超级块是主聚集超级块的直接副本。如果主聚集超级块损坏,则使用辅助聚集超级块。这些超级块位于固定位置。这使得 JFS 不依赖任何其它信息,就能够找到它们。超级块结构在 jfs_superblock.h 的 struct jfs_superblock 中定义。
    聚集 inode 表,包含描述聚集范围的控制结构的 inode 。聚集 inode 表逻辑上包含一个 inode 数组。聚集无目录结构;在聚集或文件集名字空间中,任何地方都没有聚集 inode 。辅助聚集 inode 表,包含从聚集 inode 表复制的 inode 。由于对任何文件系统信息的查找而言,聚集 inode 表中的 inode 都是至关重要的,所以它们每一个在辅助聚集 inode 表中都有备份。当然,不会复制 inode 的实际数据,而只是复制可用来查找数据和 inode 本身的寻址结构。
    聚集 inode 映射表,描述聚集 inode 表。聚集 inode 分配映射表包含聚集 inode 上及其磁盘位置上的分配状态信息。辅助聚集 inode 映射表,描述辅助聚集 inode 表。由于必须复制聚集 inode 表本身,辅助聚集 inode 映射表实际上是与聚集 inode 分配映射表分开的映射结构。块分配映射表,描述在聚集内分配和释放聚集磁盘块的控制结构。块分配映射表在聚集磁盘块内进行一对一映射。
    fsck 工作区它为 fsck 提供用来跟踪聚集块分配的空间。因为 JFS 支持超大聚集,所以这一区域是必需的;当 fsck 运行时,可能没有足够的内存用来跟踪内存中的这些信息。超级块描述了这一区域。每个聚集块需要一位。 fsck 工作区总是存在于聚集的末端。内嵌日志为记录聚集中的元数据更改提供了空间。超级块描述了这一区域。内嵌日志总是紧跟 fsck 工作空间后。
 
    初始情况下,在聚集创建时分配了第一个 inode 盘区。按需要动态分配和释放其它 inode 盘区。每个聚集 inode 描述聚集本身的某些方面,如下:
    保留聚集 inode 0。
    聚集 inode 1,即自身 inode ,描述包括聚集 inode 映射表的聚集磁盘块。这是一种循环表示法,因为聚集 inode 1 本身也在自己所描述的文件中。可通过强制规定至少第一个聚集 inode 盘区要在众所周知的位置,即主聚集超级块后面 4K 的位置,来处理以上显而易见的循环表示法问题。因此,JFS 能轻而易举地找到聚集 inode 1,从聚集 inode 1,通过跟随 inode 1 中的 B+ 树,能找到聚集 inode 表的余下 inode 。
    要复制聚集 inode 表,JFS 还需要找到聚集 inode 1 的副本,以查找所复制表的其余部分。超级块会包含一个盘区描述符,该描述符描述辅助聚集 inode 表的第一个 inode 盘区的位置。JFS 能够从中找到辅助聚集 inode 1,以及辅助聚集 inode 表的余下部分。
    聚集 inode 2 描述块分配映射表。
    聚集 inode 3 描述安装时的内嵌日志。虽然分配了 inode ,但无数据存入磁盘。
    聚集 inode 4 描述在聚集格式化期间发现的坏块。在块映射表中这些标记成已分配。该 inode 是数据为坏块的普通文件。
    保留聚集 inode 5 到 15 以备将来扩展。
    从聚集 inode 16 开始,每个文件集有一个 inode ,即文件集分配映射表 inode 。这个 inode 描述了表示文件集的控制结构。当更多文件集添加到聚集中时,为了容纳更多的文件集 inode ,聚集 inode 表本身可能必须增大。 
 
    文件集中 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 的可用内存数量有限,因此它必须保证有足够的空间用于解压缩盘区。
    提供了一个碎片整理实用程序,以减少动态分配/释放可变长盘区时出现的外部存储碎片。这种分配和释放可能导致不相连的变长空闲盘区遍及整个聚集。碎片整理实用程序会把多个小的空闲盘区合并成一个较大的盘区。