Apple Partition Map
Apple Partition Map (APM) is a partition scheme used to define the low-level organization of data on disks formatted for use with 68k and PowerPC Macintosh computers. It was introduced with the Macintosh II.
Disks using the Apple Partition Map are divided into logical blocks, with 512 bytes usually belonging to each block. The first block, Block 0, contains an Apple-specific data structure called “Driver Descriptor Map” for the Macintosh Toolbox ROM to load driver updates and patches before loading from a MFS or HFS partition. Because APM allows 32 bits worth of logical blocks, the historical size of an APM formatted disk using small blocks is limited to 2 TiB.
The Apple Partition Map maps out all space used (including the map) and unused (free space) on disk, unlike the minimal x86 master boot record that only accounts for used non-map partitions. This means that every block on the disk (with the exception of the first block, Block 0) belongs to a partition.
For accessing volumes, both APM and GUID partitions can be used in a standard manner with Mac OS X 10.4 and higher. For starting an operating system, PowerPC-based systems can only boot from APM disks whereas Intel-based systems generally only boot from GUID disks.
However, Intel-based models that came with Mac OS X Tiger or Leopard preinstalled are able to boot from both APM and GUID disks. This is due to the installation media for these versions of Mac OS X, which are APM partitioned in order to be compatible with PowerPC-based systems. Nevertheless, the installation of Mac OS X on an Intel-based Mac demands a GUID partitioned disk or will refuse to continue. Apple never officially supported booting from an internal APM disk on an Intel-based system, but there is an official Apple document describing how to set up a dual bootable external APM disk for use with PowerPC and Intel.
Each entry of the partition table is the size of one data block, which is normally 512 bytes. Each partition entry on the table is the size of one block or sector of data. Because the partition table itself is also a partition, the size of this first partition limits the number of entries to the partition table itself.
The normal case is that 64 sectors (64 × 512 = 32 KB) are used by the Apple Partition Map: one block for the Driver Descriptor Map as Block 0, one block for the partition table itself and 62 blocks for a maximum of 62 data partitions.
Each partition entry includes the starting sector and the size, but also a name, a type, a position of the data area and possible boot code. It also includes the total number of partitions in that partition table. This ensures that, after reading the first partition table entry, the firmware is aware of how many blocks more to read from the media in order to have processed every partition table entry. All entries are in big-endian byte-order.
|0||0x0000||1||signature1 (ASCII value "P")||No|
|1||0x0001||1||signature2 (ASCII value "M")||No|
|4–7||0x0004||4||number of partitions (total)||Yes|
|8–11||0x0008||4||starting sector of partition||Yes|
|12–15||0x000C||4||size of partition (in sectors)||Yes|
|16–47||0x0010||32||name of partition (fixed ASCII right-side NULL padded)||No|
|48–79||0x0030||32||type of partition (fixed ASCII right-side NULL padded)||No|
|80–83||0x0050||4||starting sector of data area in partition||No|
|84–87||0x0054||4||size of data area in partition (in sectors)||No|
|88–91||0x0058||4||status of partition||No|
|92–95||0x005C||4||starting sector of boot code||No|
|96–99||0x0060||4||size of boot code (in sectors)||No|
|100–103||0x0064||4||address of bootloader code||No|
|108–111||0x006C||4||boot code entry point||No|
|116–119||0x0074||4||boot code checksum||No|
|120–135||0x0078||16||processor type (fixed ASCII right-side NULL padded)||No|
Types beginning with "Apple_" are reserved for assignment by Apple, all other custom defined types are free to use. However registration with Apple is encouraged.
|Identifier / type||Contents / file system||Name (typical)||Remarks|
|Apple_Boot||bootloader||MOSX_OF3_Booter, eXternal booter||This boot partition is used by Mac OS X on New World Macs (Open Firmware 3.0 and greater) when the file system on the main partition is not supported by Open Firmware, like in a software RAID configuration or when using a HFS+ case-sensitive or a UFS file system. It contains BootX on an HFS filesystem.|
|Apple_Bootstrap||NewWorld bootblock||Although it is a general Open Firmware (New World) boot partition, it is specifically used by yaboot. It must be HFS formatted, so that it can be accessed by Open Firmware.|
|Apple_Driver||device driver||Macintosh||Mac OS classic drivers partition|
|Apple_Driver43||SCSI Manager 4.3 device driver||Macintosh||Mac OS classic drivers partition|
|Apple_Driver43_CD||SCSI CD-ROM device driver||Macintosh||Mac OS classic drivers partition|
|Apple_Driver_ATA||ATA device driver||Macintosh||Mac OS classic drivers partition|
|Apple_Driver_ATAPI||ATAPI device driver||Macintosh||Mac OS classic drivers partition|
|Apple_Driver_IOKit||I/O Kit driver||Macintosh||Mac OS classic drivers partition|
|Apple_Extra||unused||This identifier masks an unused partition map entry.|
|Apple_Free||free space||Extra||This identifier masks free space as a partition map entry.|
|Apple_FWDriver||FireWire device driver||Macintosh||Mac OS classic drivers partition|
|Apple_HFS||Hierarchical File System||Apple_HFS||While normally a HFS or HFS+ volume for Mac OS and Mac OS X, it can also contain an MS-DOS formatted file system (File Allocation Table, which can be accessed by Mac OS and Mac OS X).|
|Apple_HFSX||HFS Plus||This partition contains a HFS+ volume without a HFS wrapper. HFSX was introduced with Mac OS X 10.3 and is only used in special cases, like case sensitive HFS+. HFSX is the standard partition type on Intel-based Macs (which use GUID instead of APM).|
|Apple_Loader||–||SecondaryLoader||Like Apple_Boot but on Old World Macs, it is used when Mac OS X is installed on a file system not readable by Open Firmware. This partition does not contain a filesystem—instead it contains the BootX machine code in XCOFF format. This partition type was discontinued with Mac OS X 10.3.|
|Apple_MFS||Macintosh File System||This partition is used by Mac OS for the Macintosh File System (MFS), which was introduced with the Macintosh 128K in 1984.|
|Apple_Partition_Map||partition map||Apple||The partition map is also a partition of its own. It can vary in size depending on how many partitions it may contain.|
|Apple_Patches||patches||Patch Partition||Mac OS classic patch partition|
|Apple_PRODOS||ProDOS||ProDOS file system|
|Apple_RAID||RAID||Apple_RAID_OfflineV2||This identifier marks a Mac OS X partition used in a software RAID configuration. It normally contains the same filesystems a regular Mac OS X installation would have, like HFS/HFS+ or UFS. The separate boot partition Apple_Boot is mandatory.|
|Apple_Rhapsody_UFS||Unix File System||Mac OS X Server||This partition contains a Unix File System (UFS) used by the Apple Rhapsody operating system (a development name marking the transition from OPENSTEP to Mac OS X) and is also used by Mac OS X Server 1.0 through 1.2 v3.|
|Apple_Scratch||empty||This identifier marks an empty partition.|
|Apple_Second||Second stage bootloader|
|Apple_UFS||Unix File System||Mac OS X||This partition contains a Unix File System (UFS) and is used by Mac OS X, Mac OS X Server (Version 10.0 and newer) and various Unix-like operating systems.|
|Apple_UNIX_SVR2||A/UX, Unix||Originally introduced for A/UX (Apple Unix operating system based on System V Release 2, hence SVR2) on the 68k, it was later reused for MkLinux which used the Extended file system. It is the standard partition identifier for many Unix-like operating systems, including Linux and NetBSD. It may contain any file system suitable for the installed operating system. If bootable, a file system that can be read by the Open Firmware bootloader from Apple_Bootstrap (e.g. yaboot) must be used.|
|Apple_Void||ISO9660 padding||A dummy partition map entry to ensure correct partition alignment on bootable media.|
|Be_BFS||Be File System||This partition contains a Be File System (BFS) and is normally used by BeOS.|
|0x00000001||entry is valid||A/UX|
|0x00000002||entry is allocated||A/UX|
|0x00000004||entry in use||A/UX|
|0x00000008||entry contains boot information||A/UX|
|0x00000010||partition is readable||A/UX|
|0x00000020||partition is writable||A/UX, Macintosh|
|0x00000040||boot code is position independent||A/UX|
|0x00000100||partition contains chain-compatible driver||Macintosh|
|0x00000200||partition contains a real driver||Macintosh|
|0x00000400||partition contains a chain driver||Macintosh|
|0x40000000||automatically mount at startup||Macintosh|
|0x80000000||the startup partition||Macintosh|
- Master Boot Record (MBR)
- Extended Boot Record (EBR)
- GUID Partition Table (GPT)
- Boot Engineering Extension Record (BEER)
- Rigid Disk Block (RDB)
- BSD disklabel
- "Technical Note TN2166 - Secrets of the GPT". Apple. Retrieved 2013-02-24.
…a standard block size of 512 bytes… […] Apple did consider extending APM to support larger disks. However, as such a change would break all existing partitioning tools…
- MacTech Magazine: Apple's Transition from Apple Partition Map to the GUID Partition Table by Criss Myers
- Rebe, René; Klaus, Susanne (r396). "Creating custom Linux solutions - Apple Partition Map". T2 System Development Environment. Retrieved 2013-02-24.
While the original intent was to handle various block sizes, in practice only 512 byte blocks are supported.Check date values in:
- "Yellow Dog Solutions - Attaching Firewire Disks to a Linux Box". Fixstars Corporation. Retrieved 2013-02-24.
Comment: The command pdisk -l /dev/sda shows a size of 63 blocks for the Apple_partition_map. There is a multitude of examples like this to be found on the internet.
- Mac OS: Technical overview of disk volume structures Overview of the elements of a disk volume / partition
- File System Forensic Analysis: PC-based Partitions - Apple partitions Detailed technical analysis of the structure of Apple's partition map.