主引導記錄

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

位址｜描述｜長度（位元組）

Hex｜Oct｜Dec

`0000`｜`0000`｜0｜代碼區｜440（最大446）

`01B8`｜`0670`｜440｜選用磁碟標誌｜4

`01BC`｜`0674`｜444｜一般為空值; 0x0000｜2

`01BE`｜`0676`｜446｜標準MBR分區表規劃（四個16 byte的主分區表入口）｜64

`01FE`｜`0776`｜510｜55h｜MBR有效標誌：0x55AA｜2

`01FF`｜`0777`｜511｜AAh

MBR，總大小：446 + 64 + 2 =｜512

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

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

## 主引導記錄的組成

### 啟動代碼

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

### 硬碟分區表

偏移｜長度（字節）｜意義

00H｜1｜分區狀態：00-->非活動分區；80-->活動分區；其它數值沒有意義

01H｜1｜分區起始磁頭號（HEAD），用到全部8位

02H｜2｜分區起始扇區號（SECTOR），占據02H的位0－5；該分區的起始磁柱號（CYLINDER），占據02H的位6－7和03H的全部8位

04H｜1｜文件系統標誌位

05H｜1｜分區結束磁頭號（HEAD），用到全部8位

06H｜2｜分區結束扇區號（SECTOR），占據06H的位0－5；該分區的結束磁柱號（CYLINDER），占據06H的位6－7和07H的全部8位

08H｜4｜分區起始相對扇區號

0CH｜4｜分區總的扇區數

硬碟分區表占據主引導扇區的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）最後兩個字節，是檢驗主引導記錄是否有效的標誌。

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

- 系統開機或者重啟。
- BIOS加電（台灣用語：開機）自檢（Power On Self Test -- POST）。BIOS執行記憶體地址為FFFF:0000H處的跳轉指令，跳轉到固化在ROM中的自檢程序處，對系統硬體（包括記憶體）進行檢查。
- 讀取主引導記錄（MBR）。當BIOS檢查到硬體正常並與CMOS中的設置相符後，按照CMOS中對啟動設備的設置順序檢測可用的啟動設備。BIOS將相應啟動設備的第一個扇區（也就是MBR扇區）讀入記憶體地址為0000:7C00H處。
- 檢查0000:01FEH-0000:01FFH（MBR的結束標誌位）是否等於55AAH，若不等於則轉去嘗試其他啟動設備，如果沒有啟動設備滿足要求則顯示"NO ROM BASIC"然後死機。
- 當檢測到有啟動設備滿足要求後，BIOS將控制權交給相應啟動設備。啟動設備的MBR將自己複製到0000:0600H處，然後繼續執行。
- 根據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硬碟上的作業系統，而不是活動主分區上的引導程序。