10-ext2 文件系统

来源:互联网 发布:女装淘宝店铺排名 编辑:程序博客网 时间:2024/06/05 09:51

上一篇简单介绍了一下什么是文件系统,最后我们尝试自己在一张A4纸上构造了一个属于我们自己的文件系统——happyfs。

可惜的是,我们这个 happyfs 并不为世人所知,它的闻名程度远不及大名鼎鼎的 ext2。ext2 是早期 linux 上使用的文件系统,堪称经典也不复杂。从它入手,比较简单,也方便以后我们学习更复杂的文件系统。

1 ext2 如何划分它的A4纸


这里写图片描述
图1 ext2全貌

看来 ext2 不太喜欢使用 A4 纸,它比较喜欢纸带。不过没关系,聪明的你一定也可以举一反三。从图1中可以看到,ext2 将纸带划分成了一个一个的“组”(除了第一个小方格外)。接下来,又把每个组具体再细分,划分出了超级块,组描述符表,块位图,inode 位图,inode 表,数据块。

别晕,这一堆名词我知道你很多看不懂,“数据块”你总能知道是什么吧。还记得上一篇文章中的图吗,那页A4纸从第11行开始存储数据,那一块就是数据块。

而从1到10行,保存是只是文件名称,位置等等相关信息,这种信息,通常只是为查找数据块在哪个位置和大小设定的,它有一个让人听起来不太爽的名字——元数据(metadata)。只不对对应到了 ext2 上,元数据变复杂了,于是就有了inode,超级块等等这些概念了。

2 何为 block

block 中译名叫。物理磁盘是由一个个的区(所谓的扇区)连接成一片,每个区是 512 字节。为了能有组织,有计划的使用磁盘,设计者把连续若干个(比如2个,4个,8个)区连成一组,抽象出 block 的概念。如果使用 2 个区为一组,那一个 block 的大小就是 1KB。

如今,磁盘也不在是什么昂贵资源,动辄就是几百G大小,通常在设计 block 的时候都使用 8 区连成一组,即一个 block 是 4KB。

图1中虽然没有明确的划出一个个的 block,但是你心里要知道,这个纸带就是由一个个的 block 拼接而成的,只是接缝实在太完美,你看不见而已。

3 Boot Block

无论如何,Boot Block 都占用 1KB,它并不以你划分的 block 大小来改变自己。即使你划分的 block 大小是 4KB,Boot Block 也只占用 1KB 大小。这个块,是专门为启动CPU的时候保留的(我没说是启动操作系统)。

在你摁下开机键的那一刻,CPU 一上电,硬件会主动把 Boot Block 复制到内存的0x7c00这个位置,然后CPU 就从这个位置开始执行,后面的事情,就是一步一步的把操作系统引导起来。

4 ext2 元数据

4.1 inode 表和 inode 节点

凡是以后提到表的概念,都可以把它理解成数组。

如同上一篇中的第1行到第10行,它就是一个简化版本的 inode 表,而 inode 表里存放的就是一个个的 inode 节点。在 ext2 中,inode 表可能要占用若干个 block.

实际上,inode 节点就是一个比较大的结构体。

ext2 的 inode 节点里存储了更加丰富的内容,除了记录文件在哪个block上,还包含了文件的权限位最近访问时间最近修改时间等等。有一点比较特殊的是,文件的名字并没有保存在 inode 节点里,而是保存在一个称为目录项的结构体里。

4.2 inode 位图和 block 位图

位图,是一种常见的数据结构。它就好像是一张地图,每个 bit 位代表一个位置,如果为 0,表示这个位置没有被占用,如果为 1,表示该位置被占用。

那么 inode 位图就是用来记录 inode 表中哪个位置被占用了,block 位图,就是记录哪个 block 被占用了。等到后面的实验中,你就会深刻理解这一点。

4.3 组描述符表

一个组描述符表,它不仅存储当前组的信息,也会保存其它组的信息。这是一种备份思想。组描述符表中存储的组描述符

组描述符中保存了 inode 位图和 block 位图在哪个 block 上。除此还有 inode 表的位置等等。

4.4 超级块

超级块记录了一全局信息,比如 inode 节点的个数,第一个数据块的位置,block 的大小(是1KB还是2KB还是4KB?),block 的个数等等。

5 总结

本篇介绍了 ext2 是如何划分磁盘的,以及一些常见的概念。这些概念看起来对于新手来说可能过于抽象,别担心,后面有实验部分。

需要注意的是:

  • 不是所有的组都有块组描述符
  • 块组描述符描述的是所有组的信息,一般来说只使用第0组中的就够了,其它组都只是备份而已。
0 0
原创粉丝点击