科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道JFS布局:日志文件系统如何处理磁盘布局(14)

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

JFS 体系结构可通过其磁盘布局特性的上下文进行说明。磁盘布局是 JFS 用来控制文件系统的格式。本文讨论盘区的文件几何构造、目录格式、块分配映射表格式、inode 和布局结构的其它特性。本文还提供了文件布局使用的 B 树数据结构的细节和示例。选择 B 树是为了提高读写盘区

来源:51cto.com 2007年12月27日

关键字: 数据恢复 数据安全

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共23页)

inode 分配映射表

inode 分配映射表解决正向查找问题。聚集和每个文件集都有一个 inode 分配映射表,该表是一个 IAG(inode 分配组)的数组。IAG 是 inode 分配映射表的数据。对于聚集,inode 分配映射表映射的 inode 也称为聚集 inode 表。对于文件集,inode 分配映射表映射的 inode 也称为文件 inode 表。

每个 IAG 大小为 4K,描述磁盘上 128 个物理 inode 盘区。由于每个 inode 盘区包含 32 个 inode ,所以每个 IAG 描述 4096 个 inode 。IAG 可以位于聚集的任意位置。IAG 的所有 inode 盘区位于一个分配组,由此 IAG 和 AG 绑定在一起直至释放所有的 inode 盘区。任意 AG 可以分配空间给一个 inode 盘区,然后该 IAG 就与那个 AG 绑定。IAG 由 struct iag_t 定义(见 jfs_imap.h)。


/*
 *  inode allocation group page (per 4096 inodes of an AG)
 */
typedef struct {
    int64   agstart;    /* 8: starting block of ag      */
    int32   iagnum;     /* 4: inode allocation group number     */
    int32   inofreefwd; /* 4: ag inode free list forward    */
    int32   inofreeback;    /* 4: ag inode free list back       */
    int32   extfreefwd; /* 4: ag inode extent free list forward */
    int32   extfreeback;    /* 4: ag inode extent free list back    */
    int32   iagfree;    /* 4: iag free list         */

    /* summary map: 1 bit per inode extent */
    int32   inosmap[SMAPSZ];/* 16: sum map of mapwords w/ free inodes;
                 *  note: this indicates free and backed
                 *  inodes, if the extent is not backed the
                 *  value will be 1.  if the extent is
                 *  backed but all inodes are being used the
                 *  value will be 1.  if the extent is
                 *  backed but at least one of the inodes is
                 *  free the value will be 0.
                 */
    int32   extsmap[SMAPSZ];/* 16: sum map of mapwords w/ free extents */
    int32   nfreeinos;  /* 4: number of free inodes        */
    int32   nfreeexts;  /* 4: number of free extents               */
                /* (72)                                    */
    uint8   pad[1976];  /* 1976: pad to 2048 bytes                 */
    /* allocation bit map: 1 bit per inode (0 - free, 1 - allocated)   */
    uint32  wmap[EXTSPERIAG];   /* 512: working allocation map     */
    uint32  pmap[EXTSPERIAG];   /* 512: persistent allocation map  */
    pxd_t   inoext[EXTSPERIAG]; /* 1024: inode extent addresses    */
} iag_t;                    /* (4096)                          */

inode 分配映射表最前面 4k 大小的页是控制页。该页包含 inode 分配映射表的摘要信息。 dinomap_t 结构的定义见 jfs_imap.h。

逻辑上,inode 分配映射表是动态可扩展的 IAG 结构的数组:

struct iag inode_allocation_map [ 1.. N ];

物理上,inode 分配映射表本身是聚集内的一个文件。聚集 inode 分配映射表由聚集 self-node 描述。文件集 inode 分配映射表由文件集 inode 描述。页空间的分配和释放依据 B+ 树索引需要进行。B+ 树的键是 IAG 页的字节偏移量。

JFS 使用提交策略确保控制数据可靠更新。可靠更新意味着一旦系统出错时,要维持一致的 JFS 结构和资源分配状态。为确保 inode 分配映射表的一致性,每个 IAG 都同时维护两个映射表,工作映射表和持续映射表。工作映射表记录当前分配状态。持续磁盘记录递交的分配状态,包括磁盘上记录的分配状态或是 JFS 日志中提交的 JFS 事务记录描述的分配状态。

映射表中的每一位记录相应 inode 是空闲还是已分配的。位值 0 表示 inode 空闲,1 表示 inode 已分配。IAG 的每一个控制区内都有一个摘要映射表,用以提高查找空闲 inode 的性能。摘要映射表映射到 IAG 的工作位图。摘要映射表使用一位映射工作映射表的相邻 32 位。每一位表示相应的 inode 可用(0),或相应的 inode 不可用(1)。(如果没有已分配的盘区,那么该 inode 摘要映射位为 1,表明没有可用的 inode ,)

IAG 还包含 inode 盘区描述符,该描述符描述相应的 inode 盘区。每个 IAG 有 128 个描述符。IAG 的每个控制区内都有一个摘要映射表,用于改进空闲 inode 盘区查找的性能。摘要映射表用一位映射一个 inode 盘区。0 表示空闲的 inode 盘区,1 表示已分配的 inode 盘区。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章