EXT2/EXT3/EXT4 文件的读取与日志式文件系统概念的引入

这篇文章是看了鸟哥的书中这一讲之后做的一些总结。

我的《文件系统的特性,linux的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称为数据存放区域。inode bitmap,block botmap,superblock的数据会经常变动,每次新增,移除,编辑都会影响这三个部分的数据,因此被称为中介数据。

数据不一致状态:
在一般情况下,上述的新增动作都会顺利完成。但例如出了些差错,例如在将文件写入文件系统时,因为某些原因使得系统中断,所以写入的数据仅有inode table及data block,最后一步同步更新中介数据的步骤没有做完,此时就会发生中介数据的内容与实际不一致的情况。

对于这种情况,在早期的EXT2文件系统中系统在重新启动时就会有superblock当中记录的valid bit(是否挂载)与filesystem state(clean与否)等状态来判断是否强制进行数据一致性的检查。不过,这样的检查是将中介数据与实际数据存放区进行一一比对,如果文件系统中的数据很多则会非常耗时,这这也就造成了后来所谓日志式文件系统的兴起。

日志式文件系统:

很简单的道理,就是说在文件系统中划出一个区块专门记录写入或修改文件时的步骤,这样就可以简化一致性检查的步骤了。也就是说:

  • 1:预备:当系统要写入一个文件时,会先在日志记录区块中记录某个文件准备要写入的信息。
  • 2:实际写入:开始写入文件的权限与数据;更新中介数据的数据。
  • 3:结束:完成数据与中介数据的更新后,在日志记录区块当中完成该文件的记录。

在这样的程序中,万一数据的记录过程当中出现了问题,那么通过检查日志记录区块就会很快的知道哪个文件发生了问题,然后对该文件进行一致性检查,这样比一一比对快的多了。这就是日志式文件系统最基础的功能。

ext3,ext4是ext2的升级版本,并向下兼容ext2,所以现在很多时候我们都直接用ext4。

现在对日志式文件系统就有了一个简单的概念。

感谢阅读,欢迎指正。

-------------本文结束感谢您的阅读-------------