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 分區表。如下圖,由於篇幅的關系,表的長度比例不等同與實際在磁盤地址里的實際比例。

 

 

  • EFI,是一種取代傳統 BIOS 的一種技術。如果將 BIOS 比作是一個程序的話,那么 EFI 就是一個簡化的操作系統。比起傳統的 BIOS ,EFI BIOS 有更多的擴展性。下圖介紹 EFI 引導操作系統的流程。

 

 

  • 在 EFI 系統啟動后,GUID 分區表就會被識別,之后 EFI 系統就啟動 Boot Loader 程序加載操作系統內核。對於分區表格式為 MBR 分區表 的磁盤,EFI 系統會 先啟動 CSM 兼容模式后按傳統 BIOS 的步驟加載操作系統的內核。如下圖。

 

   

  • 一般的 EFI 系統僅能識別 FAT32 ,不同於 BIOS 只能識別固定位置的磁盤引導塊。這意味着只要將引導程序放到 FAT32 分區里,EFI 系統就能通過分區表的指引找到這個保存着引導程序的 FAT32 分區。
  • EFI 系統是由模塊化的 C 語言程序寫出來的,所以通過添加或修改程序模塊就能獲得更多的功能。例如支持更多的文件系統,圖形界面,甚至能使用瀏覽器瀏覽網頁。

OS X 的磁盤分區結構

  • Mac 很早前就使用了 EFI ,因此在引導上與上文提到的 EFI 引導方式類似。另外,Mac 是使用 GUID 分區表  格式的磁盤。結構如下圖:



 

  • OS X 是不需要 PBR 的,引導是直接從啟動分區里找到引導程序加載內核。


Boot Camp 引導 

  • 自從 Mac 使用 x86 架構以后,在其上面運行 Windows 已經成為了可能。蘋果在 Mac 上開發了一種引導 Windows 的技術,叫做 Boot Camp 。
  • 在探討 Boot Camp 之前,混合分區表格式需要引起關注。在我們較早前的討論里得知,Windows 和 OS X 是分別使用兩種引導方式的,前者基於傳統 BIOS ,后者基於 EFI ,不幸的是 BIOS 是無法引導GPT 磁盤里的操作系統的。為了解決這個問題,混合分區表的概念產生了。
  • GPT 磁盤保留了一個 Protect MBR ,在一般情況下這個 MBR 是空白的。Mac 開機后 EFI 系統直接跳過 MBR 讀取 GPT 分區表。假如我們在這個 Protect MBR 上寫入分區表和引導代碼后會怎樣呢?當 EFI 檢索到這個磁盤后會加載那個分區表?
  • 帶着上面的兩個問題,我們來探討一下。EFI 是一個簡化的操作系統,那么可以通過加載一些特別的程序讓它只讀 GPT 分區表是可能的。同樣,讓它只讀 MBR 分區表也是可能的。這就是 BootCamp 程序的真面目。
  • 創建混合分區非常簡單,使用 OS X 的 Boot Camp 助理安裝 Windows 時自動產生。這時 GUID 分區表起始的4個分區就復制到 MBR 分區表。不使用 Boot Camp 助理也是可以手動創建的,通過磁盤工具在 GPT 磁盤上創建一個 FAT32 或 exFAT 分區后,系統自動地將 GUID 分區表的內容復制到 MBR 分區表。
  • EFI 系統通過加載 Nvram 的參數來決定是否啟動 BootCamp程序。啟動過程如下圖:

 



雙系統磁盤分區結構 

  • BootCamp 首先加載磁盤上的 MBR 到內存並運行,這時標記為活動的 BootCamp 分區 PBR 被找到,接着加載 bootmgr 后引導 Windows。值得注意的是,GPT 保護分區包含了整個 GPT 頭 和 GPT 主體和第一個 EFI 系統分區。

 



注意事項 

  • MBR 分區表只支持4個主要分區,如果按照一般的情況來安裝 Windows 的話是不能再添加一個分區的。如果不幸對這個磁盤進行了分區,根據分區的方式會出現如下情況:

 

  • 安裝 Windows 時或后將 GPT 保護分區格式化
    GPT 保護分區包含從 LBA1~LBA409639的所有數據,其中 GPT 頭 和 GPT 主體部分都在這里。格式化這個分區意味着磁盤從混合分區表格式變為 MBR 分區表格式。盡管兩個系統都還能繼續啟動,但對於 OS X 來說是災難,首先磁盤無法進行動態分區,無法用 Boot Camp 助理移除 WIndows ,無法更新 OS X 等等。

 

  • 安裝 Windows 后在 OS X 里添加一個分區
    這種做法對於 Windows 來說是一個災難,當在 OS X 里添加一個分區后,GPT 分區表會跟 MBR 分區表同步,這時 GPT 已經有5個分區了,第5個剛好是 BootCamp ,所以 MBR 分區表自動將 BootCamp 踢出去,造成 Windows 無法引導。
  • 正確的多分區安裝方法必須要在安裝 OS X 前做好磁盤分區規划。如下表:

 

GPT保護分區
Windows
共享1
共享2
OS X
Recovery HD

 

  • 從 GPT 保護分區開始到共享2會被復制到 MBR 分區表,剩下的部分 MBR 分區表會識別為可用空間,但是無法使用這片可用空間創建任何分區。


題外 

  • 對於 EFI 啟動的操作系統來說,EFI 提供底層硬件的接口,這樣的好處在於保護硬件,而且讓驅動的更新更方便。




 

  • 傳統的 BIOS 啟動 Windows 在 BIOS 移交控制權后,Windows 全權掌握硬件服務層。
  • 在 EFI 主板上使用兼容模式 CSM 來啟動的 Windows 也是類似的。
  • 對比起 WIndows 來說,OS X 並不掌握全部的硬件服務,OS X 需要 EFI 系統給出的硬件編程接口才能訪問硬件。
  • BootCamp 啟動的 Windows 則有點特別,與普通 EFI 主板上的兼容模式不同,Windows 在訪問硬件需要經過 EFI 系統。這樣做的作用就是 EFI 全權控制着 WIndows 的硬件訪問能力,只要蘋果有意,完全可以在驅動上限制 Windows 。
  • 從 Boot Camp 引導的原理來看,要在 Mac 上實現單獨安裝 Windows 是非常簡單的。Boot Camp 程序是固化在 EFI 系統里的,所以通過簡單設置一下 Nvram 的變量,就可以引導 Windows,無需混合分區表格式。修改 Nvram 變量需要通過運行在 WIndows 下的 BootCamp 程序,這意味着,只要裝好了蘋果提供的 BootCamp 驅動,你的 Windows 就能運行在 Mac 上。更有甚者在第二塊磁盤上安裝一個完全獨立的 Windows ,而且是基於純凈的 MBR 分區表上安裝,這樣可以忽略掉與 OS X 共享一個磁盤又不能多分區的尷尬。
  • 盡管在 Mac 上單獨裝 Windows 也是很簡單的,但 Mac 本身的 EFI 版本比較低,比很多 PC 主板的還低,所以一些較舊的型號甚至連 U 盤也不識別。這種舊型號的機器想要用上 Windows 得將磁盤拆下接到其它機器上裝好系統再裝回 Mac 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM