一. Ext3格式分析
二.
Ext3数据组织格式
三.
Ext3日志系统分析
一. Ext3 格式分析
Ext3 的存储格式以及一个每个 group 的格式如下图所示:
由图可知, ext3 fs 由 N 个 group 组成,每个 group 又由 1 个 sb, 1 个 group descriptor table, 1 个 data block bitmap, 1 个 inode bitmap, 1 个 inode table 以及剩余的 data block 组成。
Group descriptor 用于描述该 group 的 inode 以及 block 的使用状态及位置,结构体是 ext3_group_desc 。
Data block bitmap 表示某一块已用还是未用。
Inode bitmap 表示某一个 inode 已用还是未用。
Inode table 用来存储 inode 信息表。每个 inode 表项的结构构是 ext3_inode .
Data block 用来存储数据,不同的文件类型存储的数据格式不一样,后面有介绍。
Group 个数 = disk total blocks/ ( 8*block size);
每个 group 最多容纳 block size * 8 个 blocks, data block bitmap 都可以用一个 block 来描述。
假设 block size 为 1k ,对于 512M 的 disk ,其 group 的个数为 64.
mkfs.ext3 格式化时,会设置 inode 的个数为 2048/ group, data block 的个数为 8K/group 。这样也就可以算出整个 ext3 最多容纳的文件或者目录个数。
Ext3 的 Inode no 是从 1 开始的,因此 1~2048 存储在第 0 个 group ,其是否有效通过该 group 的 inode bitmap 位 0 到 ~ 位 2047 来表示,依此类推: inode 2049~4096 存储在第 1 个 group.
因为 Ext3 使用的数据块也是 1 开始的 (es->s_first_data_block=1) ,因此第 1 个 group 的 block bitmap 位 0 到位 8191 实际表示的 block 范围是 1~8192 。
通过 dumpe2fs /dev/wsmda 可以查看到 ext3 的详细信息。