Sun公司的Solaris主要针对公司自己的处理器Sparc来开发,并且各大软件和应用程序厂商对Sparc平台的支持也算比较好,但是Sun公司为了应对Linux带来的压力,也加大了x86平台上的Solaris系统的开发力度。与运行在工作站上的Sparc Solaris相比,x86 Solaris性能较差,并且各大软件和应用程序厂商对x86 Solaris的支持也不够好,这也是x86 Solaris所面临的困境。

x86 Solaris磁盘布局

如果把Solaris系统安装在x86架构的计算机上,Solaris系统会在磁盘上创建几个MBR磁盘分区,也就是传统的DOS分区。

只能创建主DOS分区,不能创建扩展DOS分区。

Solaris系统一般会在磁盘上创建两个到三个主DOS分区,其中一个是Solaris系统的引导分区,分区类型为“BEH”,该分区没有文件系统,只是用来存放启动系统的引导程序。

另一个主DOS分区是Solaris系统的文件系统分区,分区类型为“82H”。“82H”这个分区类型有两个含义,一是作为Linux系统的Swap分区,另外就是作为Solaris系统的文件系统分区。在这个作为Solaris文件系统的主DOS分区内,会有一个或多个Solaris切片,这才是Solaris系统使用的空间。

磁盘上还可能有一个FAT类型的主DOS分区,但也可以没有。

综上所述,一个完整的x86架构的Solaris磁盘布局的例子如图5-12所示。

x86 Solaris分区结构分析-数据恢复迷

图5-12 x86架构的Solaris磁盘布局

再用WinHex查看一个x86架构的Solaris磁盘的第一个扇区,也就是MBR扇区,如图5-13所示。

x86 Solaris分区结构分析-数据恢复迷

图5-13 x86架构Solaris磁盘的MBR扇区

可以看出x86架构Solaris磁盘的MBR扇区与Windows下的MBR还是很像的,只是引导程序差别大一些。

Solaris文件系统分区结构

在类型为“82H”的主DOS分区内,是x86 Solaris的文件系统分区。这部分空间类似于Sparc架构的Solaris磁盘布局,其中也有磁盘标签和若干个Solaris切片,不过磁盘标签位于该DOS分区内的第二个扇区。

下面就以图5-13中分区表第三项所描述的Solaris文件系统分区为例,具体讲解Solaris文件系统分区的结构。

x86架构的Solaris系统使用Little-Endian的字节序。

这个主DOS分区开始于“00 68 AB EB”扇区,十进制为6 859 755,所以Solaris文件系统分区中的磁盘标签就位于下一个扇区,即6 859 756号扇区。用WinHex跳转到此扇区,其内容如图5-14所示。

x86 Solaris分区结构分析-数据恢复迷

图5-14 x86架构Solaris磁盘标签实例

x86架构Solaris系统的磁盘标签大部分空间被卷内容表(VTOC)占据。从该扇区的00偏移处到1C7H偏移处共456个字节都属于VTOC。在VTOC中又包含签名值、切片表及ASCII明码的标签,在VTOC后面是磁盘参数、第二个签名值及校验和。

x86架构Solaris磁盘标签的具体结构参数见表5-10。

表5-10 x86架构Solaris磁盘标签的结构参数

x86 Solaris分区结构分析-数据恢复迷

注:x86架构的Solaris存储数据的字节序为Little-Endian.

切片表结构

从x86 Solaris磁盘标签的偏移48H处开始,有192个字节用来描述切片表。切片表由16个切片表项组成,每个切片表项占用12个字节,用来描述每个切片的类型、标志、起始地址和大小,其具体结构参数见表5-11(本表仅列出16个切片表项中的前8个)。

表5-11 切片表的结构参数

字节偏移(相对位置) 字段长度(字节) 字段名和定义
0x00~0x01 2 0号切片的类型(类型说明见表5-5)
0x02~0x03 2 0号切片的标志(01H—切片不能被挂载;80H—切片为只读)
0x04~0x07 4 0号切片的起始扇区号
0x08~0x0B 4 0号切片的扇区总数
0x0C~0x0D 2 1号切片的类型(类型说明见表5-5)
0x0E~0x0F 2 1号切片的标志(01H—切片不能被挂载;80H—切片为只读)
0x10~0x13 4 1号切片的起始扇区号
0x14~0x17 4 1号切片的扇区总数
0x18~0x19 2 2号切片的类型(类型说明见表5-5)
0x1A~0x1B 2 2号切片的标志(01H—切片不能被挂载;80H—切片为只读)
0x1C~0x1F 4 2号切片的起始扇区号
0x20~0x23 4 2号切片的扇区总数
0x24~0x25 2 3号切片的类型(类型说明见表5-5)
0x26~0x27 2 3号切片的标志(01H—切片不能被挂载;80H—切片为只读)
0x28~0x2B 4 3号切片的起始扇区号
0x2C~0x2F 4 3号切片的扇区总数
0x30~0x31 2 4号切片的类型(类型说明见表5-5)
0x32~0x33 2 4号切片的标志(01H—切片不能被挂载;80H—切片为只读)
0x34~0x37 4 4号切片的起始扇区号
0x38~0x3B 4 4号切片的扇区总数
0x3C~0x3D 2 5号切片的类型(类型说明见表5-5)
0x3E~0x3F 2 5号切片的标志(01H—切片不能被挂载;80H—切片为只读)
0x40~0x43 4 5号切片的起始扇区号
0x44~0x47 4 5号切片的扇区总数
0x48~0x49 2 6号切片的类型(类型说明见表5-5)
0x4A~0x4B 2 6号切片的标志(01H—切片不能被挂载;80H—切片为只读)
0x4C~0x4F 4 6号切片的起始扇区号
0x50~0x53 4 6号切片的扇区总数
0x54~0x55 2 7号切片的类型(类型说明见表5-5)
0x56~0x57 2 7号切片的标志(01H—切片不能被挂载;80H—切片为只读)
0x58~0x5B 4 7号切片的起始扇区号
0x5C~0x5F 4 7号切片的扇区总数

