您的位置:首页 > 其它

[完善中]ext2文件系统布局

2017-03-29 22:15 232 查看
写在开始之前:本篇文章内的所有知识大部分来自于陈莉君所著《深入分析linux内核源代码》,小部分获取于网络,由于资料较老,可能会有一些概念描述的并不恰当,

ext2的简介:

   linux的第一个文件系统是Minix (Minix)Minix 系统所使用的操作系统。

1992年Ext加入0.96c版本。最大支持2GB磁盘分区,文件名长度255个字节。使用链表管理块和节点。

1993Ext2发布,加入了15个数据指针,最大支持4G磁盘分区,布局采用了块组的概念。采用位图管理数据块和inode节点。

ext2的布局:

   Ext2 文件系统采用了块组布局设计,将分区分成了许多块组,

如下图:

Boot Block 称为引导块或自举块,用来存储整个分区的分区信息以及启动信息,引导块位于整个分区开始部分 ,块大小为1KB。
Block Group 称为块组,用来存储文件的元数据与数据,整个分区会根据需求及设置参数被划分成不同的块组。

Block Group(块组)布局如下图:

  


Super Block(超级块):

超级块记录当前块组所在的分区的数据块与inode的总数量,以使用与未使用的数据块与inode数量,数据块与inode的大小,上次挂载的时间最近一次检验磁盘时间 以及validbit值(用于判断分区是否已经挂载 挂载为0 反之为1 )等所有该分区的基本信息。分区内的每个块组都存在超级块,但同一分区内的每个块组中的超级块内容全部完全一致,用于实现超级块的备份。可在超级块损坏时自动实现恢复。每个块组的超级块内容完全一致,且每个块组的超级块都位于当前块组的开始部分。

GDT(块组描述符表):

 当前分区中的每个块组都会有一个块组描述符记录此块组 inode列表位置,数据块位置,inode与数据块使用情况等信息。块组描述符表(GDT)将分区中所有块组的块组描述符按照顺序整合在一起形成描述符表, 存放于分区中每个块组中。同样同一分区中所有块组的块组描述符表的内容也是全部完全一致,同样实现备份功能。

Block Bitmap (块位图):

块位图用于描述数据数据块的详细使用情况,块位图硬性要求必须为一个分区时使用的块大小(如:1K,2K,4k)。块位图中每个比特与数据块(Data Blocks)中每个分区块形成一一对应的关系。(如果数据块中某个块以使用则与之对应的bit位置1,反之则置位0),所以分区时指定的块大小决定了分区需要划分出多少个块组(Block Group)

Inode Bitmap(索引节点 位图):

与块位图类似,同样硬性要求占据空间长度必须为一个分区块。但indou位图描述的是inode表的使用详细情况,描述方法与块位图相同,以bit 的形式与inode表的每项记录一一对应

Inode Table(索引节点 列表):

inode 记录了文件的属性信息,(也就是文件的类型,权限,大小,创建/修改/访问时间等信息)以及放置文件数据的block(块)的号码.号码记录区称为索引项,共有15个(12个直接记录区,1个单间接区,1个双间接去,1个三间接区) 每个文件都会占用一个inode每个inode固定大小为128B,每个索引项大小4Binode表存储了所在块组中的数据块(Data Blocks)中保存的文件的元数据的集合,inode表没有长度硬性要求,但要在分区时就指定其大小。mke2fs工具格式化分区时默认数据块每8K便分配一个inode。


Data Blocks (数据块):

存储文件数据的地方 以分区指定块大小为一个块,当存储的文件为普通类型是数据块中存储此文件的数据部分如果存储的是目录文件则存储此目录下的文件与inode的映射关系列表如果存储的是符号链接文件则有两种情况,如果文件的链接路径可以放入inode的12个直接记录区,则放入12个直接记录区,如果链接超出12个记录区可描述的长度则在直接记录去映射一个数据块的连接,将链接路径存入数据块。设备文件、FIFO和socket 等特殊文件没有数据块,即文件大小为0,设备文件的主设备号和次设备号保存在
inode中。

Inode索引寻址过程:

如果存储一个大的文件,文件大小超过分区指定大小,一个数据块无法存放,会使用多个数据块存放,但这些数据块不一定是连续存放的,所以inode无法直接指定数据块的范围,所以这种分区结构机制只能使用inode索引项定位单个数据块,inode列表有12个直接索引,直接索引项Blocks[0-11]指向的数据块内存放的是文件的数据,单间接索引项Blocks[12]指向的数据块(间接寻址块)的存放的是类似直接索引项Blocks[0-11]的索引项,用于寻找保存真正数据的数据块。而双间接索引项Blocks[13]中存放的地址指向的数据块同样保存着用于寻址的索引项。但这些索引项指向的数据块其中保存的并不是真实的数据,而是同样用于寻址作用的保存索引项的数据块。这时双间接索引项的寻址已经经过了两次类inode表的数据块,这时经过两次跳转后得到的指向地址指向的就是真正的数据了,三间接索引项Blocks[14]可以依此类推。经过三次跳转后才能得到真正保存文件数据的地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  文件系统 ext