![](https://help.apple.com/assets/6537FB06A074DBB5E802EA07/6537FB31280588A5490B6E1D/zh_CN/52d714626638d3391623c853be0c593b.png)
基于 Intel 的 Mac 的 recoveryOS 和诊断环境
recoveryOS
recoveryOS 完全独立于主 macOS,且所有内容储存在名为 BaseSystem.dmg 的磁盘映像文件中。与之关联的还有一个 BaseSystem.chunklist,用于验证 BaseSystem.dmg 的完整性。chunklist 是 BaseSystem.dmg 中大小为 10 MB 区块的一系列哈希值。统一可扩展固件接口 (UEFi) 固件评估 chunklist 文件的签名,然后评估 BaseSystem.dmg 中区块的哈希值(一次评估一个区块)。这可帮助确保其匹配 chunklist 中所包含的签名内容。如果有任何哈希值不匹配,则会中止从本地 recoveryOS 启动;UEFI 固件会转而尝试从互联网 recoveryOS 启动。
如果成功完成验证,UEFI 固件会将 BaseSystem.dmg 作为内存磁盘装载并启动其中包含的 boot.efi。UEFI 固件无需对 boot.efi 执行特定检查,boot.efi 也无需对内核进行检查,因为操作系统中所完成的内容(这些元素只是其中的一个子集)已经经过了完整性检查。
Apple 诊断
启动本地诊断环境的进程与启动 recoveryOS 的进程大致相同。启动过程中会使用单独的 AppleDiagnostics.dmg 和 AppleDiagnostics.chunklist 文件,但它们的验证方式与 BaseSystem 文件相同。UEFI 固件会启动磁盘映像(.dmg 文件)内名为 diags.efi 的文件,而不是 boot.efi;该文件接下来会负责调用各种其他的 UEFI 驱动程序来与硬件通过接口进行通信并检查错误。
互联网 recoveryOS 和诊断环境
如果在启动本地恢复或诊断环境时出错,UEFI 固件会转而尝试从互联网下载映像。(用户还可以在启动时以特定顺序按下按键来特别要求从互联网获取映像。)对于从操作系统恢复服务器下载的磁盘映像和 chunklist,其完整性验证方式与从储存设备获取的映像的验证方式相同。
通过 HTTP 连接到操作系统恢复服务器完成后,仍会按照前述方式对完成下载的内容进行完整性检查,以此来防范控制了网络的攻击者的操纵。如果单个区块的完整性验证失败,在放弃并显示错误之前,会重新向操作系统恢复服务器再次请求该区块 11 次。
在 2011 年将互联网恢复和诊断模式添加到 Mac 电脑时,我们确定比较好的方案是使用更简单的 HTTP 传输方式并使用 chunklist 机制处理内容认证,而不是在 UEFI 固件中实施更复杂的 HTTPS 功能,否则会扩大固件的攻击面。