MBR、開機流程與主引導分區(qū)

預備知識

  • 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ū)。不是么。有時間理解一下下圖吧。

普遍的硬盤分區(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)點 (源自百度百科):

  1. 支持2TB以上的大硬盤。
  2. 每個磁盤的分區(qū)個數(shù)幾乎沒有限制。為什么說“幾乎”呢?是因為Windows系統(tǒng)最多只允許劃分128個分區(qū)。不過也完全夠用了。
  3. 分區(qū)大小幾乎沒有限制。又是一個“幾乎”。因為它用64位的整數(shù)表示扇區(qū)號,即0 ~
    =18,446,744,073,709,551,616。夸張一點說,一個64位整數(shù)能代表的分區(qū)大小已經(jīng)是個“天文數(shù)字”了,若干年內(nèi)你都無法見到這樣大小的硬盤,更不用說分區(qū)了。
  4. 分區(qū)表自帶備份。在磁盤的首尾部分分別保存了一份相同的分區(qū)表。其中一份被破壞后,可以通過另一份恢復。
  5. 每個分區(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)了錯誤,歡迎指正,也歡迎各位與我交流,共同成長。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容