Ext3文件系统的全部空间被划分为若干个块组,每个块组内的结构都是大致相同的,Ext3文件系统的整体结构及第一个块组的具体结构如图7-28所示。
从图7-28可以看出,Ext3文件系统的前两个扇区用来存放引导程序,称为引导扇区。如果没有引导程序则保留不用的,一般为空扇区,没有任何数据。
Ext3文件系统的第三个扇区也就是2号扇区是“超级块”,超级块占用两个扇区,用于存储文件系统的配置参数(如块大小、总块数和i-节点数)和动态信息(如当前空闲块数和i-节点数)。
块组描述符表用于存储块组描述符,占用一个或者多个块,具体取决于文件系统的大小。每个块组描述符主要描述块位图、i-节点位图及i-节点表的地址等信息。
为了系统的健壮性,Linux最初在每个块组内都对超级块和块组描述符表做了备份,但是当文件系统很大时,这将浪费很多空间,尤其是块组描述符表占用的块比较多时,所以后来采用了一种稀疏的方式来存储这些备份,也就是只在块组号是3、5、7的幂的块组(如1、3、5、7、9、25、49等)内才对超级块和块组描述符表做备份。
通常情况下,只有0号块组的超级块信息被文件系统使用,其他备份只有在主超级块被破坏的情况下才使用。
块位图用于描述本块组所管理的块的分配状态,块位图中的每一位映射本块组中的一个块,如果某个块对应的位没有设置,那么代表该块未分配,可以用于存储数据;否则,代表该块已经存放了数据或者该块不能够使用(比如该块号在物理上不存在)。
i-节点位图用于描述本块组所管理的i-节点的分配状态,i-节点位图中的每一位映射本块组中的一个i-节点。如果i-节点位图中相应的位被置1,代表该i-节点已经使用;否则表示未用。
i-节点用于描述文件的元数据,每个i-节点对应文件系统中唯一的节点号。