从切片表中可以看出,每个切片的起始位置用扇区号描述,而不像Sparc架构中切片的起始地址用柱面号描述。

下面把图5-14所示的x86 Solaris磁盘标签例子中的切片表列举一下,具体见表5-12。

表5-12 x86 Solaris切片表举例

字节偏移(相对位置) 字段长度(字节) 字段名和定义 实际数值
0x00~0x01 2 0号切片的类型 02H,表示根切片
0x02~0x03 2 0号切片的标志 00
0x04~0x07 4 0号切片的起始扇区号 F7D10H,即1 015 056扇区
0x08~0x0B 4 0号切片的扇区总数 2C1410H,即2 888 928个扇区
0x0C~0x0D 2 1号切片的类型 03H,表示Swap切片
0x0E~0x0F 2 1号切片的标志 01H,表示不能被挂载
0x10~0x13 4 1号切片的起始扇区号 17A0H,即6048扇区
0x14~0x17 4 1号切片的扇区总数 F6570H,即1 009 008个扇区
0x18~0x19 2 2号切片的类型 05H,描述整个磁盘
0x1A~0x1B 2 2号切片的标志 00
0x1C~0x1F 4 2号切片的起始扇区号 00,即0扇区
0x20~0x23 4 2号切片的扇区总数 9C6480H,即10 249 344个扇区
0x24~0x25 2 3号切片的类型 00
0x26~0x27 2 3号切片的标志 00
0x28~0x2B 4 3号切片的起始扇区号 未用
0x2C~0x2F 4 3号切片的扇区总数 未用
0x30~0x31 2 4号切片的类型 00
0x32~0x33 2 4号切片的标志 00
0x34~0x37 4 4号切片的起始扇区号 未用
0x38~0x3B 4 4号切片的扇区总数 未用
0x3C~0x3D 2 5号切片的类型 04H,表示/usr/切片
0x3E~0x3F 2 5号切片的标志 00
0x40~0x43 4 5号切片的起始扇区号 3B91F0H,即3 903 984扇区
0x44~0x47 4 5号切片的扇区总数 60D290H,即6 345 360个扇区
0x48~0x49 2 6号切片的类型 00
0x4A~0x4B 2 6号切片的标志 00
0x4C~0x4F 4 6号切片的起始扇区号 未用
0x50~0x53 4 6号切片的扇区总数 未用
0x54~0x55 2 7号切片的类型 00
0x56~0x57 2 7号切片的标志 00
0x58~0x5B 4 7号切片的起始扇区号 未用
0x5C~0x5F 4 7号切片的扇区总数 未用
0x60~0x61 2 8号切片的类型 01H,表示/boot/切片
0x62~0x63 2 8号切片的标志 01H,表示不能被挂载
0x64~0x67 4 8号切片的起始扇区号 00,即0扇区
0x68~0x6B 4 8号切片的扇区总数 7E0H,即2016个扇区
0x6C~0x6D 2 9号切片的类型 09H,表示备用扇区切片
0x6E~0x6F 2 9号切片的标志 01H,表示不能被挂载
0x70~0x73 4 9号切片的起始扇区号 7E0H,即2016扇区
0x74~0x77 4 9号切片的扇区总数 FC0H,即4032个扇区

在x86 Solaris的切片表中,每个切片的开始扇区都是从x86 Solaris文件系统主DOS分区的开始位置计算的。例如,0号切片表项描述的切片开始扇区为1 015 056,该x86 Solaris文件系统主DOS分区的开始位置是6 859 755,所以0号切片在磁盘中的开始扇区号为6859755+1015056=7874811,利用这个值就能找到0号切片在磁盘中的开始地址了。

ASCII明码标签

x86 Solaris的磁盘标签把ASCII明码标签放在VTOC的尾部。该标签中一般会包含磁盘的型号参数及容量参数。在图5-14的例子中,从ASCII明码标签中可以看出该磁盘型号为“DEFAULT”,即“默认”;还能看出磁盘的柱面数为10 168,磁头数为16,每磁道扇区数为63。

磁盘参数

从x86 Solaris磁盘标签扇区的偏移1C8H处开始描述磁盘的参数信息,包括磁盘转速、柱面数、磁头数、每磁道扇区数等。下面把图5-14所示的x86 Solaris磁盘标签的例子中的磁盘参数列举一下,具体见表5-13。

表5-13 磁盘参数举例

字节偏移 字段长度(字节) 字段名和定义 实际数值
0x1C8~0x1CB 4 物理柱面数 27BAH,即10 170个柱面
0x1CC~0x1CF 4 数据区柱面数 27B8H,即10 168个柱面
0x1D0~0x1D3 4 备用柱面数 02H,即两个备用柱面
0x1D4~0x1D7 4 磁头数 10H,即16个磁头
0x1D8~0x1DB 4 每磁道扇区数 3FH,即每磁道63个扇区
0x1DC~0x1DF 4 交错 01H
0x1E2~0x1E3 2 磁盘转速 E10H,即3600转

签名值及校验和

x86 Solaris的磁盘标签中有两个签名值:在偏移0CH~0FH处有4个字节作为磁盘标签的第一个签名值,该值固定为十六进制数值“60 0D DE EE”;在偏移1FCH~1FDH处,有两个字节作为磁盘标签的第二个签名值,该值固定为十六进制的“DA BE”。

x86 Solaris磁盘标签扇区的最后两个字节,是该扇区的校验和。