主開機紀錄

**主開機紀錄**（Master Boot Record，縮寫：MBR），又叫做**主引導磁區**，是電腦開機後存取硬碟時所必須要讀取的首個磁區，它在硬碟上的三維位址為（柱面，磁頭，磁區）＝（0，0，1）。在深入討論主引導磁區內部結構的時候，有時也將其開頭的 446 位元組內容特指為「主開機紀錄」（MBR），其後是 4 個 16 位元組的「磁碟分割區表」（DPT），以及 2 位元組的結束標誌（55AA）。因此，在使用「主開機紀錄」（MBR）這個術語的時候，需要根據具體情況判斷其到底是指整個主引導磁區，還是主引導磁區的前 446 位元組。

主引導磁區記錄著硬碟本身的相關資訊以及硬碟各個分割區的大小及位置資訊，是資料資訊的重要入口。如果它受到破壞，硬碟上的基本資料結構資訊將會遺失，需要用繁瑣的方式試探性的重建資料結構資訊後才可能重新存取原先的資料。主引導磁區內的資訊可以通過任何一種基於某種作業系統的分割區工具軟體寫入，但和某種作業系統沒有特定的關係，即只要建立了有效的主開機紀錄就可以引導任意一種作業系統（作業系統是建立在進階格式化的硬碟分割區之上，是和一定的檔案系統相聯絡的）。

對於硬碟而言，一個磁區可能的位元組數為 128×2n（n=0,1,2,3）。大多情況下，取 n=2，即一個磁區（sector）的大小為 512 位元組。

## 主開機紀錄的組成

### 啟動代碼

主開機紀錄最開頭是第一階段引導代碼。其中的硬碟引導程式的主要作用是檢查分割區表是否正確並且在系統硬體完成自檢以後將控制權交給硬碟上的引導程式（如 GNU GRUB）。它不依賴任何作業系統，而且啟動代碼也是可以改變的，從而能夠實現多系統引導。

### 硬碟分割區表

硬碟分割區表占據主引導磁區的 64 個位元組（偏移 01BEH-- 偏移 01FDH），可以對四個分割區的資訊進行描述，其中每個分割區的資訊占據 16 個位元組。具體每個位元組的定義可以參見**硬碟分割區結構資訊**。下面是一個例子：

如果某一分割區在硬碟分割區表的資訊如下

　
: 80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00

則我們可以看到，最前面的 "80" 是一個分割區的啟用標誌，表示系統可引導；"01 01 00" 表示分割區開始的磁頭號為 1，開始的磁區號為 1，開始的柱面號為 0；"0B" 表示分割區的系統類型是 FAT32，其他比較常用的有 04（FAT16）、07（NTFS）；"FE BF FC" 表示分割區結束的磁頭號為 254，分割區結束的磁區號為 63、分割區結束的柱面號為 764；"3F 00 00 00" 表示首磁區的相對磁區號為 63（小端序）；"7E 86 BB 00" 表示總磁區數為 12289662（小端序）。

對於大於 8.4G 的現代硬碟，CHS 已經無法表示，BIOS 使用 LBA 模式，對於超出的部分，CHS 值通常設為 0xFEFFFF，並加以忽略，直接使用 Offset 0x08-0x0c 的 4 位元組相對值，再進行內部轉換。

### 結束標誌字

**結束標誌字** 55，AA（偏移 1FEH－偏移 1FFH）最後兩個位元組，是檢驗主開機紀錄是否有效的標誌。

## 主引導磁區的讀取流程

* 系統開機或者重新啟動。
1. BIOS 加電（台灣用語：啟動）自檢（Power On Self Test -- POST）。BIOS 執行記憶體位址為 FFFF:0000H 處的跳轉指令，跳轉到固化在 ROM 中的自檢程式處，對系統硬體（包括記憶體）進行檢查。
2. 讀取主開機紀錄（MBR）。當 BIOS 檢查到硬體正常並與 CMOS 中的設定相符後，按照 CMOS 中對啟動裝置的設定順序檢測可用的啟動裝置。BIOS 將相應啟動裝置的第一個磁區（也就是 MBR 磁區）讀入記憶體位址為 0000:7C00H 處。
3. 檢查 0000:01FEH-0000:01FFH（MBR 的結束標誌位）是否等於 55AAH，若不等於則轉去嘗試其他啟動裝置，如果沒有啟動裝置滿足要求則顯示 "NO ROM BASIC" 然後當機。
4. 當檢測到有啟動裝置滿足要求後，BIOS 將控制權交給相應啟動裝置。啟動裝置的 MBR 將自己複製到 0000:0600H 處，然後繼續執行。
5. 根據 MBR 中的引導代碼啟動引導程式。
* 事實上，BIOS 不僅檢查 0000:01FEH-0000:01FFH（MBR 的結束標誌位）是否等於 55AAH，往往還對磁碟是否有防寫、主引導磁區中是否存在活動分割區等進行檢查。如果發現磁碟有防寫，則顯示磁碟防寫出錯資訊；如果發現磁碟中不存在活動分割區，則顯示類似如下的資訊「Remove disk or other media Press any key to restart」。

