Ext2磁盘结构
ext2分区和ext2分组的分布图(下图是借用其他博客的)
块组中的每个块包含的信息:
超级快(1个块):描述该分区中的整个文件系统的信息,包括有多少个快组,每个快组有多少个块,多少个索引节点等。
组描述符块(n块):
块位图(1块):
索引节点位图(1块):
索引节点(n块):
数据块(n块):
块大小:ext2块大小可以设置为1K,2K或4K。
超级块:
ext2_super_block结构,重点字段:
s_inodes_count; 索引节点的总数
s_blocks_count; 文件系统中块的总数
s_free_blocks_count; 空闲块的数目
s_free_inodes_count; 空闲节点的数目
s_first_data_block; 第一个使用的块号(总是1)
s_log_block_size; 块的大小,1K,2K,4K
s_blocks_pre_group; 每个块组的块数
s_inodes_pre_group;每个快组的索引节点数
组描述符:
每个块组都有自己的组描述符,将所有分组的分组描述符都保存在一起。
ext2_group_desc结构,32个字节大小。重点字段:
bg_block_bitmap; 数据块位图的块号
bg_inode_bitmap;索引节点位图的快号
bg_inode_table ; 第一个索引节点表块的块号
bg_free_blocks_count; 该组中的空闲块的数目
bg_free_inodes_count;该组中的空闲索引节点的数目
bg_used_dirs_count; 改组中的数目的个数。
块位图:
块位图用来描述整个块组中哪些块是空闲的,那些块是占用的,0代表空闲,1代表占用。
如果块大小为1K,那么每个组块,最多有1024*8个块,也就是8M
如果块大小为4K,那么每个组块最多4K*8个块,也就是128M
索引节点位图:
占用一个块。
索引节点表:
每个索引节点占128字节,块大小为1K时,每块包含8个索引节点,块大小为4K时,每块可以包含32个索引节点。
索引节点ext2_innode 包含的重要字段:
i_mod; 文件类型、访问权限
i_uid; 拥有者标识
i_size; 以字节为单位,文件大小
i_links_count; 硬链接计数器,也就是有多少个目录指向该文件
i_blocks; 文件的数据块
[] i_block; 指向数据块的指针。默认包含15个元素,0-11元素,对应文件最初的12个块,后面则是2级,3级,4级索引。