Apple用一个专门的分区存储分区表项,这个分区就是起始于1号扇区的分区表分区。分区表分区是磁盘的第一个分区,由一系列大小为512-byte的分区表项组成,每个分区表项描述一个分区,包括分区的起始扇区号、分区大小、分区类型以及卷名等信息。除0号扇区外,其余的所有扇区一定属于某个分区表项所描述的空间。
分区表项的数据结构及其含义见表2.7。
表2.7 Apple分区表项数据结构及其含义
字节偏移量
(十六进制)
|
字节数
|
说明
|
00~01
|
2
|
签名(0x504D)
|
02~03
|
2
|
保留
|
04~07
|
4
|
总的分区个数
|
08~0B
|
4
|
本分区起始扇区号
|
|
4
|
本分区大小扇区数
|
10~
|
32
|
分区名(ASCII码)
|
30~
|
32
|
分区类型(ASCII码)
|
50~53
|
4
|
本分区内数据起始扇区号
|
54~57
|
4
|
本分区内数据区大小扇区数
|
58~5B
|
4
|
分区状态
|
|
4
|
引导代码起始扇区号
|
60~63
|
4
|
引导代码大小扇区数
|
64~67
|
4
|
引导装载程序地址
|
68~6B
|
4
|
保留
|
|
4
|
引导代码目录指针
|
70~73
|
4
|
保留
|
74~77
|
4
|
引导代码校验和
|
78~87
|
16
|
处理器类型
|
88~1FF
|
376
|
保留
|
提示:分区表的第一个分区表项一定是对分区表分区自身的描述,所有分区表项扇区的起始两个字节一定是“50 4D”。
以下是C代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
/* * fs/partitions/mac.h */ #define MAC_PARTITION_MAGIC 0x504d /* type field value for A/UX or other Unix partitions */ #define APPLE_AUX_TYPE "Apple_UNIX_SVR2" struct mac_partition { __be16 signature; /* expected to be MAC_PARTITION_MAGIC */ __be16 res1; __be32 map_count; /* # blocks in partition map */ __be32 start_block; /* absolute starting block # of partition */ __be32 block_count; /* number of blocks in partition */ char name[32]; /* partition name */ char type[32]; /* string type description */ __be32 data_start; /* rel block # of first data block */ __be32 data_count; /* number of data blocks */ __be32 status; /* partition status bits */ __be32 boot_start; __be32 boot_size; __be32 boot_load; __be32 boot_load2; __be32 boot_entry; __be32 boot_entry2; __be32 boot_cksum; char processor[16]; /* identifies ISA of boot */ /* there is more stuff after this that we don't need */ }; #define MAC_STATUS_BOOTABLE 8 /* partition is bootable */ #define MAC_DRIVER_MAGIC 0x4552 /* Driver descriptor structure, in block 0 */ struct mac_driver_desc { __be16 signature; /* expected to be MAC_DRIVER_MAGIC */ __be16 block_size; __be32 block_count; /* ... more stuff */ }; int mac_partition(struct parsed_partitions *state); |
感谢博主,帮我修复了我的苹果分区表,我的硬盘5TB多,整个过程不到5分钟,太厉害了。