在传统的PowerPC平台的Apple电脑上,采用APM分区管理方式;而在Intel平台上,Apple电脑可以支持APM分区、GPT分区和MBR磁盘分区,但MBR磁盘分区仅应用在外置硬盘或者优盘上,这样可以方便同PC转移数据。

Mac OS X不能从MBR磁盘分区的硬盘上启动系统。

APM即Apple Partition Map(苹果分区映射),是Apple电脑独有的分区结构,最初用在PowerPC平台的Apple电脑上,采用Big-Endian的字节序。虽然从2006年起Apple电脑开始使用Intel所制造的CPU,但APM分区结构依然在使用。

Apple磁盘的第一个扇区

Apple磁盘的第一个扇区既不是引导扇区,也不是分区表,而是一个驱动程序描述符,该描述符中记录着签名值、设备的块大小、设备总块数。

这里所说的设备“块”其实就是指扇区。

另外,驱动程序描述符中还记录了描述符的数目和驱动程序描述符表等,具体结构参数见表6-2。

表6-2 驱动程序描述符的结构参数

字节偏移 字段长度(字节) 字段名和定义
0x00~0x01 2 签名值
0x02~0x03 2 每扇区字节数(即设备的块大小)
0x04~0x07 4 扇区总数(即设备的总块数)
0x08~0x09 2 设备类型
0x0A~0x0B 2 设备ID
0x0C~0x0F 4 驱动程序数据
0x10~0x11 2 驱动程序描述符个数
0x12~0x51 64 驱动程序描述符表(共8个表项,每项8字节,具体见表6-3)
0x52~0x1FF 430 未用

在驱动程序描述符表中共有8个表项,每个表项占用8字节,描述了驱动程序的开始地址、大小、类型等信息,具体见表6-3。

表6-3 驱动程序描述符表项的结构

字节偏移(相对偏移) 字段长度(字节) 字段名和定义
0x00~0x03 4 驱动程序起始扇区
0x04~0x05 2 驱动程序扇区总数
0x06~0x07 2 驱动程序系统类型

下面给出一个驱动程序描述符的实例,如图6-1所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-1 驱动程序描述符扇区

该扇区为一个Apple磁盘0号扇区的部分内容,扇区的后部全部为0数据,在此省略。

这就是一个驱动程序描述符扇区,其参数的具体数值见表6-4。

表6-4 图6-1的驱动程序描述符具体参数值

字节偏移 字段长度(字节) 字段名和定义 数值
0x00~0x01 2 签名值 “45 52”
0x02~0x03 2 每扇区字节数(即设备的块大小) 512
0x04~0x07 4 扇区总数(即设备的总块数) 143 374 650
0x08~0x09 2 设备类型 00
0x0A~0x0B 2 设备ID 00
0x0C~0x0F 4 驱动程序数据 00
0x10~0x11 2 驱动程序描述符个数 4
0x12~0x19 8 驱动程序描述符表项1 见表6-5
0x1A~0x21 8 驱动程序描述符表项2 见表6-6
0x22~0x29 8 驱动程序描述符表项3 见表6-7
0x2A~0x31 8 驱动程序描述符表项4 见表6-8
0x32~0x39 8 驱动程序描述符表项5 当前未用
0x3A~0x41 8 驱动程序描述符表项6 当前未用
0x42~0x49 8 驱动程序描述符表项7 当前未用
0x4A~0x51 8 驱动程序描述符表项8 当前未用
0x52~0x1FF 430 未用 00

Apple系统使用Big-Endian字节序。

驱动程序描述符表项1的具体参数见表6-5。

表6-5 驱动程序描述符表项1的参数值

字节偏移 字段长度(字节) 字段名和定义 数值
0x00~0x03 4 驱动程序起始扇区 64
0x04~0x05 2 驱动程序扇区总数 23
0x06~0x07 2 驱动程序系统类型 01H

驱动程序描述符表项2的具体参数见表6-6。

表6-6 驱动程序描述符表项2的参数值

字节偏移 字段长度(字节) 字段名和定义 数值
0x00~0x03 4 驱动程序起始扇区 120
0x04~0x05 2 驱动程序扇区总数 36
0x06~0x07 2 驱动程序系统类型 FFFFH

驱动程序描述符表项3的具体参数见表6-7。

