超级块介绍
UFS文件系统超级块的重要性类似于FAT文件系统和NTFS文件系统中的DBR,但比DBR的结构要复杂很多。超级块中记录着许多参数,主要包括:
- 文件系统的大小和状态;
- 文件系统名称和卷名称;
- 文件系统块的大小及段大小;
- 上次更新的日期和时间;
- 柱面组的大小;
- 柱面组中的数据块数;
- 柱面组概要的地址;
- 文件系统状态;
- 最后一个挂载点的路径名。
由于超级块包含文件系统的关键数据,因此在创建文件系统时建立了多个超级块,在每个柱面组内都有一个超级块的备份。
第一个柱面组中有两个超级块,一个是原始超级块,另一个是备份超级块。
另外,UFS1与UFS2的超级块还有些不同。首先是原始超级块的存放地址,UFS1的原始超级块通常位于文件系统内的16号扇区处,UFS2的原始超级块则位于文件系统内的128号扇区处,有时也会位于文件系统内的512号扇区处。
UFS1与UFS2超级块的数据结构也略有不同。不同之处主要在于UFS2在原结构的尾部添加了64位存储大小值及时间的参数,原来使用的32位参数不再使用。
UFS1的超级块结构
UFS1的超级块一般位于文件系统内的16号扇区,大小为2048字节,即4个扇区。但这2048字节中很多都是无用的参数,并且很多地址都是0数据。我们只关注比较重要的数据,表5-26为UFS1文件系统中超级块的主要参数及其含义。
表5-26 UFS1文件系统超级块的结构参数
字节偏移 | 字段长度(字节) | 字段名和定义 |
0x00~0x03 | 4 | 未用 |
0x04~0x07 | 4 | 未用 |
0x08~0x0B | 4 | 备份超级块相对于柱面组参考位置的偏移 |
0x0C~0x0F | 4 | 组描述符相对于柱面组参考位置的偏移 |
0x10~0x13 | 4 | i-节点表相对于柱面组参考位置的偏移 |
0x14~0x17 | 4 | 柱面组中第一个数据块相对于柱面组参考位置的偏移 |
0x18~0x1B | 4 | 柱面组的偏转增量值 |
0x1C~0x1F | 4 | 柱面组偏转周期的计算掩码 |
0x20~0x23 | 4 | 最后写入时间 |
0x24~0x27 | 4 | 文件系统中包含的段数 |
0x28~0x2B | 4 | 用于存储数据的段数 |
0x2C~0x2F | 4 | 文件系统中包含的柱面组数 |
0x30~0x33 | 4 | 每块字节数 |
0x34~0x37 | 4 | 每段字节数 |
0x38~0x3B | 4 | 每块包含的段数 |
0x3C~0x3F | 4 | 空闲块的最小百分比 |
0x40~0x43 | 4 | 块至块毫秒数 |
0x44~0x47 | 4 | 硬盘转速 |
0x48~0x4B | 4 | 块地址计算掩码 |
0x4C~0x4F | 4 | 段地址计算掩码 |
0x50~0x53 | 4 | 块地址字节数计算方式 |
0x54~0x57 | 4 | 段地址字节数计算方式 |
0x58~0x5B | 4 | 可用连续块的最大数 |
0x5C~0x5F | 4 | 每个文件在一个柱面组中可用块的最大值 |
0x60~0x63 | 4 | 块地址与段地址间转换位数 |
0x64~0x67 | 4 | 段地址与扇区地址间转换位数 |
0x68~0x6B | 4 | 超级块大小 |
0x6C~0x6F | 4 | 柱面组概要偏移(已不再使用) |
0x70~0x73 | 4 | 柱面组概要大小(已不再使用) |
0x74~0x77 | 4 | 每段直接地址数 |
0x78~0x7B | 4 | i-节点表中每块包含的i-节点数 |
0x7C~0x7F | 4 | 每段扇区数 |
0x80~0x83 | 4 | 优化方式 |
0x84~0x87 | 4 | 每磁道扇区数 |
0x88~0x8B | 4 | 扇区交错 |
0x8C~0x8F | 4 | 磁道倾斜 |
0x90~0x97 | 8 | 文件系统ID |
0x98~0x9B | 4 | 柱面组概要的起始段号 |
0x9C~0x9F | 4 | 柱面组概要字节数 |
0xA0~0xA3 | 4 | 柱面组描述符字节数 |
0xA4~0xA7 | 4 | 每柱面磁道数 |
0xA8~0xAB | 4 | 每磁道扇区数 |
0xAC~0xAF | 4 | 每柱面扇区数 |
0xB0~0xB3 | 4 | 文件系统包含的柱面数 |
0xB4~0xB7 | 4 | 每柱面组包含的柱面数 |
0xB8~0xBB | 4 | 每柱面组包含的i-节点数 |
0xBC~0xBF | 4 | 每柱面组包含的段数 |
0xC0~0xC3 | 4 | 目录数 |
0xC4~0xC7 | 4 | 空闲块数 |
0xC8~0xCB | 4 | 空闲i-节点数 |
0xCC~0xCF | 4 | 空闲段数 |
0xD0~0xD0 | 1 | 超级块修改标志 |
0xD1~0xD1 | 1 | 文件系统挂载清除符 |
0xD2~0xD2 | 1 | 挂载、只读标志 |
0xD3~0xD3 | 1 | 常规标志,包括以下类别: 0x01—肮脏标志,文件系统挂载后设置; 0x02—未知; 0x04—下次挂载时需运行一致性检查; 0x08—使用Hashtree或者B-tree编制目录索引; 0x10—使用访问控制列表; 0x20—未知; 0x80—移动标志 |
0xD4~0x2D3 | 512 | 文件系统最后挂载点 |
0x2D4~0x2D7 | 4 | 最后检查柱面组 |
0x2D8~0x45B | 388 | 未用 |
0x45C~0x4AB | 80 | 快照i-节点地址表列 |
0x4AC~0x4AF | 4 | 文件平均大小期望值 |
0x4B0~0x4B3 | 4 | 每个目录包含文件数期望值 |
0x4B4~0x51F | 108 | 未用 |
0x520~0x523 | 4 | fsck最后运行时间 |
0x524~0x527 | 4 | 组描述符中集群数组大小 |
0x528~0x52B | 4 | 内部符号链接最大长度 |
0x52C~0x52F | 4 | i-节点格式 |
0x530~0x537 | 8 | 文件大小最大值 |
0x538~0x53F | 8 | 块地址计算掩码 |
0x540~0x547 | 8 | 段地址计算掩码 |
0x548~0x54B | 4 | 文件系统状态 |
0x54C~0x54F | 4 | 位置布局表的格式 |
0x550~0x553 | 4 | 偏转位置数 |
0x554~0x557 | 4 | 偏转块表头 |
0x558~0x55B | 4 | 每偏转块数 |
0x55C~0x55F | 4 | 签名值(00 01 19 54) |
下面以一个Sparc架构的Solaris系统中UFS1的超级块为例具体分析。该超级块位于Solaris切片的16号扇区,共占用4个扇区。为了节省篇幅,就不对这4个扇区一一截图了,这里只将重要参数部分截图,而将不重要的参数及未用部分省略。该超级块如图5-31所示。
图5-31 Sparc Solaris系统中UFS1的超级块
图5-31中Sparc Solaris系统的UFS1超级块具体参数的解释见表5-27。
表5-27 图5-31中UFS1超级块的具体参数
字节偏移(相对偏移) | 字段长度(字节) | 字段名和定义 | 具体数值及解释 |
0x00~0x03 | 4 | 未用 | 00 |
0x04~0x07 | 4 | 未用 | 00 |
0x08~0x0B | 4 | 备份超级块相对于柱面组参考位置的偏移 | 16,含义:以每个柱面组的参考位置为0起点,备份超级块起始于16号段 |
0x0C~0x0F | 4 | 柱面组描述符相对于柱面组参考位置的偏移 | 24,含义:以每个柱面组的参考位置为0起点,组描述符起始于24号段 |
0x10~0x13 | 4 | i-节点表相对于柱面组参考位置的偏移 | 32,含义:以每个柱面组的参考位置为0起点,i-节点表起始于32号段 |
0x14~0x17 | 4 | 柱面组中第一个数据块相对于柱面组参考位置的偏移 | 832,含义:以每个柱面组的参考位置为0起点,该柱面组中第一个数据块起始于832号段 |
0x18~0x1B | 4 | 柱面组的偏转增量值 | 128,含义:每个柱面组的参考位置以128个段为偏转增量,即0号柱面组的参考位置为0号段,1号柱面组的参考位置为128号段,以此类推 |
0x1C~0x1F | 4 | 柱面组偏转周期的计算掩码 | FFFFFFF0H,含义:柱面组偏转周期的计算掩码FFFFFFF0H,将其换算为二进制等于“111111111111111 11111111111110000”,其最后4位为0,所以只需要关注柱面组号的最后4位即可,也就是说柱面组偏转周期为16,因此,每经过16个柱面组,柱面组的参考位置就回到该组的0号段处 |
0x20~0x23 | 4 | 最后写入时间 | 2009-04-17,05:36:56,该参数描述的时间范围从格林威治时间1970年1月1日开始,当前时间为2009年04月17日05时36分56秒,换算为北京时间应为2009年04月17日13时36分56秒 |
0x24~0x27 | 4 | 文件系统中包含的段数 | 6 532 080,含义:该文件系统中一共包含6 532 080个段 |
0x28~0x2B | 4 | 用于存储数据的段数 | 6 430 878,含义:该文件系统中一共有6 430 878个段用于存储数据 |
0x2C~0x2F | 4 | 文件系统中包含的柱面组数 | 124,含义:该文件系统中一共包含124个柱面组 |
0x30~0x33 | 4 | 每块字节数 | 8192,含义:该文件系统中每个块的大小为8192字节,即16个扇区 |
0x34~0x37 | 4 | 每段字节数 | 1024,含义:该文件系统中每个段的大小为1024字节,即两个扇区 |
0x38~0x3B | 4 | 每块包含的段数 | 8,含义:该文件系统中每个块由8个段组成 |
0x3C~0x3F | 4 | 空闲块的最小百分比 | 1,含义:当前文件系统中空闲块的最小比例为1%,当前未用做i-节点、间接地址块及数据块的块被称为空闲块,默认的空闲块介于1%~10%。 空闲空间是很重要的,因为随着文件系统中的数据存储越来越满,文件访问的效率会越来越低。只有存在足够的空闲空间,UFS文件系统才可以有效地运行。当文件系统变满,用尽可用的空间时,只有超级用户才能访问保留的空闲空间 |
0x40~0x43 | 4 | 块至块毫秒数 | 0 |
0x44~0x47 | 4 | 硬盘每秒转速 | 90,含义:该硬盘的盘片每秒转90圈,即5400rpm |
0x48~0x4B | 4 | 块地址计算掩码 | FFFFE000H |
0x4C~0x4F | 4 | 段地址计算掩码 | FFFFFC00H |
0x50~0x53 | 4 | 块地址字节数计算方式 | 13 |
0x54~0x57 | 4 | 段地址字节数计算方式 | 10 |
0x58~0x5B | 4 | 可用连续块的最大数 | 16,含义:最多可以连续使用16个块 |
0x5C~0x5F | 4 | 每个文件在一个柱面组中可用块的最大值 | 2048,含义:每个文件在一个柱面组中最多可用2048个块 |
0x60~0x63 | 4 | 块地址与段地址间转换位数 | 3 |
0x64~0x67 | 4 | 段地址与扇区地址间转换位数 | 1 |
0x68~0x6B | 4 | 超级块大小 | 2048,含义:超级块大小为2048字节,即4个扇区 |
0x6C~0x6F | 4 | 柱面组概要偏移(已不再使用) | 4 294 966 784 |
0x70~0x73 | 4 | 柱面组概要大小(已不再使用) | 9 |
0x74~0x77 | 4 | 每段直接地址数 | 2048,含义:每段中可以包含直接地址2048个 |
0x78~0x7B | 4 | i-节点表中每块包含的i-节点数 | 64,含义:在i-节点表中,每个块可以包含的64个i-节点 |
0x7C~0x7F | 4 | 每段扇区数 | 2,含义:每段包含2个扇区 |
0x80~0x83 | 4 | 优化方式 | 0,含义:操作系统在分配新的块时以节省时间为目的,但这样做可能会浪费一些空间;如果该值设置为1,则操作系统在分配新的块时以节省空间为目的,因为需要时间找到最合适的存储位置,所以在新建文件时需要的时间会稍长一些 |
0x84~0x87 | 4 | 每磁道扇区数 | 255 |
0x88~0x8B | 4 | 扇区交错 | 1 |
0x8C~0x8F | 4 | 磁道倾斜 | 0 |
0x90~0x97 | 8 | 文件系统ID | 00 00 00 00 00 00 00 00 |
0x98~0x9B | 4 | 柱面组概要的起始段号 | 832,含义:柱面组概要起始于832号段 |
0x9C~0x9F | 4 | 柱面组概要字节数 | 2048,含义:柱面组概要大小为2048字节,即4个扇区 |
0xA0~0xA3 | 4 | 柱面组描述符字节数 | 8192,含义:柱面组描述符大小为8192字节,即16个扇区 |
0xA4~0xA7 | 4 | 每柱面磁道数 | 16,含义:每柱面由16个磁道组成 |
0xA8~0xAB | 4 | 每磁道扇区数 | 255,含义:每磁道由255个扇区组成 |
0xAC~0xAF | 4 | 每柱面扇区数 | 4080,含义:每柱面由4080个扇区组成 |
0xB0~0xB3 | 4 | 文件系统包含的柱面数 | 3202,含义:文件系统包含3202个柱面 |
0xB4~0xB7 | 4 | 每柱面组包含的柱面数 | 26,含义:每柱面组包含26个柱面 |
0xB8~0xBB | 4 | 每柱面组包含的i-节点数 | 6400,含义:每柱面组包含6400个i-节点 |
0xBC~0xBF | 4 | 每柱面组包含的段数 | 53 040,含义:每柱面组包含53 040个段 |
0xC0~0xC3 | 4 | 目录数 | 8651,含义:文件系统目录数为8651个 |
0xC4~0xC7 | 4 | 空闲块数 | 625 321,含义:文件系统中有625 321个空闲块 |
0xC8~0xCB | 4 | 空闲i-节点数 | 733 084,含义:文件系统中有733 084个空闲i-节点 |
0xCC~0xCF | 4 | 空闲段数 | 4147,含义:文件系统中有4147个空闲段 |
0xD0~0xD0 | 1 | 超级块修改标志 | 0,该标志当超级块发生修改时被设置,文件系统挂载后清除 |
0xD1~0xD1 | 1 | 文件系统挂载清除符 | 2,当文件系统挂载时是干净的,则将该字节置0 |
0xD2~0xD2 | 1 | 只读挂载标志 | 0,设置为1说明该文件系统是以只读方式挂载 |
0xD3~0xD3 | 1 | 常规标志 | 0 |
0xD4~0x2D3 | 512 | 文件系统最后挂载点 | /,含义:文件系统最后挂载点为根目录 |
0x2D4~0x2D7 | 4 | 最后检查柱面组 | 83 |
0x55C~0x55F | 4 | 签名值(00 01 19 54) | 固定为“00 01 19 54” |
Sparc架构的Solaris系统使用Big-Endian字节序。
另外,UFS1超级块中的参数也可以通过WinHex的模板进行查看。本例是Sparc架构的Solaris系统,使用Big-Endian字节序,所以在选用模板时应选择“UFS1 Superblock BE”,如图5-32所示。
图5-32 选择“UFS1 Superblock BE”模板
选中“UFS1 Superblock BE”模板后单击“应用”按钮,就能查看UFS1的超级块参数了,如图5-33所示。
图5-33 WinHex模板显示的UFS1的超级块参数(Big-Endian)
为了对比学习,下面再举一个Free BSD系统UFS1超级块的例子。该Free BSD系统用于x86架构上,磁盘上第一个切片就是Free BSD的系统分区,该切片起始于物理磁盘的63号扇区,超级块位于Free BSD系统分区的16号扇区,也就是物理磁盘的79号扇区,该超级块一共占用4个扇区。下面把这4个扇区的部分内容截图,具体内容如图5-34所示。
图5-34 Free BSD系统中UFS1的超级块
图5-34中Free BSD系统的UFS1超级块具体参数的解释见表5-28。
表5-28 图5-34中UFS1超级块的具体参数
字节偏移(相对偏移) | 字段长度(字节) | 字段名和定义 | 具体数值及解释 |
0x00~0x03 | 4 | 未用 | 00 |
0x04~0x07 | 4 | 未用 | 00 |
0x08~0x0B | 4 | 备份超级块相对于柱面组参考位置的偏移 | 16,含义:以每个柱面组的参考位置为0起点,备份超级块起始于16号段 |
0x0C~0x0F | 4 | 组描述符相对于柱面组参考位置的偏移 | 24,含义:以每个柱面组的参考位置为0起点,组描述符起始于24号段 |
0x10~0x13 | 4 | i-节点表相对于柱面组参考位置的偏移 | 32,含义:以每个柱面组的参考位置为0起点,i-节点表起始于32号段 |
0x14~0x17 | 4 | 柱面组中第一个数据块相对于柱面组参考位置的偏移 | 1008,含义:以每个柱面组的参考位置为0起点,该柱面组中第一个数据块起始于1008号段 |
0x18~0x1B | 4 | 柱面组的偏转增量值 | 2048,含义:每个柱面组的参考位置以128个段为偏转增量,即0号柱面组的参考位置为0号段,1号柱面组的参考位置为2048号段,以此类推 |
0x1C~0x1F | 4 | 柱面组偏转周期的计算掩码 | FFFFFFFFH,含义:柱面组偏转周期的计算掩码FFFFFFFFH,将其换算为二进制等于“111111111111111 11111111111111111”,也就是说柱面组偏转周期为0,即不发生偏转,因为该文件系统很小,只有一个柱面组 |
0x20~0x23 | 4 | 最后写入时间 | 2009-10-25,06:36:11,该参数描述的时间范围从格林威治时间1970年1月1日开始,当前时间为2009年10月25日06时36分11秒,换算为北京时间应为2009年10月25日14时36分11秒 |
0x24~0x27 | 4 | 文件系统中包含的段数 | 32 002,含义:该文件系统中一共包含32 002个段 |
0x28~0x2B | 4 | 用于存储数据的段数 | 30 993,含义:该文件系统中一共有30 993个段用于存储数据 |
0x2C~0x2F | 4 | 文件系统中包含的柱面组数 | 1,含义:该文件系统中一共包含1个柱面组 |
0x30~0x33 | 4 | 每块字节数 | 8192,含义:该文件系统中每个块的大小为8192字节,即16个扇区 |
0x34~0x37 | 4 | 每段字节数 | 1024,含义:该文件系统中每个段的大小为1024字节,即2个扇区 |
0x38~0x3B | 4 | 每块包含的段数 | 8,含义:该文件系统中每个块由8个段组成 |
0x3C~0x3F | 4 | 空闲块的最小百分比 | 0,含义:当前文件系统中空闲块都可以使用,不需要保留,也就是说在创建文件系统时没有设置预留空闲空间 |
0x40~0x43 | 4 | 块至块毫秒数 | 0 |
0x44~0x47 | 4 | 硬盘每秒转速 | 120,含义:该硬盘的盘片每秒转120圈,即7200rpm |
0x48~0x4B | 4 | 块地址计算掩码 | FFFFE000H |
0x4C~0x4F | 4 | 段地址计算掩码 | FFFFFC00H |
0x50~0x53 | 4 | 块地址字节数计算方式 | 13 |
0x54~0x57 | 4 | 段地址字节数计算方式 | 10 |
0x58~0x5B | 4 | 可用连续块的最大数 | 15,含义:最多可以连续使用15个块 |
0x5C~0x5F | 4 | 每个文件在一个柱面组中可用块的最大值 | 2048,含义:每个文件在一个柱面组中最多可用2048个块 |
0x60~0x63 | 4 | 块地址与段地址间转换位数 | 3 |
0x64~0x67 | 4 | 段地址与扇区地址间转换位数 | 1 |
0x68~0x6B | 4 | 超级块大小 | 2048,含义:超级块大小为2048字节,即4个扇区 |
0x6C~0x6F | 4 | 柱面组概要偏移(已不再使用) | 4 294 963 200 |
0x70~0x73 | 4 | 柱面组概要大小(已不再使用) | 12 |
0x74~0x77 | 4 | 每段直接地址数 | 2048,含义:每段中可以包含直接地址2048个 |
0x78~0x7B | 4 | i-节点表中每块包含的i-节点数 | 64,含义:在i-节点表中,每个块可以包含的64个i-节点 |
0x7C~0x7F | 4 | 每段扇区数 | 2,含义:每段包含两个扇区 |
0x80~0x83 | 4 | 优化方式 | 1,含义:操作系统在分配新的块时以节省空间为目的,因为需要时间找到最合适的存储位置,所以在新建文件时需要的时间会稍长一些;如果该值设置为0,操作系统在分配新的块时则以节省时间为目的,但这样做可能会浪费一些空间 |
0x84~0x87 | 4 | 每磁道扇区数 | 4096 |
0x88~0x8B | 4 | 扇区交错 | 1 |
0x8C~0x8F | 4 | 磁道倾斜 | 0 |
0x90~0x97 | 8 | 文件系统ID | 81 88 41 3F 5C 00 BF 76 |
0x98~0x9B | 4 | 柱面组概要的起始段号 | 1008,含义:柱面组概要起始于1008号段 |
0x9C~0x9F | 4 | 柱面组概要字节数 | 1024,含义:柱面组概要大小为1024字节,即两个扇区 |
0xA0~0xA3 | 4 | 柱面组描述符字节数 | 6144,含义:柱面组描述符大小为6144字节,即12个扇区 |
0xA4~0xA7 | 4 | 每柱面磁道数 | 1,含义:每柱面由1个磁道组成 |
0xA8~0xAB | 4 | 每磁道扇区数 | 4096,含义:每磁道由4096个扇区组成 |
0xAC~0xAF | 4 | 每柱面扇区数 | 4096,含义:每柱面由4096个扇区组成 |
0xB0~0xB3 | 4 | 文件系统包含的柱面数 | 16,含义:文件系统包含16个柱面 |
0xB4~0xB7 | 4 | 每柱面组包含的柱面数 | 16,含义:每柱面组包含16个柱面 |
0xB8~0xBB | 4 | 每柱面组包含的i-节点数 | 7808,含义:每柱面组包含7808个i-节点 |
0xBC~0xBF | 4 | 每柱面组包含的段数 | 32 768,含义:每柱面组包含327 680个段 |
0xC0~0xC3 | 4 | 目录数 | 55,含义:文件系统目录数为55个 |
0xC4~0xC7 | 4 | 空闲块数 | 2479,含义:文件系统中有2479个空闲块 |
0xC8~0xCB | 4 | 空闲i-节点数 | 7580,含义:文件系统中有7580个空闲i-节点 |
0xCC~0xCF | 4 | 空闲段数 | 71,含义:文件系统中有71个空闲段 |
0xD0~0xD0 | 1 | 超级块修改标志 | 0,该标志当超级块发生修改时被设置,文件系统挂载后清除 |
0xD1~0xD1 | 1 | 文件系统挂载清除符 | 1,当文件系统挂载时是干净的,则将该字节置0 |
0xD2~0xD2 | 1 | 只读挂载标志 | 0,设置为1说明该文件系统是以只读方式挂载 |
0xD3~0xD3 | 1 | 常规标志 | 2 |
0xD4~0x2D3 | 512 | 文件系统最后挂载点 | /writeable,含义:文件系统最后挂载点为/writeable目录 |
0x2D4~0x2D7 | 4 | 最后检查柱面组 | 0 |
0x55C~0x55F | 4 | 签名值(00 01 19 54) | 固定为“00 01 19 54” |
x86架构的Free BSD系统使用Little-Endian字节序。
UFS1超级块中的这些参数也可以通过WinHex的模板进行查看。本例是x86架构的Free BSD系统,使用Little-Endian字节序,所以在选用模板时应选择“UFS1 Superblock LE”,打开模板后如图5-35所示。
图5-35 WinHex模板显示的UFS1的超级块参数(Little-Endian)
UFS2的超级块结构
UFS2的超级块一般位于文件系统内的128号扇区,大小一般也是2048个字节,即4个扇区。UFS2的超级块与UFS1的超级块结构大致相同,只是在某些结构上做了简化。这2048字节中也有很多是无用的参数,但UFS2将一些重要的参数由原来的32位转换为64位,这样管理范围就大了很多。表5-29为UFS2文件系统中超级块的主要参数及其含义。
表5-29 UFS2文件系统超级块的结构参数
字节偏移 | 字段长度(字节) | 字段名和定义 |
0x00~0x03 | 4 | 未用 |
0x04~0x07 | 4 | 未用 |
0x08~0x0B | 4 | 备份超级块相对于柱面组参考位置的偏移 |
0x0C~0x0F | 4 | 组描述符相对于柱面组参考位置的偏移 |
0x10~0x13 | 4 | i-节点表相对于柱面组参考位置的偏移 |
0x14~0x17 | 4 | 柱面组中第一个数据块相对于柱面组参考位置的偏移 |
0x18~0x2B | 20 | 未用 |
0x2C~0x2F | 4 | 文件系统中包含的柱面组数 |
0x30~0x33 | 4 | 每块字节数 |
0x34~0x37 | 4 | 每段字节数 |
0x38~0x3B | 4 | 每块包含的段数 |
0x3C~0x3F | 4 | 空闲块的最小百分比 |
0x40~0x47 | 8 | 未用 |
0x48~0x4B | 4 | 块地址计算掩码 |
0x4C~0x4F | 4 | 段地址计算掩码 |
0x50~0x53 | 4 | 块地址字节偏移计算方式 |
0x54~0x57 | 4 | 段地址字节偏移计算方式 |
0x58~0x5B | 4 | 可用连续块的最大数 |
0x5C~0x5F | 4 | 每个柱面组中最大块数 |
0x60~0x63 | 4 | 块地址与段地址间转换位数 |
0x64~0x67 | 4 | 段地址与扇区地址间转换位数 |
0x68~0x6B | 4 | 超级块大小 |
0x6C~0x73 | 8 | 未用 |
0x74~0x77 | 4 | 每段直接地址数 |
0x78~0x7B | 4 | i-节点表中每块包含的i-节点数 |
0x7C~0x7F | 4 | 未用 |
0x80~0x83 | 4 | 优化方式 |
0x84~0x8F | 12 | 未用 |
0x90~0x97 | 8 | 文件系统ID |
0x98~0x9B | 4 | 未用 |
0x9C~0x9F | 4 | 柱面组概要字节数 |
0xA0~0xA3 | 4 | 柱面组描述符字节数 |
0xA4~0xB7 | 20 | 未用 |
0xB8~0xBB | 4 | 每柱面组包含的i-节点数 |
0xBC~0xBF | 4 | 每柱面组包含的段数 |
0xC0~0xCF | 16 | 未用 |
0xD0~0xD0 | 1 | 超级块修改标志 |
0xD1~0xD1 | 1 | 文件系统挂载清除符 |
0xD2~0xD2 | 1 | 挂载、只读标志 |
0xD3~0xD3 | 1 | 未用 |
0xD4~0x2A7 | 468 | 文件系统最后挂载点 |
0x2A8~0x2C7 | 32 | 卷名 |
0x2C8~0x2CF | 4 | 系统全局ID |
0x2D0~0x2D3 | 4 | 未用 |
0x2D4~0x2D7 | 4 | 最后检查柱面组 |
0x2D8~0x3E7 | 272 | 未用 |
0x3E8~0x3EF | 8 | 超级块地址 |
0x3F0~0x3F7 | 8 | 目录数 |
0x3F8~0x3FF | 8 | 空闲块数 |
0x400~0x407 | 8 | 空闲i-节点数 |
0x408~0x40F | 8 | 空闲段数 |
0x410~0x417 | 8 | 空闲簇数 |
0x418~0x42F | 24 | 未用 |
0x430~0x437 | 8 | 文件系统最后写入时间 |
0x438~0x43F | 8 | 文件系统中包含的段数 |
0x440~0x447 | 8 | 文件系统用于文件的段数 |
0x448~0x44F | 8 | 柱面组概要起始段号 |
0x450~0x457 | 8 | 空闲可用块数 |
0x458~0x45B | 8 | 空闲可用i-节点数 |
0x45C~0x4AB | 80 | 快照i-节点地址表列 |
0x4AC~0x4AF | 4 | 文件平均大小期望值 |
0x4B0~0x4B3 | 4 | 每个目录包含文件数期望值 |
0x4B4~0x51F | 108 | 未用 |
0x520~0x523 | 4 | 常规标志,包括以下类别: 0x01—肮脏标志,文件系统挂载后设置; 0x02—未知; 0x04—下次挂载时需运行一致性检查; 0x08—使用Hashtree或者B-tree编制目录索引; 0x10—使用访问控制列表; 0x20—未知; 0x80—移动标志 |
0x524~0x527 | 4 | 组描述符中集群数组大小 |
0x528~0x52B | 4 | 内部符号链接最大长度 |
0x52C~0x52F | 4 | i-节点格式 |
0x530~0x537 | 8 | 文件大小最大值 |
0x538~0x53F | 8 | 块地址计算掩码 |
0x540~0x547 | 8 | 段地址计算掩码 |
0x548~0x54B | 4 | 文件系统状态 |
0x54C~0x55B | 16 | 未用 |
0x55C~0x55F | 4 | 签名值(19 54 01 19) |
UFS2文件系统主要用于Free BSD和Net BSD操作系统中。下面就举一个Free BSD系统UFS2超级块的例子。该Free BSD系统用于x86架构上,磁盘上第一个切片就是Free BSD分区,该切片起始于物理磁盘的63号扇区,超级块位于Free BSD系统分区的128号扇区,也就是物理磁盘的191号扇区,该超级块一共占用4个扇区。下面把这4个扇区的部分内容截图,具体内容如图5-36所示。
图5-36 Free BSD系统中UFS2的超级块
图5-36中Free BSD系统的UFS2超级块具体参数的解释见表5-30。
表5-30 图5-36中UFS2超级块的具体参数
字节偏移(相对偏移) | 字段长度(字节) | 字段名和定义 | 具体数值及解释 |
0x00~0x07 | 8 | 未用 | 00 |
0x08~0x0B | 4 | 备份超级块相对于柱面组参考位置的偏移 | 40,含义:以每个柱面组的参考位置为0起点,备份超级块起始于40号段 |
0x0C~0x0F | 4 | 组描述符相对于柱面组参考位置的偏移 | 48,含义:以每个柱面组的参考位置为0起点,组描述符起始于48号段 |
0x10~0x13 | 4 | i-节点表相对于柱面组参考位置的偏移 | 56,含义:以每个柱面组的参考位置为0起点,i-节点表起始于56号段 |
0x14~0x17 | 4 | 柱面组中第一个数据块相对于柱面组参考位置的偏移 | 1024,含义:以每个柱面组的参考位置为0起点,该柱面组中第一个数据块起始于1024号段 |
0x18~0x2B | 20 | 未用 | 00 |
0x2C~0x2F | 4 | 文件系统中包含的柱面组数 | 6726,含义:该文件系统中一共包含6726个柱面组 |
0x30~0x33 | 4 | 每块字节数 | 8192,含义:该文件系统中每个块的大小为8192字节,即16个扇区 |
0x34~0x37 | 4 | 每段字节数 | 1024,含义:该文件系统中每个段的大小为1024字节,即两个扇区 |
0x38~0x3B | 4 | 每块包含的段数 | 8,含义:该文件系统中每个块由8个段组成 |
0x3C~0x3F | 4 | 空闲块的最小百分比 | 1,含义:当前文件系统中空闲块的最小比例是1% |
0x40~0x47 | 8 | 未用 | 00 |
0x48~0x4B | 4 | 块地址计算掩码 | 4 294 959 104 |
0x4C~0x4F | 4 | 段地址计算掩码 | 4 294 966 272 |
0x50~0x53 | 4 | 块地址字节偏移计算方式 | 13 |
0x54~0x57 | 4 | 段地址字节偏移计算方式 | 10 |
0x58~0x5B | 4 | 可用连续块的最大数 | 15 |
0x5C~0x5F | 4 | 每个柱面组中最大块数 | 2048,含义:每个文件在一个柱面组中最多可用2048个块 |
0x60~0x63 | 4 | 块地址与段地址间转换位数 | 3 |
0x64~0x67 | 4 | 段地址与扇区地址间转换位数 | 1 |
0x68~0x6B | 4 | 超级块大小 | 2048,含义:超级块大小为2048字节,即4个扇区 |
0x6C~0x73 | 8 | 未用 | 00 |
0x74~0x77 | 4 | 每段直接地址数 | 2048,含义:每段中可以包含直接地址2048个 |
0x78~0x7B | 4 | i-节点表中每块包含的i-节点数 | 64,含义:在i-节点表中,每个块可以包含的64个i-节点 |
0x7C~0x7F | 4 | 未用 | 00 |
0x80~0x83 | 4 | 优化方式 | 1,含义:操作系统在分配新的块时以节省空间为目的,因为需要时间找到最合适的存储位置,所以在新建文件时需要的时间会稍长一些;如果该值设置为0,操作系统在分配新的块时则以节省时间为目的,但这样做可能会浪费一些空间 |
0x84~0x8F | 12 | 未用 | 00 |
0x90~0x97 | 8 | 文件系统ID | 85 AC 21 36 D8 15 58 98 |
0x98~0x9B | 4 | 未用 | 00 |
0x9C~0x9F | 4 | 柱面组概要字节数 | 114 688,含义:柱面组概要大小为114 688字节,即224个扇区 |
0xA0~0xA3 | 4 | 柱面组描述符字节数 | 6144,含义:柱面组描述符大小为6144字节,即12个扇区 |
0xA4~0xB7 | 20 | 未用 | 00 |
0xB8~0xBB | 4 | 每柱面组包含的i-节点数 | 7936,含义:每柱面组包含7936个i-节点 |
0xBC~0xBF | 4 | 每柱面组包含的段数 | 32 768,含义:每柱面组包含327 680个段 |
0xC0~0xCF | 16 | 未用 | 00 |
0xD0~0xD0 | 1 | 超级块修改标志 | 0,该标志当超级块发生修改时被设置,文件系统挂载后清除 |
0xD1~0xD1 | 1 | 文件系统挂载清除符 | 0,当文件系统挂载时是干净的,则将该字节置0 |
0xD2~0xD2 | 1 | 挂载、只读标志 | 0,如果设置为1说明该文件系统是以只读方式挂载 |
0xD3~0xD3 | 1 | 未用 | 00 |
0xD4~0x2A7 | 468 | 文件系统最后挂载点 | /usr,含义:文件系统最后挂载点为/usr目录 |
0x2A8~0x2C7 | 32 | 卷名 | UFS2,含义:文件系统的卷名为UFS2 |
0x2C8~0x2CF | 4 | 系统全局ID | 00 |
0x2D0~0x2D3 | 4 | 未用 | 00 |
0x2D4~0x2D7 | 4 | 最后检查柱面组 | 5658 |
0x2D8~0x3E7 | 272 | 未用 | 00 |
0x3E8~0x3EF | 8 | 超级块地址 | 65 536,含义:超级块开始于文件系统的65 536字节偏移处,即128号扇区 |
0x3F0~0x3F7 | 8 | 目录数 | 3659,含义:文件系统目录数为3659个 |
0x3F8~0x3FF | 8 | 空闲块数 | 586 955,含义:文件系统中有586 955个空闲块 |
0x400~0x407 | 8 | 空闲i-节点数 | 36 226 617,含义:文件系统中有36 226 617个空闲i-节点 |
0x408~0x40F | 8 | 空闲段数 | 22 596,含义:文件系统中有22 596个空闲段 |
0x410~0x417 | 8 | 空闲簇数 | 0 |
0x418~0x42F | 24 | 未用 | 00 |
0x430~0x437 | 8 | 文件系统最后写入时间 | 2009-09-21,03:28:36,该参数描述的时间范围从格林威治时间1970年1月1日开始,当前时间为2009年09月21日03时28分36秒,换算为北京时间应为2009年09月21日11时28分36秒 |
0x438~0x43F | 8 | 文件系统中包含的段数 | 220 397 568,含义:该文件系统中一共包含220 397 568个段 |
0x440~0x447 | 8 | 文件系统用于文件的段数 | 216 395 266,含义:该文件系统中一共有216 395 266个段用于存储数据 |
0x448~0x44F | 8 | 柱面组概要起始段号 | 1024,含义:柱面组概要起始位置是1024号段 |
0x55C~0x55F | 4 | 签名值(19 54 01 19) |
x86架构的Free BSD系统使用Little-Endian字节序。
UFS2超级块中的这些参数也可以通过WinHex的模板进行查看。本例是x86架构的Free BSD系统,使用Little-Endian字节序,所以在选用模板时应选择“UFS2 Superblock LE”,打开模板后如图5-37所示。
图5-37 WinHex模板显示的UFS2的超级块参数(Little-Endian)