主開機紀錄
主引導記錄(英語: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"是一個分區的激活標誌,表示系統可引導[1];"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個以上的主要分區是不可能的。這裡就需要引出擴展分區了。擴展分區也是主要分區的一種,但它與主分區的不同在於理論上可以劃分為無數個邏輯分區。[2]
擴展分區中邏輯驅動器的引導記錄是鏈式的。每一個邏輯分區都有一個和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空間內。[3]如果硬盤太大則必須改用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硬碟上的作業系統,而不是活動主分區上的引導程序。
注釋
[編輯]- ^ 對於一個操作系統而言,系統分區設為活動分區並不是必須的,這主要視引導程序而定,如果使用的引導程序是Grub4Dos,MBR中的引導代碼僅僅按照分區的順序依次探測第二階段引導器grldr的位置,並運行第一個探測到的grldr文件。
- ^ 一個硬盤的分區個數還要受到分區大小的限制,因為硬盤是按照柱面分區的:一個分區至少要占一個柱面。但有一點需要注意,由於現在的硬盤結構已經和老式硬盤有了很大區別,其尋址結構也不再是CHS尋址,所以這裡的柱面大小不同於相關軟件顯示的柱面大小。對於物理結構上有n個面的硬盤,其分區空間的最小值為:n ×扇區/磁道× 512字節。
- ^ 根據16字節分區表的結構:當前分區的扇區數用4個字節表示,前面各分區扇區數的總和也是4個字節,而232×512 = 2 199 023 255 552 Byte