表6-7 驱动程序描述符表项3的参数值

字节偏移 字段长度(字节) 字段名和定义 数值
0x00~0x03 4 驱动程序起始扇区 176
0x04~0x05 2 驱动程序扇区总数 21
0x06~0x07 2 驱动程序系统类型 0701H

驱动程序描述符表项4的具体参数见表6-8。

表6-8 驱动程序描述符表项4的参数值

字节偏移 字段长度(字节) 字段名和定义 数值
0x00~0x03 4 驱动程序起始扇区 232
0x04~0x05 2 驱动程序扇区总数 34
0x06~0x07 2 驱动程序系统类型 F8FFH

驱动程序描述符扇区的结构也可以通过WinHex模板来查看,不过WinHex没有提供该模板,需要自行编写,如图6-2所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-2 驱动程序描述符模板

APM分区布局

APM分区结构与MBR磁盘分区结构完全不一样,APM分区结构很简单,而且还可以创建任意多个分区,并且分区信息都存放在一些连续的扇区内,这一点也不像MBR磁盘分区的信息那么松散。

APM分区信息是通过分区映射来描述的,分区映射表开始于磁盘的第二个扇区,即1号扇区,映射表中没有引导代码,这一点也跟MBR磁盘分区表不同。分区映射表中的每个映射表项用来描述一个分区,而每个映射表项占用1个扇区,即512字节。

Apple磁盘中的APM分区分为四种类型:第一种是分区映射表分区,用来管理分区映射表自身;第二种是设备的驱动程序分区,用来管理物理设备;第三种是文件系统分区,用来管理操作系统及用户的文件;第四种是空闲空间分区,用来管理未分配的空间。

APM分区的具体结构如图6-3所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-3 APM分区的结构

APM分区映射表结构

APM分区映射表由若干个映射表项构成,其中第一个映射表项是分区映射表自身的表项,在该表项中记录着分区映射表的总大小以及分区的数目。

分区映射表分区自身的表项起始于Apple磁盘的第二个扇区,并且连续占用若干个扇区。该磁盘中所有分区都在这个映射表中描述,每个分区映射的描述信息称为一个映射表项,占用512字节,这512字节的含义见表6-9。

表6-9 苹果分区表项的含义

苹果(Apple)电脑APM分区结构分析-数据恢复迷

下面对各参数进一步解释:

①0x00~0x01:签名值。为分区映射表项的标识符,其值一般为504DH,一些早期版本还在用5453H。

②0x02~0x03:保留。该位置保留不用。

③0x04~0x07:分区个数。用来表示分区的数目。

④0x08~0x0B:分区的起始扇区。记录了该映射表项所描述的分区在当前硬盘中的物理地址。

⑤0x0C~0x0F:分区的总扇区数。记录分区的总大小,以扇区为单位。

⑥0x10~0x02F:分区的名称。记录了该分区的名字,总长度为32字节。

⑦0x30~0x4F:分区类型。该字符串表示存储区的类型,以“Apple_”开头的名字被苹果电脑保留。表6-10表述了Apple电脑常用的标准分区类型。

表6-10 Apple电脑常用的标准分区类型

字符串 60含义
Apple_partition_map 该存储区中包含了分区映射表
Apple Driver 该存储区中有设备驱动信息
Apple_Driver43 该存储区有SCSI管理器4.3的驱动
Apple_MFS 该存储区的文件系统是Macintosh的默认文件系统
Apple_HFS 该存储区的文件系统是HFS
Apple_UNIX_SVR2 该存储区用UNIX的文件系统
Apple_PRODOS 该存储区用ProDOS的文件系统
Apple Free 该存储区没有被使用
Apple Scratch 该存储区为空

⑧0x50~0x53:数据区起始扇区号。记录了文件系统数据的逻辑扇区号,此参数将被操作系统所利用,像A/UX之类的操作系统的文件系统并不是从该分区逻辑扇区号0开始的。

⑨0x54~0x57:数据区总扇区数。表示文件系统数据域的大小,以扇区为单位。它和“数据区起始扇区号”的区域衔接起来,因为有些操作系统的文件系统并不是从该分区逻辑扇区号0开始的。

⑩0x58~0x5B:分区的状态。分区的状态是在A/UX系统Macintosh系统中使用的,A/UX系统是Apple电脑较早采用的操作系统,现在已不再使用。分区的状态见表6-11。

