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所示。
图5-12 x86架构的Solaris磁盘布局
再用WinHex查看一个x86架构的Solaris磁盘的第一个扇区,也就是MBR扇区,如图5-13所示。
图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所示。
图5-14 x86架构Solaris磁盘标签实例
x86架构Solaris系统的磁盘标签大部分空间被卷内容表(VTOC)占据。从该扇区的00偏移处到1C7H偏移处共456个字节都属于VTOC。在VTOC中又包含签名值、切片表及ASCII明码的标签,在VTOC后面是磁盘参数、第二个签名值及校验和。
x86架构Solaris磁盘标签的具体结构参数见表5-10。
表5-10 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磁盘标签扇区的最后两个字节,是该扇区的校验和。