加载中…
个人资料
古猫先生-存储随笔
古猫先生-存储随笔
  • 博客等级:
  • 博客积分:0
  • 博客访问:34,780
  • 关注人气:10
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

文件系统系列专题之四 Ext2/3/4-Part1

(2017-05-02 13:12:56)
标签:

ext2

ext3

ext4

文件系统

分类: 文件系统

一、Ext概述

EXT是延伸文件系统(Extended file system,缩写为 ext或 ext1),也译为扩展文件系统,第 1 个扩展文件系统(ext1)由 Remy Card 设计,并于 1992 年 4 月引入到 Linux 中。采用Unix文件系统(UFS)的元数据结构,以克服MINIX文件系统性能不佳的问题。它是在linux上,第一个利用虚拟文件系统(VFS)实现出的文件系统,在linux核心0.96c版中首次加入支持,最大可支持2GB的文件系统。


第 2 个扩展文件系统(ext2)也是由 Remy Card 实现的,并于 1993 年 1 月引入到 Linux 中。它借鉴了当时文件系统(比如 Berkeley Fast File System [FFS])的先进想法。ext2 支持的最大文件系统为 2TB,但是 2.6 内核将该文件系统支持的最大容量提升到 32TB。


第 3 个扩展文件系统(ext3)是 Linux 文件系统的重大改进,尽管它在性能方面逊色于某些竞争对手。ext3 文件系统引入了日志概念,以在系统突然停止时提高文件系统的可靠性。


目前,已经拥有第 4 个扩展文件系统(ext4)。ext4 在性能、伸缩性和可靠性方面进行了大量改进。最值得一提的是,ext4 支持 1 EB 的文件系统。ext4 是由 Theodore Tso(ext3 的维护者)领导的开发团队实现的,并引入到 2.6.19 内核中。目前,它在 2.6.28 内核中已经很稳定(到 2008 年 12 月为止)。


上面就是Ext文件系统的发展历史,我们可以看到Ext文件系统已经发展到第四代Ext4。虽然主流基本是Ext4, 但是Ext2/3目前仍然再用。所以我们此篇文章从Ext2入手,对Ext2/Ext3/Ext4加以详细阐述。


二、Ext文件系统结构

【Ext2文件系统】

不管是Windows或者Linux操作系统,其档案数据除了档案实际内容外,通常含有非常多的属性,例如Linux操作系统的档案权限(rwx)与文件属性(拥有者、群组、时间参数等)。


文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到data block区块中。


另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等,每个inode与block都有编号。


至于这三个数据的意义可以简略说明如下:
(1) superblock:记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
(2) inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的数据所在的block号码;
(3) block:实际记录档案的内容,若档案太大时,会占用多个block。


我们将inode与block区块用图解来说明一下,如下图所示,文件系统先格式化出inode与block的区块,假设某一个档案的属性与权限数据是放置到inode4号(下图较小方格内),而这个inode记录了档案数据的实际放置点为2,7,13,15这四个block号码,此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一口气将四个block内容读出来!那么数据的读取就如同下图中的箭头所指定的模样了。这种数据存取的方法我们称为索引式文件系统(indexedallocation)

文件系统系列专题之四 <wbr>Ext2/3/4-Part1


文件系统一开始就将inode与block规划好了,除非重新格式化,否则inode与block固定后就不再变动。但是如果仔细考虑一下,如果我的文件系统高达数百GB时,那么将所有的inode与block通通放置在一起将是很不智的决定,因为inode与block的数量太庞大,不容易管理。


为此之故,Ext2文件系统在格式化的时候基本上是区分为多个区块群组(blockgroup)的,每个区块群组都有独立的inode/block/superblock系统。就好似在公司,有很多的部门,每个部门都有自己的联络系统,但最终都得向大boss汇报!如此这样分成一群群的目的就是比较好管理咯!


Ext2格式化后基本长下面这个样子:

文件系统系列专题之四 <wbr>Ext2/3/4-Part1


接下来,我们逐个介绍一个上面提到的重要概念:

(1) Data block(资料区块)

Data block是用来放置档案内容数据地方,在Ext2文件系统中所支持的block大小有1K,2K及4K三种而已。在格式化时block的大小就固定了,且每个block都有编号,以方便inode记录。由于block大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一档案容量并不相同(如下表)。

Block大小

1KB

2KB

4KB

最大单一档案限制

16GB

256GB

2TB

最大文件系统总容量

2TB

8TB

16TB


另外,需要注意的是:每个block内最多只能够放置一个档案的数据;

a,如果档案大于block的大小,则一个档案会占用多个block数量;

b,若档案小于block,则该block的剩余容量就不能够再被使用了(磁盘空间会浪费)。


(2) Inode table(inode表)

我们前面有提到inode的作用是记录档案的属性,同时记录此档案的数据所在的block号码,Ext2详细的Inode Data Structure请见文章结尾附录A。