表6-11 分区的状态

字符串 含义
0x00000001 分区映射表有效(仅在A/UX系统中使用)
0x00000002 分区已分配(仅在A/UX系统中使用)
0x00000004 分区在使用中(仅在A/UX系统中使用)
0x00000008 分区包含引导信息(仅在A/UX系统中使用)
0x00000010 分区可读(仅在A/UX系统中使用)
0x00000020 分区可写(用于Macintosh和A/UX)
0x00000040 引导代码位置独立(仅在A/UX系统中使用)
0x00000100 分区包含链式兼容的驱动器(仅在Macintosh系统中使用)
0x00000200 分区包含一个实际的驱动器(仅在Macintosh系统中使用)
0x00000400 分区包含一个链式驱动器(仅在Macintosh系统中使用)
0x40000000 启动时自动加载(仅在Macintosh系统中使用)
0x80000000 启动分区(仅在Macintosh系统中使用)

⑪0x5C~0x5F:引导代码起始扇区。包含引导代码第一个扇区的逻辑地址。

⑫0x60~0x63:引导代码扇区数。记录引导代码的大小。

⑬0x64~0x67:引导代码装载地址。记录了引导代码在内存中的驻留位置。

⑭0x68~0x6B:保留。

⑮0x6C~0x6F:引导区装载指针。当在内存中读取了引导代码后,启动程序获得控制权,它记录了该程序在内存中的位置。

⑯0x70~0x73:保留。

⑰0x74~0x77:引导代码校验和。记录了引导代码的检测次数。启动文件在读取了代码后计算出检测次数与该值进行比较。

⑱0x78~0x87:处理器类型。一组可选的字符串,当处理器执行引导代码时,用来标示该处理器的类型。已知的处理器型号有68 000、68 020、68 030和68 040。

⑲0x88~0x1FF:保留。

分区映射表分区

下面来看一个分区映射表分区的实际例子,它的映射表项位于Apple磁盘的1号扇区,其部分内容如图6-4所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-4 分区映射表分区自身的表项

这就是Apple磁盘APM分区映射表的第一个表项,也就是描述分区映射表自身的一个表项。

Apple系统使用Big-Endian字节序。

分区映射表的结构也可以通过WinHex模板来查看,不过WinHex中没有提供该模板,需要自行编写,如图6-5所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-5 分区映射表的结构模板

驱动程序分区

Apple电脑用给每个驱动器创建分区的方式来管理这些驱动器设备,所以在苹果系统的主磁盘中有很多为驱动器创建的分区。

在本例中的Apple磁盘中,有6个设备的驱动程序分区。这里选择一个ATA硬盘的驱动程序分区为例进行讲解,它的映射表项位于Apple磁盘的5号扇区,其部分内容如图6-6所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-6 ATA硬盘驱动程序分区的映射表项

这就是Apple磁盘APM分区映射表的第五个表项,用来描述Apple电脑中的一块ATA硬盘,该表项中的具体数值如图6-7所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-7 驱动程序分区的映射表项模板

文件系统分区

Apple电脑的文件系统分区用来管理操作系统及用户的文件。Apple磁盘中一般有一个到多个文件系统分区。

在本例中的Apple磁盘中,只有1个文件系统分区,它的映射表项位于Apple磁盘的9号扇区,其部分内容如图6-8所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-8 文件系统分区的映射表项

这就是Apple磁盘APM分区映射表的第九个表项,用来描述Apple电脑中的一个文件系统分区,该表项中的具体数值如图6-9所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-9 文件系统分区的映射表项模板

空闲空间分区

Apple电脑的空闲空间分区用来管理未分配的磁盘空间。因为磁盘中的所有空间不一定都分配给分区使用,往往还会剩余一部分,这部分就用一个空闲空间分区进行管理。

在本例中的Apple磁盘中也有1个空闲空间分区,它的映射表项位于Apple磁盘的10号扇区,其部分内容如图6-10所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-10 空闲空间分区的映射表项

这就是Apple磁盘APM分区映射表的第十个表项,也是最后一个表项了,它用来描述Apple磁盘中的未分配空间,该表项中的具体数值如图6-11所示。

苹果(Apple)电脑APM分区结构分析-数据恢复迷

图6-11 空闲空间分区的映射表项模板