Ext2 Filesystem

1. Ext2 Disk Layout

ext2文件系统的磁盘layout如上图所示:

其中前1024字节是启动block,给系统引导扇区预留的,ext2不会去使用这一块数据。剩下的空间被分成了N个block group,其中每个block group的结构都是一样的。

superblock的定义如下:

block group起始都是一个superblock,记录了ext2自己的一些信息,比如block size,inode size等等信息。ext2通过读取superblock计算blocksize大小,blocksize=1024 << superblock->s_log_block_size。

接着是group descriptor列表,group descriptor记载了block group元信息,superblock和group descriptor除了第一个block group有之外,其他block group也可能会有一份冗余,包括block bitmap,inode bitmap,inodetablet等结构。

group descriptor后面是Reserved GDT blocks,是用来文件系统在线resize的,不是所有的block group都有。

然后后面分别是block_bitmap和inode_bitmap,block_bitmap和inode_bitmap分别表示本block group的block和inode使用情况,0代表block或者inode未被使用,1代表已经使用了,他们的长度分别是1k,这样一个block group最多有8*1024个block或者inode。

接着是inodetable,inodetable记录了block group预定义的所有的inode,而block_bitmap,inode_bitmap,inodetable的offset记录在group descriptor里。

最后面是datablocks,用来存储实际的数据。

我们可以用dumpe2fs来解析一份实际的文件系统layout,如下所示

最后更新于