Ext2中inode主要包括以下一些信息:

文件系统系列专题之四 <wbr>Ext2/3/4-Part1

inode的数量与大小也是在格式化时就已经固定了,有三点需要注意:

a, 每个inode大小均固定为128bytes

b, 每个档案都仅会占用一个inode而已;

c, inode记录一个block号码要花掉 4bytes


假设我一个档案有4MB且每个block为4KB时,那么,主要也至少需要1K笔block号码的记录,也就是需要inode至少有1K*4Bytes=4KB这么大,这不是开玩笑吗!每个inode只有128 bytes!!!


为此Ext2文件系统很聪明的将inode记录block号码的区域定义为:

12个直接 + 1个间接 + 个双间接 + 1个三间接记录区。

文件系统系列专题之四 <wbr>Ext2/3/4-Part1


这样子inode能够指定多少个block呢?(以1KB大小的Block为例说明一下)

12个直接指向:共可记录12笔记录,也即12 blocks;

1个间接指向:1KB/4=256笔记录,也即256 blocks;

1个双间接指向:(1KB/4)*(1KB/4)=256*256=256^2笔记录,也即256^2 blocks;

1个三间接指向:(1KB/4)*(1KB/4)*(1KB/4)=256*256*256=256^3笔记录,也即256^3 blocks;


如何查找inode?

Inode记录位于inode table, 包含在block group,所以查找一个inode的步骤:

a, 首先看它属于哪个block group, 

b, 再来查找该inode位于该block group的index, 其中INODES_PER_GROUP在superblock中有定义。


#下面公式计算哪一个block group包含这个inode;

  block group = (inode – 1) / INODES_PER_GROUP


#下面公式计算inode位于这个block group具体index

   index = (inode – 1) % INODES_PER_GROUP


#下面公式计算该inode位于哪个block中

  containing block = (index * INODE_SIZE) / BLOCK_SIZE


这里提一点:根目录的内容一定是放在inode2对应的block。


(3) Super block(超级区块)

Superblock是记录整个filesystem相关信息的地方,没有Superblock,就没有这个filesystem了。记录的主要信息有:

  1. block与inode的总量;

  2. Ÿ未使用与已使用的inode/block数量;

  3. Ÿblock与inode的大小(block为1,2,4K,inode为128bytes);

  4. Ÿfilesystem的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息;

  5. Ÿ一个validbit数值,若此文件系统已被挂载,则valid bit为0,若未被挂载,则validbit为1。


Superblock是非常重要的,因为我们这个文件系统的基本信息都写在这里,因此,如果superblock挂了,你的文件系统可能就需要花费很多时间去修复。一般来说,superblock的大小为1024bytes。


此外,每个block group都可能含有superblock, 但事实上除了第一个block group内会含有superblock之外,后续的block group不一定含有superblock,而若含有superblock则该superblock主要是做为第一个block group内superblock的备份,这样可以进行superblock的救援!


Super Block 的备份在 ext2 中,是在所有的 group block 中的 Super block 中备份,而后的版本只在0,1,3,5,7, 以及3 5 7的指数的 group block 号中的 Super Block 做拷贝,如 9,25,49,...


我们来查看一个Ext2的super block分布:

文件系统系列专题之四 <wbr>Ext2/3/4-Part1


(4) Group Descriptor(组描述区)

这个区段可以描述每个block group的开始与结束的block号码,以及说明每个区段(superblock,bitmap,inodemap,data block)分别介于哪一个block号码之间


注意,从Ext2格式化后的分布来看,Group Descriptor是紧着Super block的,从上图我们可以看到Block size=4K=0x1000,

文件系统系列专题之四 <wbr>Ext2/3/4-Part1


(5) Blockbitmap(区块对照表)

如果你想要新增档案时总会用到block吧!那你要使用那个block来记录呢?当然是选择【空的block】来记录新档案的数据啰。那你怎么知道那个block是空的?这就得要透过block bitmap的辅助了。


从block bitmap当中可以知道哪些block是空的,因此我们的系统就能够很快速的找到可使用的空间来处置档案啰。


同样的,如果你删除某些档案时,那么那些档案原本占用的block号码就得要释放出来,此时在blockbitmpap当中相对应到该block号码的标志就得要修改成为【未使用中】!这就是bitmap的功能。


(6) inodebitmap(inode对照表)

这个其实与blockbitmap是类似的功能,只是block bitmap记录的是使用与未使用的block号码,至于inode bitmap则是记录使用与未使用的inode号码!


未完待续,请见Part2~


参考文献:

  1. 鸟哥Linux私房菜

  2. 维基百科



更多内容,请关注微信公众号:存储随笔,ID: Memory-logger,
文件系统系列专题之四 <wbr>Ext2/3/4-Part1



0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有