EXT4镜像文件格式分析 android

发布时间:2015-01-11 15:51:34   来源:文档文库   
字号:

注:此格式为android改版的ext4

目录

1、ext4文件系统总体布局
2、超级块
3、块组描述符表
4、节点表
5、根目录


1、ext4文件系统总体布局

图0 ext4镜像文件格式总体分布该图中红色为重要结构

在第1个布局中,前0x400字节为BootBlock, 用0填充

0x400-0x800为ext4的超级块,对应结构体ext4_super_block,

0x800-0x1000用0填充

第2个布局为块组描述符表(ext2_group_desc)。块组描述符表的起始偏移固定为0x1000,没有限制大小,

对应结构体ext2_group_desc,此结构体大小由超级块的s_desc_size字段指定。

每个块组对应一个结构体。

第3个布局为保留的gdt块,此块用于当第2个Block无法存放下所有块组描述结构体时,向该块填充。

该块大小由超级块的s_reserved_gdt_blocks字段指定Block个数

第4个布局为节点表,由块组描述符中bg_inode_table, 指定节点表的偏移block,如果一个块组的所有空闲inode都被使用,

就使用下一个块组的节点表。每个块组默认0x2000个节点。

节点表中存放着节点(ext4_inode)的数组,

节点表中的第1个节点用0填充

第2个节点为根目录的节点,指向根目录的目录信息(ext4_dir_entry_2数组)。

第8个节点为日志节点,指向日志块。

第5个布局为日志块

第6个布局为根目录,根目录为ext4_dir_entry_2的结构体数组,由节点表的第2个节点索引过来。

其余为其他目录和文件,以及每个块组的起始块。

2、超级块

注:以下图中的所有字段均为重要字段,其余字段说明可参考《Ext4文件系统手动提取文件》

图1 超级块,

inode总数(s_inodes_count):所有块组中的节点总和

Blocks总数低位(s_blocks_count_lo):镜像文件总大小/每个block大小。注:每个block大小固定为0x1000

空闲的blocks数低位(s_free_blocks_count_lo): 所有的块组中剩余的空闲Block

空闲的Inode数(s_free_inodes_count):所有块组中剩余的空闲Inode

每个块组的inode数(s_inodes_per_group):每个块组有多少个inode,块组描述符中有剩余inode字段

魔术标记(s_magic):默认0xEF53

节点的大小(s_inode_size):每个节点的大小

保留的gdt块(s_reserved_gdt_blocks):保留的gdt块的个数,图0中的resize块

日志系统的Inode号(s_journal_inum):日志系统在节点表中的inode号

块组描述符的大小(s_desc_size):每个块组描述符的大小。


3、块组描述符表

图2 块组描述符

块组Blocks位图(bg_block_bitmap):块位图的block位置

块组的Inode位图(bg_inode_bitmap):inode位图的block位置

Inode表(bg_inode_table):inode表的block位置

空闲的blocks数(bg_free_blocks_count):空闲的blocks个数,添加时如果该组空闲的Block小于文件大小,就寻找下一个块组的空闲的block

块组中空闲inodes数(bg_free_inodes_count):该块组中空闲的inodes

用户的目录数(bg_used_dirs_count):该镜像文件的目录个数


4、节点表

图3 节点表

文件类型和访问权限(i_mode):文件的类型与访问权限。

                                                    0xA000软链接

                                                    0x8000为文件,

                                                    0x4000为目录,

                                                    0x100当前用户可读,

                                                    0x80当前用户可写

                                                    0x40当前用户可执行

                                                    0x20组用户可读

                                                    0x10组用户可写

                                                    0x8组用户可执行

                                                    0x4其他用户可读

                                                    0x2其他用户可写

                                                    0x1其他用户可执行

文件大小(i_size_lo):文件或目录的大小,以字节为单位

硬链接计数(i_links_count):该目录下拥有硬链接的个数

文件的数据块个数(i_blocks_lo):根据文件大小决定,

inode标志(i_flags):inode的标志

指向数据块的指针(i_block):此处为一个union,为15个4字节大小的的数据

    ext4_extent_header:

        魔术标志(eh_magic): 值默认为0xFC0A

    ext4_extent:

        ee_block:第一个逻辑块

        blocks个数(ee_len): 节点指向的数据的block数

        数据块偏移高16位(ee_start_hi):

        数据块偏移低32位(ee_start_lo):指向的数据块的偏移

5、根目录

6、根目录:此为一个变长结构体数组

inode:指向子目录或文件在节点表中的Inode号

rec_len:ext4_dir_entry_2结构体的长度

name_len:目录名称或文件名称的长度

file_type:1为文件,2为目录

name:目录名称或文件名称

    目录中的第一个结构体为"."表示当前目录

    目录中的第二个结构体为".."表示上一级目录

    目录中的最后一个结构体为剩余的大小。

参考资料:https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout

                  http://blog.chinaunix.net/uid/28989651/cid-180423-list-1.html

                 

本文来源:https://www.2haoxitong.net/k/doc/c5b3cf44eefdc8d377ee3202.html

《EXT4镜像文件格式分析 android.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式