現代計算機 Boot 相關知識

前言

由於我的兩臺Macbook的容量都非常捉急,很早之前就有想將linux/windows安裝在u盤上作爲移動環境的想法。但是手上最快的u盤只是mlc芯片的32GB版本的cz80。前幾天終於剁手了帶慧榮SM2246EN主控的256GB版本u盤,順序讀寫達到了400MB/s,4k-64線程也有100+MB/s,達到了系統正常讀寫的速度需求,甚至可以小小追上普通SSD的速度。u盤作爲移動系統磁盤的物理條件已經具備。但是本身對於現代主板/操作系統的boot up的方式的知識比較欠缺,之前OS課程學的只有傳統BIOS+MBR啓動的方式。

故本文將記錄對於現代主板/操作系統boot up的基本知識的學習筆記。

與Boot相關的概念

爲了搞清楚不同類型的Boot up流程,首先需要了解各種與Boot有關的概念。對於主板類型,有UEFI與BIOS。對於硬盤分區列表,有MBR與GPT。

  • 傳統BIOS不支持GPT分區列表,僅支持MBR格式。
  • UEFI則是取代傳統BIOS,它不支持MBR模式,僅支持GPT格式。

近兩年出現的UEFI主板,採用UEFI+BIOS共存模式,並且BIOS中集成UEFI啓動項。

下面就主板類型(BIOS/UEFI)與分區列表類型(MBR/GPT)進行詳細描述:

主板類型

  • BIOS(Basic Input/Output System):在IBM PC兼容系統上使用,是一種業界標準的固件接口。這種主板類型比較熟悉了,老一點的機器都是使用BIOS主板。

    對於支持BIOS的主板來講,BIOS只能完成非常基本的硬件檢測和初始化,以後的工作就都由bootleader來交接。

  • UEFI(Unified Extensible Firmware Interface):全稱“統一的可擴展固件接口”, 是一種詳細描述全新類型接口的標準。這種接口用於操作系統自動從預啓動的操作環境,加載到一種操作系統上,從而使開機程序化繁爲簡,節省時間。

    對於支持UEFI的主板,主板的ROM中存放EFI shell程序,會能夠識別存儲介質上的分區信息和文件系統,比如fat32,並從指定的EFI/boot/目錄下查找.efi文件,並執行,以後的工作就是.efi文件和bootleader的任務了。

    所以對於這種主板,啓動時最重要的是.efi文件,一般的操作系統該文件沒有做啥其他事,只是將控制權轉到對應的bootleader而已,實際可以在這一步加很多其他的東西。

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

分區列表

  • MBR(Master Boot Record)

    與老的BIOS主板結合使用,是硬盤的主引導記錄分區列表。在主引導扇區,位於硬盤的cylinder 0, head 0, sector 1 (Sector是從1開始的)。最大支持2TB的硬盤空間。

  • GPT(GUID Partition Table)

    與新的UEFI主板使用,全局唯一標識分區列表。它用來替代BIOS中的主引導記錄分區表(MBR)。最大支持128PB的硬盤空間。

OK Let’s boot up!

在這篇技術分享中找到了對於兩種不同主板的啓動流程的清晰描述,這裏簡要引用:

BIOS bootup

這裏寫圖片描述

整個BIOS啓動的流程具體描述如下:

  • 計算機器開機後,固化在 ROM 裏的 BIOS 就會被加載到內存運行。
  • BIOS 自檢完畢以後加載 COMS 的參數,通過 COMS 的參數, BIOS 程序加載啓動磁盤的 MBR 到內存裏運行。
  • 通過運行 MBR 的代碼,記錄在 MBR 分區表中,標記爲活動分區的磁盤分區 PBR 被加載到內存
  • 與 MBR 類似,PBR 在運行後加載操作系統的引導程序到內存運行,例如 Windows 的 bootmgr 。
  • 當引導程序運行後,操作系統內核就被加載運行,完成從 BIOS 程序中接手的引導流程。

傳統的 BIOS 比較低級,它不能像操作系統一樣識別文件系統,所以磁盤必須要有一個固定的物理塊作爲引導塊(Boot Block),這個引導塊就是 MBR。

EFI/UEFI bootup

這裏寫圖片描述

整個EFI/UEFI的啓動詳細流程描述如下:

  • 計算機器開機後,固化在 ROM 裏的 EFI BIOS 就會被加載到內存運行。
  • EFI BIOS將引導EFI系統進行運行。
  • 在 EFI 系統啓動後,GUID 分區表就會被識別,之後 EFI 系統就會通過.efi文件啓動 Boot Loader 程序加載操作系統內核

EFI同時可以啓動傳統MBR分區表的磁盤,流程如下:

這裏寫圖片描述

