用户管理  |   用户注册                                                                                    首 页软件下载教程中心办公指南flash动画文档下载办公公文

www.4oa.com - 中科软件园

投递文章 用户管理 投稿指南 资讯通告 :
站内搜索: 您的位置中科软件园 > 教程中心 > 操作系统 > Linux > 系统管理 > 教程内容

JFS文件系统原理--JFS布局

2005-5-21 17:08:42  来源:本站整理  作者:不详 【 投递文章
内容提要:的幂次方。分配组大小在聚集超级块中存储。大小不是分配组大小倍数的聚集将包含部分分配组;磁盘块没有完全覆盖聚集的最后一个分配组。除了JFS将标记在块分配映射表中分配的却不存在的磁盘块之外,该部分分配组将...
的幂次方。分配组大小在聚集超级块中存储。

大小不是分配组大小倍数的聚集将包含部分分配组;磁盘块没有完全覆盖聚集的最后一个分配组。除了JFS 将标记在块分配映射表中分配的却不存在的磁盘块之外,该部分分配组将被当作完整的分配组。

文件集
文件集是文件和目录的集合,这些文件和目录形成了可独立安装的子树。文件集完全包含在一个聚集中。请注意,一个聚集中可能有多个文件集;在那种情况下,所有文件集共享由聚集控制结构定义的空闲聚集磁盘块公共池。

图 2 显示在一个聚集中包含两个文件集的布局。

文件集有:

文件集 inode 表,包含描述文件集范围的控制结构的 inode 。文件集 inode 表逻辑上包含一个 inode 数组。
文件集 inode 分配映射表,描述文件集 inode 表。文件集 inode 分配映射表包含文件集 inode 上及其磁盘位置上的分配状态信息。描述文件集分配映射表和其他文件集信息的超级 inode ,驻留前面所描述的聚集 inode 表中。由于复制了聚集 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 的可用内存数量有限,因此它必须保证有足够的空间用于解压缩盘区。

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

inode
JFS 磁盘 inode 是 512 字节。一个 JFS 磁盘 inode 包含 4 组基本信息。第一组描述 JFS 对象的 POSIX 属性。第二组描述 JFS 对象的其它属性;这些属性包括支持 VFS 必需的信息、操作系统环境特定的信息、以及 B+ 树的头部。第三组不是包含 B+ 树根节点的盘区分配描述符就是包含内嵌数据。第四组包含扩展属性、更多内嵌数据或附加的盘区分配描述符。在 jfs_dinode.h 的 struct dinode 中定义磁盘 inode 结构。

JFS 动态分配 inode 提供的好处如下:


inode 磁盘块可放在任何磁盘地址,这使得 inode 号和位置分开。这种分离简化了支持聚集和文件集重组,能够使聚集缩小。可以移动 inode ,移动后号码仍然相同。这允许 JFS 不必需要查找目录结构就可以更新 inode 号。对于支持 DFS 文件集复制而言,这种分离也是必需的。当复制文件集时,仅复制 inode 。既然 JFS 能把新的 inode 放在磁盘的任意位置,新 inode 将有与从它们复制的 inode 相同的号码。这允许 JFS 不需复制目录结构并且更新 inode 号。
不再需要分配实际所需十倍的 inode 。这对于 JFS 中较大的 inode 尺寸(大于 512 字节)而言,尤为重要。
大文件的文件分配可能消耗多个分配组且仍是连续的,而静态分配造成间隔(由于每个分配组中初始分配的 inode )。

另一方面,动态 inode 分配造成大量问题,包括:

对于静态分配,文件系统的几何构造隐含描述了磁盘上 inode 的布局;对于动态分配,必需有单独的映射结构。
对 JFS 完整性而言,这些映射结构是至关重要的。由于复制这些结构的系统开销,JFS 决定接受丢失这些映射表的风险。但是,JFS 将复制 B+ 树结构,该结构允许 JFS 查找映射表。

通过只分配磁盘上 inode 连续大块的 inode 盘区,动态分配了 inode 。根据定义,一个 JFS inode 盘区包含 32 个 inode 。对于 512 字节的 inode 尺寸,因此磁盘上一个 inode 盘区的大小是 16KB。

当分配新的 inode 盘区时,并不初始化盘区。然而,要使 fsck 能够检查是否 inode 在使用中,JFS 需要

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页

(评论内容只代表网友观点,与本站立场无关!)[ 全部评论 ]

网友评论:

    用户名:

    评   分:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

                 (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 -有事点这里