Apple Sparse Image Format (ASIF) Technical Analysis
Apple Sparse Image Format (ASIF) Technical Analysis
Apple Sparse Image Format (ASIF) 개요
Apple의 Sparse Image Format (ASIF)은 macOS 26 Tahoe와 함께 도입된 가상 디스크 이미지 형식으로, Virtualization 프레임워크 내에서 사용하도록 설계되었습니다. ASIF는 스파스 가상 디스크로 동작하며, VMDK, VHDX, 또는 QCOW2 형식과 유사하게 실제 저장소에 기록된 데이터에 대해서만 공간을 할당함으로써 큰 디스크를 작은 파일로 표현할 수 있습니다.
ASIF 헤더 구조
ASIF 파일은 디스크의 기하학, 버전 정보 및 중요한 할당 데이터에 대한 오프셋을 정의하는 구조화된 헤더로 시작합니다. 헤더는 빅 엔디언 바이트 순서를 사용합니다.
헤더 필드 정의
| 필드 | 타입 | 설명 |
|---|---|---|
header_signature |
uint32 |
파일 매직 바이트 ('shdw') |
header_version |
uint32 |
포맷 버전 |
header_size |
uint32 |
헤더 섹션 크기 |
header_flags |
uint32 |
헤더 전용 플래그 |
directory_offsets |
uint64[2] |
할당 디렉터리들의 오프셋 |
guid |
char[16] |
이미지 고유 식별자 |
sector_count |
uint64 |
가상 디스크의 현재 섹터 수 |
max_sector_count |
uint64 |
디스크가 확장될 수 있는 최대 섹터 수 |
chunk_size |
uint32 |
데이터 청크 크기 (보통 1 MiB) |
block_size |
uint16 |
섹터/블록 크기 (보통 512 바이트) |
total_segments |
uint16 |
전체 세그먼트 수 |
metadata_chunk |
uint64 |
메타데이터 블록에 대한 오프셋 |
read_only_flags |
uint32 |
읽기 전용 상태를 나타내는 플래그 |
metadata_flags |
uint32 |
일반 메타데이터 플래그 |
metadata_read_only_flags |
uint32 |
메타데이터 전용 읽기 전용 플래그 |
할당 및 데이터 매핑
ASIF는 계층적 디렉터리와 테이블 시스템을 사용해 가상 오프셋을 물리 청크에 매핑합니다. 이 구조는 여러 디렉터리를 유지함으로써 원자적 업데이트를 지원하며, 가장 높은 버전 번호를 가진 디렉터리가 활성 디렉터리로 간주됩니다.
테이블 및 엔트리 시스템
- 디렉터리와 테이블: 디렉터리는 테이블 목록을 포함하고, 각 테이블은
uint64데이터 엔트리 목록을 포함합니다. - 데이터 엔트리: 각 엔트리는 ASIF 파일 내 물리 청크를 가리킵니다. 엔트리는 청크 번호에 55비트, 플래그에 9비트를 사용합니다.
- 엔트리 플래그:
0b00: 초기화되지 않음0b01: 완전히 초기화됨0b10: 매핑되지 않음0b11: 비트맵 포함
청크 그룹 및 비트맵
일부 스파스 포맷이 비트맵을 별도로 저장하는 것과 달리, ASIF는 할당 비트맵을 데이터 테이블에 직접 삽입합니다.
- 청크 그룹: 데이터 엔트리는 "청크 그룹"으로 조직됩니다. 각 그룹은 일련의 청크 엔트리 뒤에 하나의 비트맵 엔트리를 가집니다.
- 비트맵 사양: 비트맵은 블록당 2비트를 사용합니다. 비트맵의 한 바이트는 4개의 블록을 커버합니다. 비트맵 자체가 하나의 청크 크기를 차지하므로, 그룹당
4 * chunk_size블록을 커버합니다. - 매핑 로직: 가상 오프셋을 물리 청크로 해석하기 위해 시스템은 테이블 인덱스, 해당 테이블 내 상대 청크 인덱스를 계산하고, 삽입된 비트맵으로 인해 "건너뛴" 엔트리를 고려해 최종
entry_index를 찾습니다.
메타데이터 및 제약 조건
ASIF는 디스크 끝 부분에 작은 메타데이터 영역을 예약합니다. 헤더의 metadata_chunk 오프셋은 일반적으로 최대 이론 디스크 크기(약 4 PiB에서 한 청크를 뺀 크기) 근처의 영역을 가리킵니다.
이 메타데이터 블록은 작은 헤더와 뒤이어 XML plist를 포함합니다. 이 plist는 두 개의 주요 딕셔너리를 저장합니다:
- Internal Metadata: 시스템 수준 구성 및 상태.
- User Metadata: 디스크 이미지에 대한 사용자 정의 속성.
디스크 해석에 대한 기술 요약
ASIF 이미지에서 특정 오프셋을 읽기 위해 다음 로직이 적용됩니다:
- 테이블 선택:
table = directory.table(offset // size_per_table) - 상대 인덱싱:
block_size와 테이블의 가상 오프셋을 기반으로relative_chunk_index를 계산합니다. - 그룹 조정: 상대 인덱스를 그룹당 청크 수로 나누어
chunk_group을 결정합니다. - 최종 엔트리 조회:
entry_index = relative_chunk_index + chunk_group. 이 조정은 테이블 내에 섞여 있는 비트맵 엔트리를 고려합니다.
SUMMARY
Apple의 ASIF는 macOS 26 Tahoe에서 Virtualization 프레임워크를 위해 도입된 스파스 가상 디스크 포맷으로, 효율적인 저장을 위해 청크 기반 할당 시스템과 내장 비트맵을 활용합니다.
TITLE
Apple Sparse Image Format (ASIF) Technical Analysis