EFI 系統會先啓動 CSM 兼容模式後按傳統 BIOS 的步驟加載操作系統的內核。

簡要總結

根據上面資料,簡單的來說:

  • 利用BIOS主板的機器會直接查看默認磁盤第一個扇區的0x55AA來確定是否是MBR,然後從MBR開始加載boot leader。所以一般要切換不同的系統是進BIOS選擇boot順序取檢查不同磁盤的第一個扇區。
  • 而利用UEFI主板的機器會啓動EFI系統後,去默認磁盤.efi文件,然後通過運行.efi文件來引導操作系統。其實這裏的EFI系統就類比爲原來的一個簡要的系統,然後利用該系統再去啓動其他系統。EFI 系統是由模塊化的 C 語言程序寫出來的,所以通過添加或修改程序模塊就能獲得更多的功能。例如支持更多的文件系統,圖形界面,甚至能使用瀏覽器瀏覽網頁。

注意,BIOS/EUFI本省都不帶選擇啓動的操作系統的menu,他們只能選擇從哪個磁盤啓動,而非知道哪個磁盤有哪個OS的bootloader。

那麼是否BIOS主板的機器就不能boot那些EFI啓動的OS了?實則不然,有一類工具來解決這個問題。下面說的GRUB便是其中的一種。

GRUB

Wikipedia這樣介紹GURB:

GNU GRUB(簡稱“GRUB”)是一個來自GNU項目的啓動引導程序。GRUB是多啓動規範的實現,它允許用戶可以在計算機內同時擁有多個操作系統,並在計算機啓動時選擇希望運行的操作系統。GRUB可用於選擇操作系統分區上的不同內核,也可用於向這些內核傳遞啓動參數。

這裏寫圖片描述

對於只支持BIOS的主板,可以使用grub進入grub命令行,然後爲grub添加第三方的EFI shell模塊,然後就可以啓動那些使用EFI啓動的OS了。對於只有EFI的主板,當然可以寫個.efi文件,然後轉去讀取MBR傳統引導。

除了grub,還有一類純粹用於在不同系統中進行選擇的工具。

rEFInd

rEFInd項目網站:http://www.rodsbooks.com/refind/

rEFInd是一種典型的Boot Manager,其本質上是一個軟件,監測到不同的OS 內核,並將控制權轉給他們。

但是grubrEFInd有一些細微的差別,grubboot loaderboot manager之間的結合體,而rEFInd是一個純粹的boot manager。他們之間的差異在下面一個小節敘述。

Boot Manager 與 Boot Loader之間的區別

Typically Boot loader is the one which loads the important systems files of the Operating System so that your system will boot normally. Boot Manager functionality is the ability of choosing which OS should load (normally used in the context of Dual Boot) and Boot Manager will pass on the baton to Boot Loader of that particular OS.

From Quora Question: What is the difference between a boot loader and a boot manager?

Computer Port IT Solutions’ answer

  • Boot Loader是針對具體操作系統的,用於加載操作系統的一些重要文件。
  • Boot Manager是(如果安裝了的話)開機之後跳到的一個小的程序,選擇需要啓動的系統。選擇完後Boot Manager會將控制權傳給Boot loader。

Apple Boot Camp

由於我的兩臺機器都是mac,故最後一部分來討論一下Apple的BootCamp。該部分也源自於該鏈接的技術分享。

混合分區表

什麼是混合分區表

由於傳統windows是使用的MBR分區表,而macOS是使用的GPT。所以Apple提供了一種混合分區表。在混合分區表中,GPT 磁盤保留了一個 Protect MBR 。而Boot Camp則是在EFI系統中,選擇是從讀GPT分區表啓動,還是從MBR啓動。

如何啓用混合分區表

使用 OS X 的 Boot Camp 助理安裝 Windows 時自動產生。這時 GUID 分區表起始的4個分區就複製到 MBR 分區表。不使用 Boot Camp 助理也是可以手動創建的,通過磁盤工具在 GPT 磁盤上創建一個 FAT32 或 exFAT 分區後,系統自動地將 GUID 分區表的內容複製到 MBR 分區表。

具體混合分區內容

這裏寫圖片描述

Boot Camp啓動流程

這裏寫圖片描述

EFI 系統通過加載 Nvram 的參數來決定是否啓動 BootCamp程序(或者按下option按鈕手動選擇)。

EFI in mac

mac另外一個比較神奇的點是,macOS對於硬件的訪問實際上是通過EFI接口代理實現的對硬件的訪問。而傳統Windows更加偏向於直接對硬件的訪問(不知道後來支持EFI的windows10怎麼樣)。所以mac上運行的Windows上安裝Boot camp驅動後實際也是通過EFI對於實際硬件的訪問,如下圖所示。

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章