애플 파티션 맵
1. 개요
애플 파티션 맵(APM)은 인텔 기반 맥에서 GPT 디스크 부팅을 지원하기 전, 구형 인텔 기반 맥에서 사용되던 파티션 방식이다. APM은 파티션 테이블의 각 항목이 512바이트 크기의 데이터 블록으로 구성되며, 최대 62개의 데이터 파티션을 지원한다. 각 파티션 항목은 시작 섹터, 크기, 이름, 유형, 데이터 영역 위치, 부트 코드 등의 정보를 포함하며, 빅 엔디안 바이트 순서로 저장된다. APM은 파티션 유형을 나타내는 다양한 식별자를 사용하며, 파티션 상태는 여러 플래그로 구성된 비트 필드로 표시된다.
-
파일 시스템 -
부트 섹터
부트 섹터는 시스템 부팅 코드를 담은 저장 매체의 특정 영역으로, 볼륨 부트 레코드(VBR)와 마스터 부트 레코드(MBR)로 나뉘며, BIOS는 이를 실행하고 UEFI는 부트로더를 직접 로드하지만 바이러스 공격에 취약하다. -
파일 시스템 -
ZFS
ZFS는 Jeff Bonwick 등이 설계하고 구현한 파일 시스템으로, 데이터 무결성, 스냅샷, RAID-Z 등의 기능을 제공하며, 썬 마이크로시스템즈에서 개발되어 OpenZFS 프로젝트를 통해 다양한 운영체제에서 사용된다. -
MacOS -
메일 (애플)
메일은 애플에서 개발한 이메일 클라이언트로, macOS에 통합되어 다양한 기능과 인터페이스 변화를 거쳤으며, iCloud 동기화, 이메일 추적 차단, 이메일 전송 취소, 예약 발송 등을 지원한다. -
MacOS -
개러지밴드
애플이 개발한 개러지밴드는 로직 프로 기술을 기반으로 한 음악 제작 소프트웨어로, 가상 악기, MIDI 편집 기능, 팟캐스트 제작, 악기 레슨 등 다양한 기능을 제공하며 macOS와 iOS에서 아마추어부터 전문가까지 폭넓게 사용된다.
2. 인텔 기반 맥에서의 APM 지원
인텔 기반 맥은 기본적으로 GPT 디스크에서 부팅하지만, 구형 인텔 기반 맥은 APM, GPT, MBR (BIOS 에뮬레이션인 EFI-CSM, 즉 호환성 지원 모듈 사용, EFI에서 제공)에서 부팅할 수 있다.
타이거 (10.4) 또는 레오파드 (10.5)가 사전 설치된 인텔 기반 모델은 APM 및 GPT 디스크 모두에서 부팅할 수 있었다. 이는 이러한 유니버설 버전의 Mac OS X 설치 미디어가 PowerPC 기반 시스템과의 호환성을 위해 APM으로 파티션되었기 때문이다. 그러나 인텔 기반 맥에 OS X를 설치하려면 GPT 파티션 디스크가 필요하며, APM 디스크에는 설치할 수 없다. 이미 설치된 OS X를 인텔 시스템의 APM 파티션으로 복제하면 2011년 인텔 기반 맥에서도 부팅 가능한 경우가 있었다. 애플은 공식적으로 인텔 기반 시스템에서 내부 APM 디스크로 부팅하는 것을 지원하지 않았지만, 이러한 현상이 나타나기도 했다.
3. 구조
APM은 파티션 테이블의 각 항목이 하나의 데이터 블록 크기(일반적으로 512바이트)인 방식으로 구성된다. 파티션 테이블 자체도 하나의 파티션으로 취급되며, 일반적으로 64개의 섹터(64 × 512 = 32 KB)가 할당된다. 즉, 블록 0의 드라이버 설명 맵에 1개의 블록, 파티션 테이블 자체에 1개의 블록, 최대 62개의 데이터 파티션에 62개의 블록이 사용되어 APM은 최대 62개의 데이터 파티션을 지원할수 있다.
각 파티션 항목은 시작 섹터, 크기, 이름, 유형, 데이터 영역 위치, 부트 코드 등의 정보를 포함하며, 해당 파티션 테이블의 총 파티션 수도 포함한다. 모든 항목은 빅 엔디안 바이트 순서로 저장된다.
| 주소 | 크기 바이트 | 내용 | 필수? | |
|---|---|---|---|---|
| 10진수 | 16진수 | |||
| 0 | 0x0000 | 1 | signature1 (ASCII 값 "P") | 아니요 |
| 1 | 0x0001 | 1 | signature2 (ASCII 값 "M") | 아니요 |
| 2–3 | 0x0002 | 2 | 예약됨 | 아니요 |
| 4–7 | 0x0004 | 4 | 파티션 수 (총) | 예 |
| 8–11 | 0x0008 | 4 | 파티션 시작 섹터 | 예 |
| 12–15 | 0x000C | 4 | 파티션 크기 (섹터) | 예 |
| 16–47 | 0x0010 | 32 | 파티션 이름 (고정 ASCII 오른쪽 NULL 패딩) | 아니요 |
| 48–79 | 0x0030 | 32 | 파티션 유형 (고정 ASCII 오른쪽 NULL 패딩) | 아니요 |
| 80–83 | 0x0050 | 4 | 파티션 내 데이터 영역 시작 섹터 | 아니요 |
| 84–87 | 0x0054 | 4 | 파티션 내 데이터 영역 크기 (섹터) | 아니요 |
| 88–91 | 0x0058 | 4 | 파티션 상태 | 아니요 |
| 92–95 | 0x005C | 4 | 부트 코드 시작 섹터 | 아니요 |
| 96–99 | 0x0060 | 4 | 부트 코드 크기 (바이트) | 아니요 |
| 100–103 | 0x0064 | 4 | 부트로더 코드 주소 | 아니요 |
| 104–107 | 0x0068 | 4 | 예약됨 | 아니요 |
| 108–111 | 0x006C | 4 | 부트 코드 진입점 | 아니요 |
| 112–115 | 0x0070 | 4 | 예약됨 | 아니요 |
| 116–119 | 0x0074 | 4 | 부트 코드 체크섬 | 아니요 |
| 120–135 | 0x0078 | 16 | 프로세서 유형 (고정 ASCII 오른쪽 NULL 패딩) | 아니요 |
| 136–511 | 0x0088 | 376 | 예약됨 | 아니요 |
3.1. 파티션 항목 구조
4. 파티션 식별자
APM은 파티션 유형을 나타내는 다양한 식별자를 사용한다. "Apple_"로 시작하는 유형은 애플에 의해 할당되며, 다른 모든 사용자 정의 유형은 자유롭게 사용할 수 있지만 애플에 등록하는 것이 권장된다.
| 식별자 / 유형 |
|---|
Apple_Boot |
Apple_Boot_RAID |
Apple_Bootstrap |
Apple_Driver |
Apple_Driver43 |
Apple_Driver43_CD |
Apple_Driver_ATA |
Apple_Driver_ATAPI |
Apple_Driver_IOKit |
Apple_Driver_OpenFirmware |
Apple_Extra |
Apple_Free |
Apple_FWDriver |
Apple_HFS |
Apple_HFSX |
Apple_Loader |
Apple_MFS |
Apple_Partition_Map |
Apple_Patches |
Apple_PRODOS |
Apple_RAID |
Apple_Rhapsody_UFS |
Apple_Scratch |
Apple_Second |
Apple_UFS |
Apple_UNIX_SVR2 |
Apple_Void |
Be_BFS |
4.1. 주요 파티션 식별자
wikitable
| 식별자 / 유형 |
|---|
Apple_Boot |
Apple_Boot_RAID |
Apple_Bootstrap |
Apple_Driver |
Apple_Driver43 |
Apple_Driver43_CD |
Apple_Driver_ATA |
Apple_Driver_ATAPI |
Apple_Driver_IOKit |
Apple_Driver_OpenFirmware |
Apple_Extra |
Apple_Free |
Apple_FWDriver |
Apple_HFS |
Apple_HFSX |
Apple_Loader |
Apple_MFS |
Apple_Partition_Map |
Apple_Patches |
Apple_PRODOS |
Apple_RAID |
Apple_Rhapsody_UFS |
Apple_Scratch |
Apple_Second |
Apple_UFS |
Apple_UNIX_SVR2 |
Apple_Void |
Be_BFS |
5. 파티션 상태
파티션 상태는 다음 플래그로 구성된 비트 필드이다.
| 값 | 설명 | 시스템 |
|---|---|---|
0x00000001 | 항목이 유효함 | A/UX |
0x00000002 | 항목이 할당됨 | A/UX |
0x00000004 | 항목이 사용 중임 | A/UX |
0x00000008 | 항목에 부팅 정보가 포함됨 | A/UX |
0x00000010 | 파티션을 읽을 수 있음 | A/UX |
0x00000020 | 파티션을 쓸 수 있음 | A/UX, 매킨토시 |
0x00000040 | 부트 코드가 위치 독립적임 | A/UX |
0x00000100 | 파티션에 체인 호환 드라이버가 포함됨 | 매킨토시 |
0x00000200 | 파티션에 실제 드라이버가 포함됨 | 매킨토시 |
0x00000400 | 파티션에 체인 드라이버가 포함됨 | 매킨토시 |
0x40000000 | 시작 시 자동으로 마운트됨 | 매킨토시 |
0x80000000 | 시작 파티션 | 매킨토시 |
5.1. 파티션 상태 플래그
wikitable
| 값 | 설명 | 시스템 |
|---|---|---|
0x00000001 | 엔트리가 유효함 | A/UX |
0x00000002 | 엔트리가 할당되어 있음 | A/UX |
0x00000004 | 엔트리를 사용하고 있음 | A/UX |
0x00000008 | 엔트리가 부팅 정보를 포함하고 있음 | A/UX |
0x00000010 | 파티션을 읽을 수 있음 | A/UX |
0x00000020 | 파티션을 기록할 수 있음 | A/UX, 매킨토시 |
0x00000040 | 부팅 코드가 위치 독립적임 | A/UX |
0x00000100 | 파티션이 체인 호환 드라이버를 포함하고 있음 | 매킨토시 |
0x00000200 | 파티션이 리얼 드라이버를 포함하고 있음 | 매킨토시 |
0x00000400 | 파티션이 체인 드라이버를 포함하고 있음 | 매킨토시 |
0x40000000 | 시동 시 자동으로 마운트 | 매킨토시 |
0x80000000 | 시동 파티션 | 매킨토시 |