預備知識
CMOS: 主板上記錄了硬件參數(shù)的儲存器 —— Wikipedia
BIOS: 寫入到主板 ROM 中的程序,開機時執(zhí)行的第一個程序 —— Wikipedia
MBR: 可引導設備的第一個扇區(qū)(一般情況下是硬盤中的第一扇區(qū))中的主引導分區(qū) —— Wikipedia
Boot loader: 讀取操作系統(tǒng)內(nèi)核文件來執(zhí)行的程序 —— Wikipedia
開始
學過計算機的肯定都知道操作系統(tǒng)是一個軟件,我們平時用的軟件都是基于操作系統(tǒng)提供的接口運行的。那么操作系統(tǒng)又是怎么運行的呢?
Step 1: BIOS
在預備知識中我們就知道了,開機運行的第一個程序就是 BIOS,那么開機引導操作系統(tǒng)的切入點也肯定是它了。
BIOS 識別 CMOS 讀取硬件信息,從中找出可開機設備,一般自然是硬盤了。
當然,可開機設備不一定是硬盤,或者說你有兩個硬盤,這里就不做討論了。
Step 2: MBR & Boot loader
BIOS 找到第一個扇區(qū)之后就查找 MBR 的位置,這是最基本的引導程序(Boot loader),這個程序一旦啟動,BIOS 的任務才算圓滿。
MBR 中的引導程序運行,這個時候用戶可以對開機選項進行操作,例如轉(zhuǎn)交引導加載的任務給其他引導程序(之后還會提到)。
Step 3: Operating System
什么都做完了,當然該操作系統(tǒng)登場,負責提供其基本功能。
補充
如果你是老手,那么之前我說的這些肯定都知道了或者可以明確地指出我的錯誤,如果你是新手,那么你可能對上面的大段文字感到困惑。沒關(guān)系,現(xiàn)在我們開始補充一些必要的知識。
磁盤分區(qū)表
Step 2 中提到了第一個扇區(qū)。實際上,這個扇區(qū)不止包含 MBR,它還包含了一個分區(qū)表,用來對硬盤進行分割,文件系統(tǒng)的最小單位是柱面,所以它是以記錄柱面號來分割硬盤的。
例如第一分區(qū)是 1~100 柱面,那么分區(qū)記錄項第一個的內(nèi)容就是 1 和 100,其他以此類推。
我們所謂的"分區(qū)"實際上就是對這個分區(qū)表的記錄進行修改。
由于分區(qū)表只有 64 bytes,所以最多只能有 4 個分區(qū),這四個分區(qū)被稱為主(Primary)分區(qū)。
那么你肯定要有疑問:分區(qū)可不一定只有 4 個啊。
是的,這種情況下就有一個相對于主引導分區(qū)的概念——擴展(Extended)分區(qū)。
如果我們拿主分區(qū)的其中一個存放另外一個分區(qū)表儲存更多的分區(qū)信息,那我們就可以擁有更多分區(qū)。不是么。有時間理解一下下圖吧。

這里需要注意的地方是,如果有 4 個主分區(qū),我們就再也沒有辦法存放另外的分區(qū)信息,所以一般情況下會留下一個分區(qū)存放擴展分區(qū)信息,主分區(qū)因此最多只有 3 個。
擴展分區(qū)只能有一個(操作系統(tǒng)限制),擴展分區(qū)持續(xù)切割,形成新的分區(qū),這就是邏輯分區(qū)(logical partition)。我們平時能作為數(shù)據(jù)訪問的分區(qū)是主分區(qū)和邏輯分區(qū),擴展分區(qū)不能格式化。
多重引導
這里需要說明一下,每個分區(qū)都擁有自己的啟動扇區(qū),可以用來存放引導程序,并且該引導程序可以將管理權(quán)交給另一引導程序(其他分區(qū)的引導扇區(qū))或者自己引導所在的分區(qū),是的,可開機的內(nèi)核文件不是在引導扇區(qū)內(nèi),而是在各分區(qū)內(nèi)。
意思就是,你可以引導不止一種操作系統(tǒng),根據(jù)你在 boot menu 的選擇,可以引導任何在 MBR 指向中的系統(tǒng)。
- linux 安裝的時候可以選擇安裝在分區(qū)的啟動扇區(qū),或者 MBR,linux 的 loader 可以手動轉(zhuǎn)換引導程序。
- windows 會覆蓋掉 MBR 和自己所在的分區(qū)。你沒有辦法保留之前 MBR 中對 linux 引導程序的指向。
上述兩個原因表明了為何需要先安裝 windows 操作系統(tǒng),再安裝 linux,否則將不會在開機的時候看到 linux 引導選項。
GUID 分區(qū)方案
相對于 MBR 分區(qū)方案,GUID有以下優(yōu)點 (源自百度百科):
- 支持2TB以上的大硬盤。
- 每個磁盤的分區(qū)個數(shù)幾乎沒有限制。為什么說“幾乎”呢?是因為Windows系統(tǒng)最多只允許劃分128個分區(qū)。不過也完全夠用了。
- 分區(qū)大小幾乎沒有限制。又是一個“幾乎”。因為它用64位的整數(shù)表示扇區(qū)號,即0 ~
=18,446,744,073,709,551,616。夸張一點說,一個64位整數(shù)能代表的分區(qū)大小已經(jīng)是個“天文數(shù)字”了,若干年內(nèi)你都無法見到這樣大小的硬盤,更不用說分區(qū)了。 - 分區(qū)表自帶備份。在磁盤的首尾部分分別保存了一份相同的分區(qū)表。其中一份被破壞后,可以通過另一份恢復。
- 每個分區(qū)可以有一個名稱(不同于卷標)。
GUID 擴展了分區(qū)表頭,并且兼容了 MBR(第一扇區(qū)還是留有 MBR 的空間,為了兼容不支持 GUID 的硬盤),分區(qū)信息存放于分區(qū)表中,由 GUID HEADER 中的信息標識引導程序 efi 所在的分區(qū)。
開機過程(以下是我個人的理解,歡迎指正):
- BIOS 過程同 MBR 分區(qū)方案一致。
- 之后在 GUID HEADER 中查找 .efi 引導程序。
- 主引導程序掃描所有分區(qū)的引導扇區(qū)并運行其中的分區(qū)引導程序。
- 分區(qū)引導程序讀取分區(qū)內(nèi)容并引導操作系統(tǒng)。
寫在最后
MBR 的引導過程中的知識來源于 《鳥哥的 linux 私房菜》一書,對于 linux 操作系統(tǒng)感興趣的同學我覺得很值得一讀,GUID 相關(guān)知識還不夠全面,如果各位看客發(fā)現(xiàn)了錯誤,歡迎指正,也歡迎各位與我交流,共同成長。