## 主開機紀錄與硬碟分割區

從**主開機紀錄**的結構可以知道，它僅僅包含一個 64 個位元組的**硬碟分割區表**。由於每個分割區資訊需要 16 個位元組，所以對於採用 MBR 型分割區結構的硬碟，最多只能辨識 4 個主要分割區（Primary partition）。所以對於一個採用此種分割區結構的硬碟來說，想要得到 4 個以上的主要分割區是不可能的。這裡就需要引出擴充分割區了。擴充分割區也是主要分割區的一種，但它與主分割區的不同在於理論上可以劃分為無數個邏輯分割區。

擴充分割區中邏輯驅動器的引導記錄是鏈式的。每一個邏輯分割區都有一個和 MBR 結構類似的**擴充引導記錄**（EBR），其分割區表的第一項指向該邏輯分割區本身的引導磁區，第二項指向下一個邏輯驅動器的 EBR，分割區表第三、第四項沒有用到。

Windows 系統預設情況下，一般都是只劃分一個主分割區給系統，剩餘的部分全部劃入擴充分割區。這裡有下面幾點需要注意：

* 在 MBR 分割區表中最多 4 個主分割區或者 3 個主分割區＋1 個擴充分割區，也就是說擴充分割區只能有一個，然後可以再細分為多個邏輯分割區。
* 在 Linux 系統中，硬碟分割區命名為 sda1－sda4 或者 hda1－hda4（其中 a 表示硬碟編號可能是 a、b、c 等等）。在 MBR 硬碟中，分割區號 1－4 是主分割區（或者擴充分割區），邏輯分割區號只能從 5 開始。
* 在 MBR 分割區表中，一個分割區最大的容量為 2T，且每個分割區的起始柱面必須在這個 disk 的前 2T 內。你有一個 3T 的硬碟，根據要求你至少要把它劃分為 2 個分割區，且最後一個分割區的起始磁區要位於硬碟的前 2T 空間內。如果硬碟太大則必須改用 GPT。

## MBR 分割區表與 GPT 分割區表的關係

與支援最大卷為 2 TB（Terabytes）並且每個磁碟最多有 4 個主分割區（或 3 個主分割區，1 個擴充分割區和無限制的邏輯驅動器）的 MBR 磁碟分割區的樣式相比，GPT 磁碟分割區樣式支援最大為 128 個分割，一個分割最大 18 EB（Exabytes），只受到作業系統限制（由於分割區表本身需要占用一定空間，最初規劃硬碟分割區時，留給分割區表的空間決定了最多可以有多少個分割區，IA-64 版 Windows 限制最多有 128 個分割區，這也是 EFI 標準規定的分割區表的**最小**尺寸）。與 MBR 分割區的磁碟不同，至關重要的平台運算元據位於分割區，而不是位於非分割區或隱藏磁區。另外，GPT 分割區磁碟有備份分割區表來提高分割區資料結構的完整性。在 UEFI 系統上，通常是通過 ESP 分割區中的 EFI 應用程式檔案啟動 GPT 硬碟上的作業系統，而不是活動主分割區上的引導程式。

## 注釋

## 外部連結

* （英文）硬碟結構（頁面存檔備份，存於網際網路檔案館）
* （英文）主分割區、擴充分割區和邏輯分割區（頁面存檔備份，存於網際網路檔案館）
* （英文）使用 GPT 分割區表（頁面存檔備份，存於網際網路檔案館）
* （簡體中文）MBR 的修復
* （繁體中文）FDISK /MBR 重新寫入主啟動記錄（頁面存檔備份，存於網際網路檔案館）
* （簡體中文）Linux 引導過程內幕（頁面存檔備份，存於網際網路檔案館）
* （簡體中文）FAT 檔案系統原理
* （簡體中文）檔案系統（頁面存檔備份，存於網際網路檔案館）