在BSD UNIX体系中,除了Free BSD以外,还有Open BSD和Net BSD也比较常见。这两种BSD系统的分区结构与Free BSD大同小异,这里就以Open BSD为例作简单讲解。
Open BSD分区的特点及命名
在Open BSD系统中分区同样也是一个文件。在访问分区前,需要把分区挂载到某个目录下。Open BSD系统与Free BSD系统的路径组织结构基本相同,读者可以参见表5-14。
Open BSD系统基本也都应用于x86架构上,所以它也使用MBR磁盘结构,用主DOS分区表在磁盘上划分出相应区域,然后在这些区域内建立自己的Open BSD分区。主DOS分区表所划分的区域可以安装Windows系列的操作系统,也就是说,Open BSD系统既可以访问自己的分区,也可以访问FAT、NTFS等Windows系统下的文件系统。
Open BSD系统并不能像Free BSD系统那样可以通过主DOS分区表直接访问Windows的分区。Open BSD系统要想访问Windows的分区,必须在Open BSD的磁盘标签内再一次通过自己的方式描述Windows系统分区,才能去访问这些分区。
再举个例子进一步说明。假设有一块硬盘,它的分区表中描述了4个主DOS分区,分别是FAT分区、NTFS分区、Free BSD分区和Open BSD分区,这4个分区的类型分别为06H、07H、A5H和A6H,如图5-24所示。
图5-24 硬盘中的4个主DOS分区
这块硬盘中安装了3种操作系统,分别为Windows 2000、Free BSD和Open BSD。在计算机启动时用户可以通过一个引导窗口来选择需要启动的操作系统。当用户进入Free BSD系统后,Free BSD系统可以直接利用MBR中的主DOS分区表访问FAT分区和NTFS分区,而不需要用磁盘标签再一次描述这两个分区;而当用户进入Open BSD系统时,该系统却不能直接利用MBR中的主DOS分区表访问FAT分区和NTFS分区,而需要在自己的磁盘标签中再一次描述这两个分区,然后才能访问它们,这也就是说,Open BSD系统的磁盘标签可以跳出它所在的DOS分区而去描述这个DOS分区以外的其他分区。
Open BSD系统中没有“切片(Slice)”的概念,它把自己的Open BSD结构的分区和其他主DOS分区都统一称为“分区(Partition)”。这一点也跟FreeBSD系统有很大区别。
另外,Open BSD系统内核被加载后,DOS分区将会被忽略。DOS分区一般位于Open BSD分区之前,因此,如果同时存在Windows和Open BSD两种操作系统,而用户要想通过Open BSD系统访问一个FAT分区,那么这个FAT分区必须既在DOS分区表中进行了描述,同时也在BSD的磁盘标签中进行了描述。
Open BSD也将每个分区视为特殊设备文件,对分区的命名类似于Free BSD。主ATA设备一般为命名为/dev/wd0。Open BSD没有切片的概念,直接用字母对分区进行命名,第一个Open BSD分区为/dev/wd0a,第二个为分区/dev/wd0b。和Free BSD一样,第一个分区通常是根分区,第二个是交换分区,但第三个分区一般是指整个磁盘,而不像Free BSD中,第三个分区只是指一个切片或者一个主DOS分区。
Open BSD磁盘布局
Open BSD系统应用于x86架构上,所以Open BSD磁盘的第一个扇区为MBR。MBR中会有几个主DOS分区,这些主DOS分区也被Open BSD系统称为分区。分区中可以是FAT文件系统,也可以是NTFS,但至少一个分区给Open BSD分区使用,或者全部的分区都用于Open BSD分区。描述Open BSD区域的主DOS分区表项的分区类型被定义为十六进制数值“A6”。
综上所述,一个完整的Open BSD系统磁盘布局的例子如图5-25所示。
图5-25 Open BSD系统的磁盘布局
再用WinHex查看一个Open BSD系统磁盘的第一个扇区,也就是MBR扇区,如图5-26所示。
图5-26 Open BSD系统磁盘的MBR扇区
可以看出Open BSD磁盘的MBR扇区与Windows下的MBR也是很像的。在该MBR的分区表中,有一个类型为“06H”的主DOS分区,还有一个类型为“A6H”的主DOS分区,“A6H”就代表Open BSD系统。Open BSD系统把这两个主DOS分区表项所描述的空间都称为分区。在第二个分区的内部,是Open BSD系统的分区结构。
Open BSD分区的结构
在类型为“A6H”的主DOS分区内,是Open BSD系统的分区。这部分空间内的第一个扇区用于存放系统的引导程序,第二个扇区是Open BSD分区的磁盘标签,第三个扇区往后依然是系统的引导程序。因为0号扇区存放不下所有的引导程序,跨过被磁盘标签占用的1号扇区继续存放引导程序,直到文件系统的超级块开始之前。超级块一般开始于16号扇区。
下面就以图5-26中分区表第二项所描述的Open BSD分区为例,具体讲解Open BSD分区的结构。
x86架构下的Open BSD系统也使用Little-Endian字节序。
这个主DOS分区开始于“00 28 B1 26”扇区,十进制为2 666 790,所以Open BSD分区中的磁盘标签就位于下一个扇区,即2 666 791号扇区。用WinHex跳转到此扇区,其内容如图5-27所示。
图5-27 Open BSD磁盘标签实例
Open BSD磁盘标签的结构与Free BSD类似,具体结构参数请参见表5-15,这里就不再重复了。
磁盘信息
从Open BSD磁盘标签的偏移04H处开始描述磁盘的参数信息,包括磁盘转速、柱面数、磁头数、每磁道扇区数等。下面把图5-27所示的Open BSD磁盘标签的例子中的磁盘信息列举一下,具体见表5-20。
表5-20 Open BSD磁盘参数举例
字节偏移 | 字段长度(字节) | 字段名和定义 | 实际数值 |
0x04~0x05 | 2 | 驱动器类别 | 05H |
0x06~0x07 | 2 | 驱动器子类别 | 00 |
0x08~0x17 | 16 | 驱动器类别名 | ESDI.IDE |
0x18~0x27 | 16 | 捆绑ID名称 | Quantum 5127AT |
0x28~0x2B | 4 | 每扇区字节数 | 0200H,即每512字节 |
0x2C~0x2F | 4 | 每磁道扇区数 | 3FH,即每磁道63扇区 |
0x30~0x33 | 4 | 每柱面磁道数 | 10H,即每柱面16个磁道 |
0x34~0x37 | 4 | 每单元柱面数 | 1C7AH,即每单元7290个柱面 |
0x38~0x3B | 4 | 每柱面扇区数 | 3F0H,即每柱面1008个扇区 |
0x3C~0x3F | 4 | 每单元扇区数 | 98D300H,即10 015 488个扇区 |
0x40~0x41 | 2 | 每磁道备用扇区数 | 00 |
0x42~0x43 | 2 | 每柱面备用扇区数 | 00 |
0x44~0x47 | 4 | 每单元间隔柱面数 | 00 |
0x48~0x49 | 2 | 磁盘转速 | 1518H,即5400rpm |
0x4A~0x4B | 2 | 物理扇区交错 | 01 |
0x4C~0x4D | 2 | 磁道倾斜 | 00 |
0x4E~0x4F | 2 | 柱面倾斜 | 00 |
0x50~0x53 | 4 | 磁头转换微秒数 | 00 |
0x54~0x57 | 4 | 道至道微秒数 | 00 |
0x58~0x5B | 4 | 标志 | 00 |
0x5C~0x6F | 20 | 驱动器详细信息 | 无 |
分区表
Open BSD磁盘标签的分区表中预留了16个分区表项的位置。下面从图5-27所示的Open BSD磁盘标签的例子中具体分析一下分区表内的数值。在磁盘标签的偏移8AH~8BH处描述该磁盘标签中包含的分区表项数。当前值为10H,说明本例的磁盘标签中只分配了16个表项的空间。再具体看分区表中,目前使用了四个表项,第一个表项描述了一个文件系统分区,其具体信息见表5-21。
表5-21 Open BSD分区表第一个表项参数
字节偏移(相对偏移) | 字段长度(字节) | 字段名和定义 | 实际数值 |
0x00~0x03 | 4 | 分区总扇区数 | 66E5E0H,即6 743 520个扇区 |
0x04~0x07 | 4 | 分区起始扇区号(以磁盘0扇区为起点) | 28B126H,即起始于物理磁盘的2 666 790号扇区 |
0x08~0x0B | 4 | 文件系统中每段字节数 | 400H,即1024字节 |
0x0C~0x0C | 1 | 文件系统类型(具体见表5-17) | 07H |
0x0D~0x0D | 1 | 文件系统每块包含的段数 | 08H,即8个段 |
0x0E~0x0F | 2 | 文件系统每柱面组的柱面数 | 10H,即16个柱面 |
第二个表项描述了一个交换分区,具体信息见表5-22。
表5-22 Open BSD分区表第二个表项参数
字节偏移(相对偏移) | 字段长度(字节) | 字段名和定义 | 实际数值 |
0x00~0x03 | 4 | 分区总扇区数 | 93A80H,即604 800个扇区 |
0x04~0x07 | 4 | 分区起始扇区号(以磁盘0扇区为起点)8F9706H,即起始于物理磁盘的9 410 310号扇区 | |
0x08~0x0B | 4 | 文件系统中每段字节数 | 400H,即1024字节 |
0x0C~0x0C | 1 | 文件系统类型(具体见表5-17) | 01H |
0x0D~0x0D | 1 | 文件系统每块包含的段数 | 08H,即8个段 |
0x0E~0x0F | 2 | 文件系统每柱面组的柱面数 | 10H,即16个柱面 |
第三个表项描述了整个磁盘,具体信息见表5-23。
表5-23 Open BSD分区表第三个表项参数
字节偏移(相对偏移) | 字段长度(字节) | 字段名和定义 | 实际数值 |
0x00~0x03 | 4 | 分区总扇区数 | 98D300H,即10 015 488个扇区 |
0x04~0x07 | 4 | 分区起始扇区号(以磁盘0扇区为起点) | 00,即起始于物理磁盘的0号扇区 |
0x08~0x0B | 4 | 文件系统中每段字节数 | 00 |
0x0C~0x0C | 1 | 文件系统类型(具体见表5-17) | 00 |
0x0D~0x0D | 1 | 文件系统每块包含的段数 | 00 |
0x0E~0x0F | 2 | 文件系统每柱面组的柱面数 | 00 |
第四个表项未用,第五个表项描述了一个FAT分区,具体信息见表5-24。
表5-24 Open BSD分区表第五个表项参数
字节偏移(相对偏移) | 字段长度(字节) | 字段名和定义 | 实际数值 |
0x00~0x03 | 4 | 分区总扇区数 | 28B0E7H,即2 666 727个扇区 |
0x04~0x07 | 4 | 分区起始扇区号(以磁盘0扇区为起点) | 3FH,即起始于物理磁盘的63号扇区 |
0x08~0x0B | 4 | 文件系统中每段字节数 | 00 |
0x0C~0x0C | 1 | 文件系统类型(具体见表5-17) | 08 |
0x0D~0x0D | 1 | 文件系统每块包含的段数 | 00 |
0x0E~0x0F | 2 | 文件系统每柱面组的柱面数 | 00 |
签名值及校验和
Open BSD磁盘标签的签名值与Free BSD一样,在偏移00H~03H处有4个字节作为磁盘标签的第一个签名值,该值固定为十六进制数值“57 45 56 82”;在偏移84H~87H处,有4个字节作为磁盘标签的第二个签名值,与第一个签名值一样,也是固定为十六进制的“57 45 56 82”。
Open BSD磁盘标签扇区偏移88H~89H处的两个字节,是该扇区的校验和。