Sparc Solaris磁盘布局
在Sparc架构的Solaris系统中,磁盘标签位于磁盘的第一个扇区,按照LBA地址编号就是0扇区,随后跟着的1~15号扇区包含用来存储系统的引导程序,0~15号这16个扇区其实也属于磁盘中的第一个切片,是该切片上文件系统的引导块。从16号扇区开始是第一个文件系统的超级块。第一个切片结束后紧跟着是第二个切片的开始,第二个切片结束后紧跟着是第三个切片的开始,就这样排列直到磁盘末尾。
一个完整的Sparc架构的Solaris磁盘布局的例子如图5-2所示。
图5-2 Sparc架构的Solaris磁盘布局
Sparc Solaris的磁盘标签结构
磁盘标签是Sparc架构Solaris非常重要的结构,它位于硬盘的第一个扇区,大致由6个部分组成,具体为ASCII明码标签、卷内容表(VTOC)、磁盘参数、切片表、签名值、校验和,如图5-3所示。
图5-3 Sparc Solaris的磁盘标签结构实例
Sparc Solaris的磁盘标签结构参数见表5-3。
表5-3 Sparc Solaris的磁盘标签结构参数
注意:Sparc架构的Solaris存储数据的字节序为Big-Endian。
ASCII明码标签
Sparc Solaris的磁盘标签扇区首先用128个字节描述当前磁盘的ASCII明码标签,该标签中一般会包含磁盘的型号参数及容量参数。在图5-3的例子中,从ASCII明码标签中可以看出该磁盘型号为“ST3146707LC”,说明这是一块品牌为希捷、容量为146GB的SCSI硬盘;还能看出磁盘的柱面数为35 627、磁头数为64、每磁道扇区数为128。
卷内容表(VTOC)
从Sparc Solaris磁盘标签扇区的偏移80H处开始,有134个字节用来描述磁盘中切片的个数、标志、类型、时间戳等信息,这134个字节被称为卷内容表(Volume Table of Contents,VTOC),其具体结构参数见表5-4。
表5-4 卷内容表的结构参数
字节偏移(相对位置) | 字段长度(字节) | 字段名和定义 |
0x00~0x03 | 4 | 版本(0x01) |
0x04~0x0B | 8 | 卷名 |
0x0C~0x0D | 2 | 切片数 |
0x0E~0x0F | 2 | 0号切片的类型(类型说明见表5-5) |
0x10~0x11 | 2 | 0号切片的标志(01H—切片不能被挂载;80H—切片为只读) |
0x12~0x13 | 2 | 1号切片的类型(类型说明见表5-5) |
0x14~0x15 | 2 | 1号切片的标志(01H—切片不能被挂载;80H—切片为只读) |
0x16~0x17 | 2 | 2号切片的类型(类型说明见表5-5) |
0x18~0x19 | 2 | 2号切片的标志(01H—切片不能被挂载;80H—切片为只读) |
0x1A~0x1B | 2 | 3号切片的类型(类型说明见表5-5) |
0x1C~0x1D | 2 | 3号切片的标志(01H—切片不能被挂载;80H—切片为只读) |
0x1E~0x1F | 2 | 4号切片的类型(类型说明见表5-5) |
0x20~0x21 | 2 | 4号切片的标志(01H—切片不能被挂载;80H—切片为只读) |
0x22~0x23 | 2 | 5号切片的类型(类型说明见表5-5) |
0x24~0x25 | 2 | 5号切片的标志(01H—切片不能被挂载;80H—切片为只读) |
0x26~0x27 | 2 | 6号切片的类型(类型说明见表5-5) |
0x28~0x29 | 2 | 6号切片的标志(01H—切片不能被挂载;80H—切片为只读) |
0x2A~0x2B | 2 | 7号切片的类型(类型说明见表5-5) |
0x2C~0x2D | 2 | 7号切片的标志(01H—切片不能被挂载;80H—切片为只读) |
0x2E~0x39 | 12 | 引导信息 |
0x3A~0x3B | 2 | 保留 |
0x3C~0x3F | 4 | 签名值(60 0D DE EE) |
0x40~0x65 | 38 | 保留 |
0x66~0x69 | 4 | 0号切片的时间戳 |
0x6A~0x6D | 4 | 1号切片的时间戳 |
0x6E~0x71 | 4 | 2号切片的时间戳 |
0x72~0x75 | 4 | 3号切片的时间戳 |
0x76~0x79 | 4 | 4号切片的时间戳 |
0x7A~0x7D | 4 | 5号切片的时间戳 |
0x7E~0x81 | 4 | 6号切片的时间戳 |
0x82~0x85 | 4 | 7号切片的时间戳 |
VTOC中每个切片的类型参数并不像其他分区体系那样为每个分区指明文件系统类型,而是用来说明该切片的挂载点。挂载点不同,操作系统将会使用不同的配置文件,尽管一个切片挂载后,事实上已经挂载上了一个文件系统。例如切片类型设置为/usr/并不意味着一定要被挂载为/usr/。各种切片类型值的描述见表5-5。
表5-5 切片类型值描述
切片类型值 | 挂载点及说明 | 切片类型值 | 挂载点及说明 |
0x00 | 未指派 | 0x06 | /stand/切片 |
0x01 | /boot/切片 | 0x07 | /var/切片 |
0x02 | /切片 | 0x08 | /home/切片 |
0x03 | Swap切片 | 0x09 | 备份扇区切片 |
0x04 | /usr/切片 | 0x0A | 文件系统缓冲切片 |
0x05 | 整个磁盘 |
下面把图5-3所示的Sparc Solaris磁盘标签的例子中的VTOC重点参数列举一下,具体见表5-6。
表5-6 VTOC参数举例
字节偏移(相对位置) | 字段长度(字节) | 字段名和定义 | 实际数值 |
0x00~0x03 | 4 | 版本 | 01H |
0x04~0x0B | 8 | 卷名 | 无 |
0x0C~0x0D | 2 | 切片数 | 08H,即有8个切片 |
0x0E~0x0F | 2 | 0号切片的类型 | 02H,表示根切片 |
0x10~0x11 | 2 | 0号切片的标志 | 00 |
0x12~0x13 | 2 | 1号切片的类型 | 03H,表示Swap切片 |
0x14~0x15 | 2 | 1号切片的标志 | 01H,表示不能被挂载 |
0x16~0x17 | 2 | 2号切片的类型 | 05H,描述整个磁盘 |
0x18~0x19 | 2 | 2号切片的标志 | 01H,表示不能被挂载 |
0x1A~0x1B | 2 | 3号切片的类型 | 00 |
0x1C~0x1D | 2 | 3号切片的标志 | 00 |
0x1E~0x1F | 2 | 4号切片的类型 | 00 |
0x20~0x21 | 2 | 4号切片的标志 | 00 |
0x22~0x23 | 2 | 5号切片的类型 | 00 |
0x24~0x25 | 2 | 5号切片的标志 | 00 |
0x26~0x27 | 2 | 6号切片的类型 | 04H,表示/usr/切片 |
0x28~0x29 | 2 | 6号切片的标志 | 00 |
0x2A~0x2B | 2 | 7号切片的类型 | 00 |
0x2C~0x2D | 2 | 7号切片的标志 | 00 |
0x3C~0x3F | 4 | 签名值 | 60 0D DE EE |
磁盘参数
从Sparc Solaris磁盘标签扇区的偏移1A4H处开始,有20个字节用来描述磁盘的参数信息,包括磁盘转速、柱面数、磁头数、每磁道扇区数等。下面把图5-3所示的Sparc Solaris磁盘标签的例子中的磁盘参数列举一下,具体见表5-7。
表5-7 磁盘参数举例
字节偏移 | 字段长度(字节) | 字段名和定义 | 实际数值 |
0x1A4~0x1A5 | 2 | 磁盘转速 | 1C20H,即7200rpm |
0x1A6~0x1A7 | 2 | 物理柱面数 | 8B2DH,即35 629个柱面 |
0x1A8~0x1A9 | 2 | 备用柱面数 | 00 |
0x1AE~0x1AF | 2 | 交错 | 01 |
0x1B0~0x1B1 | 2 | 数据区柱面数 | 8B2BH,即35 627个柱面 |
0x1B2~0x1B3 | 2 | 备用柱面数 | 02H,即两个备用柱面 |
0x1B4~0x1B5 | 2 | 磁头数 | 40H,即64个磁头 |
0x1B6~0x1B7 | 2 | 每磁道扇区数 | 80H,即每磁道128个扇区 |
切片表
从Sparc Solaris磁盘标签扇区的偏移1BCH处开始,有64个字节用来描述切片表,切片表由8个切片表项组成,每个切片表项占用8个字节,用来描述每个切片的起始地址和大小,其具体结构参数见表5-8。
表5-8 切片表的结构参数
下面把图5-3所示的Sparc Solaris磁盘标签的例子中的切片表列举一下,具体见表5-9。
表5-9 切片表举例
字节偏移(相对位置) | 字段长度(字节) | 字段名和定义 | 实际数值 |
0x00~0x03 | 4 | 0号切片的起始柱面号 | 未用 |
0x04~0x07 | 4 | 0号切片的扇区总数 | 未用 |
0x08~0x0B | 4 | 1号切片的起始柱面号 | 未用 |
0x0C~0x0F | 4 | 1号切片的扇区总数 | 未用 |
0x10~0x13 | 4 | 2号切片的起始柱面号 | 00,即开始于0号柱面 |
0x14~0x17 | 4 | 2号切片的扇区总数 | 116560H,即291 856 384个扇区 |
0x18~0x1B | 4 | 3号切片的起始柱面号 | 00,即开始于0号柱面 |
0x1C~0x1F | 4 | 3号切片的扇区总数 | 810C0H,即135 315 456个扇区 |
0x20~0x23 | 4 | 4号切片的起始柱面号 | 未用 |
0x24~0x27 | 4 | 4号切片的扇区总数 | 未用 |
0x28~0x2B | 4 | 5号切片的起始柱面号 | 未用 |
0x2C~0x2F | 4 | 5号切片的扇区总数 | 未用 |
0x30~0x33 | 4 | 6号切片的起始柱面号 | 4086H,即开始于16 518号柱面 |
0x34~0x37 | 4 | 6号切片的扇区总数 | 954A0H,即156 540 928个扇区 |
0x38~0x3B | 4 | 7号切片的起始柱面号 | 未用 |
0x3C~0x3F | 4 | 7号切片的扇区总数 | 未用 |
在Sparc Solaris的切片表中,用柱面号来描述切片的开始地址。在实际分析时,需要把柱面号转换为LBA地址的扇区号,具体转换方法为柱面号×磁头数×每磁道扇区数。
以表5-9中的6号切片为例,该切片起始于16 158号柱面,要把它转换为扇区号,先从磁盘标签的磁盘参数中查看磁头数和每磁道扇区数的值,分别为64和128,则16 158号柱面对应的扇区号计算方法为16158×64×128=135315456,利用这个值就能找到6号切片的开始地址了。
签名值及校验和
从Sparc Solaris磁盘标签扇区的偏移1FCH处开始,有两个字节作为磁盘标签的签名值,该值固定为十六进制的“DA BE”。
Sparc Solaris磁盘标签扇区的最后两个字节,是该扇区的校验和。