Mac 系统引导过程概述 & BootCamp 的秘密
前言 OS X 与 Windows 在引导流程上有很大的差别,而且在 Mac 上运行 Windows 需要经过特殊的处理。造成这种差异的原因在于磁盘分区表格式。 分区表 一个磁盘抛开物理组成部分的话,它就是一个地址序列,这个序列从 0~n-1 ,每个地址包含 512B(字节)的空间。一般我们将这些地址称作逻辑块地址(LBA),每块由 512B 组成。分区表告诉操作系统,磁盘的分区有几个,从哪里开始到哪里结束。当将一个磁盘插入已经含有操作系统的机器上时,操作系统会检索这个磁盘的分区表,并正确认识它的分区结构。一个磁盘是先有分区表,后有分区,然后才有文件系统,有了文件系统才能被操作系统读写删。 分区表格式与系统引导的关系 磁盘分区表格式目前主要有两种,分别是 MBR 分区表 和 GUID 分区表,两种分区表的主要区别在支持的分区数量上。前者仅支持4个主要分区,后者则可以扩展到超过128个。 MBR,即 Master Boot Record ,位置在磁盘的第一个逻辑扇区,即 LBA0 的位置。一个逻辑扇区仅有 512B(字节) ,而且分给 MBR 分区表 的只有 64B ,每个分区占分区表的 16B ,剩下的字节由 MBR 引导代码和其它组成。因为每个分区只有 16B 大小的分区表记录,所以寻址最大只能到 2.2TB 。下图的绿色部分 PBR,即 Partition Boot Record ,位置在每个磁盘分区的开始部分,占用扇区不定。这个扇区一般保存着操作系统引导程序的所在位置。下图的红色部分。 文件系统,File System ,操作系统对磁盘的所有操作都需要经过文件系统,删除文件指的是在文件系统里删除文件的索引条目,创建文件就是在在文件系统里添加索引条目并将具体数据写入磁盘。常见的文件系统格式有: FAT exFAT NTFS HFS+ 。文件系统位置一般在PBR之后。下图黄色部分 传统的 BIOS 引导操作系统过程如下图: 计算机器开机后,固化在 ROM 里的 BIOS 就会被加载到内存运行,BIOS 自检完毕以后加载 COMS 的参数,通过 COMS 的参数, BIOS 程序加载启动磁盘的 MBR 到内存里运行。通过运行 MBR 的代码,记录在 MBR 分区表中,标记为活动分区的磁盘分区 PBR 被加载到内存。与 MBR 类似,PBR 在运行后加载操作系统的引导程序到内存运行,例如 Windows 的 bootmgr 。当引导程序运行后,操作系统内核就被加载运行,完成从 BIOS 程序中接手的引导流程。 传统的 BIOS 比较低级,它不能像操作系统一样识别文件系统,所以磁盘必须要有一个固定的物理块作为引导块(Boot Block),这个引导块就是 MBR 。 GPT,即 Globally Unique Identifier Table ,全局唯一标识码分区表,简称 GPT 或 GUID 分区表(下面将混用这两个称呼)。由于 MBR 分区表 的局限性(还有 BIOS 的),GPT 诞生了。GPT 由 GPT 头和 GPT 主体,GPT 备份 组成。起始于磁盘 LBA1的位置,相对的 LBA0 仍然为 MBR ,但是这个 MBR 是被保护的,没有引导代码,仅仅有一个被标识为未知的分区,当支持 GPT 分区表的操作系统检索到这个 MBR 后就会自动忽略并跳到 LBA1 读取 GPT 分区表。如下图,由于篇幅的关系,表的长度比例不等同与实际在磁盘地址里的实际比例。 ...