浅谈Linux下的EXT3文件系统

【EXT3的基本介绍】

1、EXT3文件系统存储单位是“块”,就好比NTFS的“簇”。格式化硬盘或分区时将所有磁盘空间分成若干个大小相同“块”。“块”大小是可以在格式化指定,也可以采用默认的。

2、块是EXT3文件系统中的数据存储单元,每个块都有一个唯一编号,从0开始。0号块起始于文件系统起始扇区。

3、EXT3文件系统将若干个块组成“块组”,每个块组大小相同。但是由于块的总数不一定是块组的整倍数,所以最后一个块组相对于其他块组要小。

4、每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前面,对块组进行管理。

5、EXT3文件系统使用“i节点”来记录文件的时间,大小,块指针等信息;用目录项描述文件名和节点号,通过节点号就能访问其节点信息了。

6、在整个文件系统的头部,是超级快,用以描述文件系统的综合信息。

如下是EXT3文件系统的结构图

【分析超级快】

EXT3的超级块起始于文件系统的第2号扇区,占用两个扇区,0-1号扇区被引导程序占用。EXT3的超级快是一个非常重要的扇区,它记录了文件系统的很多参数。如果超级快损坏文件系统将不可用

如下是超级块的一些常见参数:

0x00~0x03:文件系统中包含的i节点总数。

0x04~0x07:文件系统中包含的总块数。

0x08~0x0B:保留块数,文件系统给自身保留的块数量。

0x0C~0x0F:空闲块数,既当前文件系统的可用块数量。

0x10~0x13:空闲i节点数,当前文件系统的可用i节点数量。

0x14~0x17:第一个数据块,既0号块组的起始起始块号。

0x18~0x1B:块大小描述值,块大小=2的N次方*1024字节,N为改参数。

0x1C~0x1F:段大小描述值,与块大小描述值相同。

0x20~0x23:块组大小描述值,既每块组中的块数量。

0x24~0x27:每块组中包含的段数,与块组大小描述符相同。

0x28~0x2B:每块中包含i节点数。

…………

此处省略部分参数解释

【分析块组描述符表】

EXT3文件系统的块组描述符表起始于超级块下面的一个块,每个块组描述符占32个字节,多个块组描述符组成了块组描述符表。如下图:是使用“Winhex”打开的块组描述符表。

块组描述的参数解释如下:

0x00~0x03:该块组的块位图起始块号。

0x04~0x07:该块组的i节点位图起始块号。

0x08~0x0B:该块组的i节点表起始块号。

0x0C~0x0D:该块组的空闲块数,既可用块数量。

0x0E~0x0F:该块组的空闲i节点数,既可用i节点数量。

0x10~0x11:该块组的目录总数。

0x12~0x13:填充。

0x14~0x1F:未用。

超级块和块组描述符表的是非常重要的,如果超级块或者块组描述符损坏,会导致文件系统不可以,因此文件系统对他们都有备份。如果文件系统不具有“稀疏超级块特性”,那么每个块组中都有超级块以及块组描述符;如果文件系统具有“稀疏超级块特性”,那么只会在3、5、7的幂中才会有备份(如:1、3、5、7、9、25、49等)。

【块位图分析】

EXT3文件系统中以块为存储单位,若干个块又组成了一个块组,在块组中块的使用情况用块位图来记录。块位图的主要特点如下:

1、每个块组中都块位图,块位图的地址在该块组描述符中有指定。

2、对于含有超级块、块组描述表以及它们的备份的块组,块位图位于块组描述表的下一个块;否则,则位于块组的第一个块。

3、在创建文件系统的时候,系统会将每个块组中的块数和块位图中的位数设置为相同。因此保证了块位图的每一位对应一个块。

4、块位图中的每个字节对应8个块(1字节=8位),第一个块对应该字节的最低位(例如:某字节的值为0xFE,转换成二进制为11111110,则第一个块对应最低位0)。如果某个块的对应为没有设置,那么则表示此块目前未使用;否则,则表示此块以使用或者是不可用。

5、计算块在文件系统中的绝对位置的公式如下:

文件系统的绝对块号=(当前偏移量-块位图的起始位置)* 8 + 块组在文件系统中的起始位置

【i节点位图分析】

EXT3文件系统中使用i节点来描述文件的元数据,i节点的使用情况由块组中的i节点位图来记录。i节点位图的基本特点如下:

1、每个块组中都有i节点位图,i节点位图的地址在该块组描述符中指定。

2、i节点位图的位置在块位图的下一个块,和块位图一样,i节点中的每个字节对应8个i节点,第一个i节点对应该字节的最低位。

3、由于i节点位图的大小小于一个块,所以i节点的大小需要使用块组描述符中i节点数除以8得出i节点位图的大小。

4、i节点从1开始编号,既第一个i节点是1号i节点而不是0号i节点。

5、计算文件系统中绝对i节点公式如下:

文件系统中绝对i节点=(当前偏移量-i节点位图的起始位置)* 8 + 改块组的第一个i节点号

【i节点分析】

EXT3文件系统的i节点用来存储除文件名以外的所有信息,i节点的主要特点如下:

1、文件系统中每个块组都有自己的i节点,每个文件或目录占用一个i节点,若干个i节点组成i节点表。

2、i节点位于i节点位图的下一个块,在超级块中记录了文件传统中i节点的总数,在块组描述符中记录了本块组i节点的总数。

3、每个i节点的大小为128字节,也可以定义大于128字节的“大i节点”。

4、每个i节点都有编号,第一个i节点编号为1,1~10号i节点为系统保留,2号i节点被分配给根目录使用。

5、如果已知一个i节点号,计算该i节点所在的块组公式如下:

(i节点号-1)DIV 每块组i节点数

如下:是使用Winhex打开的一个完整的i节点

如下:是各参数的解释

这里重点解释一下“直接块指针”和“间接块指针”。

生活中若没有朋友,就像生活中没有阳光一样

浅谈Linux下的EXT3文件系统

相关文章:

你感兴趣的文章:

标签云: