Apple 稀疏映像格式(ASIF)技術分析

Apple 稀疏映像格式(ASIF)技術分析

Apple 稀疏映像格式(ASIF)概述

Apple 的稀疏映像格式(ASIF)是一種隨 macOS 26 Tahoe 推出的虛擬磁碟映像格式,專為 Virtualization 框架設計。ASIF 作為稀疏虛擬磁碟,透過僅為已寫入的資料分配空間,使大型磁碟能以較小的實體檔案表示,類似於 VMDK、VHDX 或 QCOW2 等格式。

ASIF 標頭結構

ASIF 檔案以結構化的標頭開始,定義磁碟的幾何資訊、版本以及關鍵分配資料的偏移。標頭使用大端序(big‑endian)位元組順序。

標頭欄位說明

欄位 型別 說明
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 保存兩個主要字典:

  1. 內部元資料:系統層級的設定與狀態。
  2. 使用者元資料:使用者自訂的磁碟映像屬性。

磁碟解析的技術摘要

要從 ASIF 映像讀取特定偏移,會套用以下邏輯:

  1. 表格選取table = directory.table(offset // size_per_table)
  2. 相對索引:根據 block_size 與表格的虛擬偏移計算 relative_chunk_index
  3. 群組調整:將相對索引除以每群組的區塊數,以取得 chunk_group
  4. 最終條目查找entry_index = relative_chunk_index + chunk_group。此調整考慮了表格中交錯的位圖條目。

摘要: Apple 的 ASIF 是在 macOS 26 Tahoe 為 Virtualization 框架推出的稀疏虛擬磁碟格式,採用基於區塊的分配機制,並內嵌位圖以提升儲存效率。

標題: Apple 稀疏映像格式(ASIF)技術分析

Sources