ext2文件系统主要由三部分超级块superblock、inode、数据块data block三部分组成。

从上图看出,文件系统主要由引导块、若干块组组成。这里的引导块是文件系统最前面的一个启动扇区,用于安装引导装载程序。最大的好处可以将不同的装载程序放在不同的文件系统的前端,制造出多重引导的环境。文件系统之所以分块组0、块组n,主要是便于分开、独立的管理。防止文件系统过大使用同一个块组会导致inode、block的数量庞大,索引起来相对也会降低系统性能。
每一个块组有超级块(super block)、组描述符、数据块位图、索引节点位图、索引节点表、数据块组成。
超级块:主要记录文件系统的总体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等。
组描述符:描述此块组的开始与结束的block块号码,以及说明每个超级块、数据块位图、索引节点位图等分别介于哪些block号码之间。
数据块位图:添加或者删除文件时,都需要一些block数据块记录,比如添加文件会选择空的block块来记录新数据。如何知道哪些block块的数据为空,此时通过数据块位图的实时指示即能够找到空的数据块block,使用即可。所谓的实时指示即是能够实时的更新数据块block的使用和非使用的情况。
索引节点位图:和数据块位图的功能异曲同工,用来实时指示inode的使用和非使用情况。
索引节点表:非常重要的一个占有128字节空间的数据块。记住一个文件占用一个inode,其内容主要包括:文件访问模式、所有者与组、文件大小、文件相关的时间(创建、修改等)、文件内容的指针等。以及此inode对应的block号码,找到该block号码能够读取该文件的内容。注意的是这里的文件包含目录文件和数据文件两种。这两种文件都包含一个inode和至少一个block数据块。
inode:记录文件的属性,一个文件占用一个inode,且inode占用128bytes。同时记录此文件的数据所在的block号码。
数据块:实际记录文件的内容,若文件太大,会占用多个block。block的大小以1K、2K、4K为单位。

文件系统的核心其实是理解inode和block数据块的关系,从上图看出,inode存在于block中,block中的inode又指向新的block,用于拓展文件的大小。