Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1352952
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类:

2009-01-13 12:00:40

EXT2/EXT3 档案的存取与日志式档案系统的功能

上一小节谈到的仅是读取而已,那么如果是新建一个档案或目录时,我们的 Ext2 是如何处理的呢? 这个时候就得要 block bitmap 及 inode bitmap 的帮忙了!假设我们想要新增一个档案,此时档案系统的行为是:

   1. 先确定使用者对于欲新增档案的目录是否具有 w 与 x 的权限,若有的话才能新增;
   2. 根据 inode bitmap 找到没有使用的 inode 号码,并将新档案的权限/属性写入;
   3. 根据 block bitmap 找到没有使用中的 block 号码,并将实际的资料写入 block 中,且更新 inode 的 block 指向资料;
   4. 将刚刚写入的 inode 与 block 资料同步更新 inode bitmap 与 block bitmap,并更新 superblock 的内容。

一般来说,我们将 inode table 与 data block 称为资料存放区域,至于其他例如 superblock、 block bitmap 与 inode bitmap 等区段就被称为 metadata (中介资料) 啰,因为 superblock, inode bitmap 及 block bitmap 的资料是经常变动的,每次新增、移除、编辑时都可能会影响到这三个部分的资料,因此才被称为中介资料的啦。

* 资料的不一致 (Inconsistent) 状态

在一般正常的情况下,上述的新增动作当然可以顺利的完成。但是如果有个万一怎么办? 例如你的档案在写入档案系统时,因为不知名原因导致系统中断(例如突然的停电啊、 系统核心发生错误啊~等等的怪事发生时),所以写入的资料仅有 inode table 及 data block 而已, 最后一个同步更新中介资料的步骤并没有做完,此时就会发生 metadata 的内容与实际资料存放区产生不一致 (Inconsistent) 的情况了。

既然有不一致当然就得要克服!在早期的 Ext2 档案系统中,如果发生这个问题, 那么系统在重新开机的时候,就会藉由 Superblock 当中记录的 valid bit (是否有挂载) 与 filesystem state (clean 与否) 等状态来判断是否强制进行资料一致性的检查!若有需要检查时则以 e2fsck 这支程式来进行的。

不过,这样的检查真的是很费时~因为要针对 metadata 区域与实际资料存放区来进行比对, 呵呵~得要搜寻整个 filesystem 呢~如果你的档案系统有 100GB 以上,而且里面的档案数量又多时, 哇!系统真忙碌~而且在对 Internet 提供服务的伺服器主机上面, 这样的检查真的会造成主机复原时间的拉长~真是麻烦~这也就造成后来所谓日志式档案系统的兴起了。

* 日志式档案系统 (Journaling filesystem)

为了避免上述提到的档案系统不一致的情况发生,因此我们的前辈们想到一个方式, 如果在我们的 filesystem 当中规划出一个区块,该区块专门在记录写入或修订档案时的步骤, 那不就可以简化一致性检查的步骤了?也就是说:

   1. 预备:当系统要写入一个档案时,会先在日志记录区块中纪录某个档案准备要写入的资讯;
   2. 实际写入:开始写入档案的权限与资料;开始更新 metadata 的资料;
   3. 结束:完成资料与 metadata 的更新后,在日志记录区块当中完成该档案的纪录。

在这样的程序当中,万一资料的纪录过程当中发生了问题,那么我们的系统只要去检查日志记录区块, 就可以知道那个档案发生了问题,针对该问题来做一致性的检查即可,而不必针对整块 filesystem 去检查, 这样就可以达到快速修复 filesystem 的能力了!这就是日志式档案最基础的功能啰~

那么我们的 ext2 可达到这样的功能吗?当然可以啊! 就透过 ext3 即可! ext3 是 ext2 的升级版本,并且可向下相容 ext2 版本呢! 所以啰,目前我们才建议大家,可以直接使用 ext3 这个 filesystem 啊! 如果你还记得 dumpe2fs 输出的讯息,可以发现 superblock 里面含有底下这样的资讯:

Journal inode:            8
Journal backup:           inode blocks
Journal size:             128M

看到了吧!透过 inode 8 号记录 journal 区块的 block 指向,而且具有 128MB 的容量在处理日志呢! 这样对于所谓的日志式档案系统有没有比较有概念一点呢?^_^。如果想要知道为什么 Ext3 档案系统会更适用于目前的 Linux 系统, 我们可以参考 Red Hat 公司中,首席核心开发者 Michael K. Johnson 的话:(注6)
‘为什么你想要从ext2转换到ext3呢?有四个主要的理由:可利用性、资料完整性、速度及易于转换’‘可利用性’,他指出,这意味著从系统中止到快速重新复原而不是持续的让e2fsck执行长时间的修复。ext3 的日志式条件可以避免资料毁损的可能。他也指出:‘除了写入若干资料超过一次时,ext3往往会较快于ext2,因为ext3的日志使硬碟读取头的移动能更有效的进行’然而或许决定的因素还是在Johnson先生的第四个理由中。

‘它是可以轻易的从ext2变更到ext3来获得一个强而有力的日志式档案系统而不需要重新做格式化’。‘那是正确的,为了体验一下 ext3 的好处是不需要去做一种长时间的,冗长乏味的且易于产生错误的备份工作及重新格式化的动作’。 
阅读(1270) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~