ext文件系统结构

本文详细介绍了EXT4文件系统,包括挂载、格式化的概念,EXT4分区与文件系统的区别,以及如何创建EXT4文件系统。进一步讨论了inode的含义以及文件系统的结构,特别是每个block group的组成部分,如superblock、block group descriptor、data block bitmap、inode bitmap和inode table。
摘要由CSDN通过智能技术生成

1.先看几个知识点。

1.1.挂载

在鸟叔的书上这么说:所谓的挂载,就是利用一个目录当成进入点,将磁盘分区的数据放在该目录下;也就是说,进入该目录就可以读取该分区的意思。

我们称这个操作为挂载,这个目录为“挂载点".

1.2.为什么需要进行”格式化“?

在鸟叔的书上说,因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此需要讲分区进行格式化,以成为操作系统能够利用的文件系统格式。

1.3.我们说的ext4分区和ext4文件系统有什么区别?

因为新技术的应用,格式化不再是针对分区进行的,也就是说一个分区可以格式化为多个文件系统。所以,我们称呼一个可以被挂载的数据为一个文件系统而不是一个分区。

1.4.如何将一个文件夹制作为一个特定大小的ext4文件系统?

第一步,安装工具:

sudo apt-get install android-tools-fsutils

第二步,执行命令:(其中,512M为文件系统的大小,test为文件系统的名字,tmp为提前创建好的文件夹,里面可以有文件。)

make_ext4fs -l 512M test tmp
1.5.文件系统的挂载

如果得到一个文件系统,并且知道格式,那么可以奖其挂载并且访问里面的内容。挂载的命令为:(其中,a为上面提到的”挂载点”,也就是目录。)

sudo mount -t ext4   test  a
1.6.挂载的反向操作

直接上命令:

sudo umount a

接下来主要是写一下ext4文件系统。从spec的角度介绍一下。

2.inode

在ext4文件系统中,每个文件都会有一个inode与之对应。一个inode结构体,会有以下信息:属性、长度、文件内容的所在位置…

inode号可以通过命令查看:ls -i

3.文件系统的结构

先看一张大图。ext4文件系统从前到后就是按照下面的结构排放。一个文件系统由n个Block  Group组成。有些比较小的文件系统只有一个block group。下面就分析一个block group 结构。

3.1 Group 0 Padding

对于block group 0前面的1024个字节,是没有被使用的。用二进制查看就是全0。

ext4文件系统是以block为存储单位的。 从上面的图中可以看出block group 0 的superblock的起始偏移是1024个字节。

如果每个block的size是1024个字节,那么block group 0 的superblock就是block1.

如果每个block的size大于1024个字节,那么block group 0 的superblock是block0.

(因为block size最常见的是4096字节,后文中,如果没有特别强调,都默认size是4096)

而其他的block group的前面没有这个1024个字节的Padding,所以,上图将它拎出来。

3.2 block group组成---superblock

superblock在每一个block group的第一个block。superblock中有很多非常重要的信息。包括block的size,block数量,inode的数量,文件系统支持的特征等。其中,superblock的有效内容为1024个字节。

superblock中的信息包括以下部分:

3.3 block group组成---block group descriptition

顾名思义,这个部分是用来描述这个block group。具体会有哪些内容呢?

可能看着这个表格没什么感觉,那么看一下下面的图:

上面的图的下部分是直接截取的block group descriptition的二进制图。

因为blocksize是4096,1024个字节是padding,1024-2047字节是superblock,后面是unused,一直到4095个字节,也就是为什么block group descriptition是从0x1000开始的。

前面说了,ext4文件系统是以block为存储单位的。所以这些结构在什么位置,也是用block号来标志的。比如,block group descriptition在此处就是block1。而从总结构里面可以看到,block group descriptition的大小不是确定为几个block,因此,它后面的结构是在第几个block,这个就是根据block group descriptition中的内容得到的。比如,第一个数值是data block bitmap的block号。第二个数值是inode bitmap的block号。第三个值是inode table 所在的block的block号。

3.4 block group组成---data block bitmap & inode bitmap
bitmap的作用很单纯,就是看这个block或者inode有没有被用掉。比如只有第一个block被用掉,那么第一字节就的二进制就是1000 0000,被用掉的block或者inode对应的bit为1,否则为0.
3.5 block group组成---inode table
inode table很重要。最开始,就有提到,在ext4文件系统中的每个文件都对应一个inode。如果把一个个文件比作是一个班级中的学生的话,那么inode table就是座位表,这个座位表是按照序号打印的,但是每个序号都对应一个学生,这个学生的具体的座位就在这个表中。
先看看这个座位表是怎么放的。
其实这部分就是由一个一个的inode entry组成,一个inode entry对应一个学生的序号。
那么一个inode entry 中又包含什么内容呢?一个inode entry的大小一般是256个字节。一个inode entry包含的主要信息有这个文件的特性,文件的大小,还有很重要的文件的内容在在哪。分别是下图中的红色框中的内容。
下面详细讲一下i_block这个数组。这是一个60个字节的数组,数组有15个元素,每个元素的size是4个字节。
对于ext2,ext3文件系统,这个数组的意义相对简单。 总计为下面的图。第一个元素的含义就是这个inode对应的文件的第一个block的block号。也就是说,一个很大的文件,如果占有多个block,那么可能是分散在不同的block。第一个block是在block n0,第二个block是在block n1,这两个block不一定是连续的。而对于特别大的文件,还需要采用多级目录。也就是是i_block[12]这个数值的block中,整个block都是这样的4字节元素,每个元素都是对应一个block。
而对于ext4文件系统,则是采用树的结构。总结如下图:
什么意思呢? 就是说,把这60个字节的含义完全不同于ext2,ext3文件系统。
前面12个字节是extent tree header.接下来每12个字节是一个index node 或者leaf node.下面看看这三个内容的具体含义:
extent tree header中的内容如下:
index node中的内容如下:
leaf node中内容如下:
其实从名字和上面的图可以知道,这是一个树状结构。对于叶子结点,也就是leaf node中有直接指向文件数据所在的block。 而在index node中,是指向中间结点所在的block。
一个index node是指向一个block,这个block不是文件数据所在的位置,而是仍然是一个和i_block类似的结构,不同的是,不止60个字节,entry数量可以更多,可以有更多的node。
一个leaf node是指向一段block,怎么说,就是从A开始的n个block,这n个block是连续的,是用来存放文件data的。
这部分应该就是ext文件系统结构理解的最重要的部分了。
这次就先写到这里。以后有机会再看看要不要写一下怎么用二进制的方式,查找一个文件。撒花✿✿ヽ(°▽°)ノ✿
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值