一、概述
它是硬盘分区开头——开头的第一个byte是byte 0,从 byte 1024开始往后的一部分数据。由于 block size最小是 1024 bytes,所以super block可能是在block 1中(此时block 的大小正好是 1024 bytes),也可能是在block 0中。 超级块中的数据其实就是文件卷的控制信息部分,也可以说它是卷资源表,有关文件卷的大部分信息都保存在这里。例如:硬盘分区中每个block的大小、硬盘分区上一共有多少个block group、以及每个block group中有多少个inode。
二、预备知识
1、block
对于ext2(ext3类似)文件系统来说,硬盘分区首先被划分为一个个的block,同一个ext2文件系统上的每个block大小都是一样的。但是对于不同的ext2文件系统,block的大小可以有区别。典型的block大小是1024 bytes或者4096 bytes。这个大小在创建ext2文件系统的时候被决定,它可以由系统管理员指定,也可以由文件系统的创建程序根据硬盘分区的大小,自动选择一个较合理的值。 一个硬盘分区上的block计数是从0开始的,并且这个计数对于这个硬盘分区来说是全局性质的。2、block group和group descriptor
硬盘分区中所有block被聚在一起分成几个大的block group,其中每个block group中有多少个block是固定的。 每个block group都相对应一个group descriptor,这些group descriptor被聚在一起放在硬盘分区的开头部分,跟在super block的后面。在每个group descriptor当中有几个重要的block指针,指向block group的inode table、block bitmap和inode bitmap。3、inode table、block bitmap、inode bitmap
以上三个结构记载了其所属block group的许多信息,他们依次被存放在这个block group的开头部分,由该block group所对应的group descriptor中的指针所指向。三、结构和含义
1、superblock的结构体
struct ext3_super_block { /*00*/ __u32 s_inodes_count; /* inodes 计数 */ __u32 s_blocks_count; /* blocks 计数 */ __u32 s_r_blocks_count; /* 保留的 blocks 计数 */ __u32 s_free_blocks_count; /* 空闲的 blocks 计数 */ /*10*/ __u32 s_free_inodes_count; /* 空闲的 inodes 计数 */ __u32 s_first_data_block; /* 第一个数据 block */ __u32 s_log_block_size; /* block 的大小 */ __s32 s_log_frag_size; /* 可以忽略 */ /*20*/ __u32 s_blocks_per_group; /* 每 block group 的 block 数量 */ __u32 s_frags_per_group; /* 可以忽略 */ __u32 s_inodes_per_group; /* 每 block group 的 inode 数量 */ __u32 s_mtime; /* Mount time */ /*30*/ __u32 s_wtime; /* Write time */ __u16 s_mnt_count; /* Mount count */ __s16 s_max_mnt_count; /* Maximal mount count */ __u16 s_magic; /* Magic 签名 */ __u16 s_state; /* File system state */ __u16 s_errors; /* Behaviour when detecting errors */ __u16 s_minor_rev_level; /* minor revision level */ /*40*/ __u32 s_lastcheck; /* time of last check */ __u32 s_checkinterval; /* max. time between checks */ __u32 s_creator_os; /* 可以忽略 */ __u32 s_rev_level; /* Revision level */ /*50*/ __u16 s_def_resuid; /* Default uid for reserved blocks */ __u16 s_def_resgid; /* Default gid for reserved blocks */ __u32 s_first_ino; /* First non-reserved inode */ __u16 s_inode_size; /* size of inode structure */ __u16 s_block_group_nr; /* block group # of this superblock */ __u32 s_feature_compat; /* compatible feature set */ /*60*/ __u32 s_feature_incompat; /* incompatible feature set */ __u32 s_feature_ro_compat; /* readonly-compatible feature set */ /*68*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */ /*78*/ char s_volume_name[16]; /* volume name */ /*88*/ char s_last_mounted[64]; /* directory where last mounted */ /*C8*/ __u32 s_algorithm_usage_bitmap; /* 可以忽略 */ __u8 s_prealloc_blocks; /* 可以忽略 */ __u8 s_prealloc_dir_blocks; /* 可以忽略 */ __u16 s_padding1; /* 可以忽略 */ /*D0*/ __u8 s_journal_uuid[16]; /* uuid of journal superblock */ /*E0*/ __u32 s_journal_inum; /* 日志文件的 inode 号数 */ __u32 s_journal_dev; /* 日志文件的设备号 */ __u32 s_last_orphan; /* start of list of inodes to delete */ /*EC*/ __u32 s_reserved[197]; /* 可以忽略 */ };
2、几个重要成员
- Magic 签名
- s_log_block_size
- s_blocks_count和s_blocks_per_group
- s_inodes_per_group
标签:__,group,介绍,u32,superblock,blocks,inode,block From: https://www.cnblogs.com/yuanqiangfei/p/16933083.html