本文以Ext2文件系统为例讲述Linux文件系统,由于Ext3文件系统是直接从Ext2文件系统发展而来,它完全兼容Ext2文件系统,所以本文的内容对于Ext2和Ext3都是适用的。
我们首先看一下磁盘分区和文件系统的结构图:
图 1 磁盘分区和文件系统结构图
整个磁盘可以分为1个MBR(Master Boot Record)和4个partitions。其中MBR的结构示意图如图2所示
图 2 MBR示意图
MBR不是本文的主要内容,所以不再详述,有兴趣的开发人员可以参考网址:https://www.ibm.com/developerworks/linux/library/l-linuxboot/。
一个partition由两部分组成:Boot Sector和File System。Boot Sector大小是1KB,这是有PC标准规定的,用来存储磁盘分区信息和启动信息,任何File System都不能使用Boot Sector。
下面进入正题,详细介绍File System——文件系统。文件系统中存储的最小单位是块(Block),一个块究竟多大是在格式化时确定的,例如mke2fs的-b选项可以设定块大小为1024、2048或4096字节。Ext2文件系统将整个分区划成若干个同样大小的块组(Block Group),如图1所示,每个块组都由以下部分组成:
1. Super Block(超级块)
描述整个分区的文件系统信息,例如块大小、文件系统版本号、上次mount的时间等等。超级块在每个块组的开头都有一份拷贝。
在Linux源代码中,Super Block对应的结构体如图3: