超级块介绍

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所示。

UFS文件系统的超级块分析-数据恢复迷

图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所示。

UFS文件系统的超级块分析-数据恢复迷

图5-32 选择“UFS1 Superblock BE”模板

选中“UFS1 Superblock BE”模板后单击“应用”按钮,就能查看UFS1的超级块参数了,如图5-33所示。

UFS文件系统的超级块分析-数据恢复迷

图5-33 WinHex模板显示的UFS1的超级块参数(Big-Endian)

为了对比学习,下面再举一个Free BSD系统UFS1超级块的例子。该Free BSD系统用于x86架构上,磁盘上第一个切片就是Free BSD的系统分区,该切片起始于物理磁盘的63号扇区,超级块位于Free BSD系统分区的16号扇区,也就是物理磁盘的79号扇区,该超级块一共占用4个扇区。下面把这4个扇区的部分内容截图,具体内容如图5-34所示。

UFS文件系统的超级块分析-数据恢复迷

图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所示。

UFS文件系统的超级块分析-数据恢复迷

图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所示。

UFS文件系统的超级块分析-数据恢复迷

图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所示。

UFS文件系统的超级块分析-数据恢复迷

图5-37 WinHex模板显示的UFS2的超级块参数(Little-Endian)