mbr[主引導記錄(Master Boot Record)]

主引導記錄(MBR,Main Boot Record)是位於磁碟最前邊的一段引導(Loader)代碼。它負責磁碟作業系統(DOS)對磁碟進行讀寫時分區合法性的判別、分區引導信息的定位,它由磁碟作業系統(DOS)在對硬碟進行初始化時產生的。

簡介

MBR結構圖 MBR結構圖

通常,我們將包含MBR引導代碼的扇區稱為主引導扇區。因這一扇區中,引導代碼占有絕大部分的空間,故而將習慣將該扇區稱為MBR扇區(簡稱MBR)。由於這一扇區承擔有不同於磁碟上其他普通存儲空間的特殊管理職能,作為管理整個磁碟空間的一個特殊空間,它不屬於磁碟上的任何分區,因而分區空間內的格式化命令不能清除主引導記錄的任何信息。 主引導扇區由三個部分組成(共占用512個位元組):

1.主引導程式即主引導記錄(MBR)(占446個位元組)

可在FDISK程式中找到,它用於硬碟啟動時將系統控制轉給用戶指定的並在分區表中登記了的某個作業系統。

2.磁碟分區表項(DPT,Disk Partition Table)

由四個分區表項構成(每個16個位元組)。

負責說明磁碟上的分區情況,其內容由磁碟介質及用戶在使用FDISK定義分區時決定。(具體內容略)

3.結束標誌(占2個位元組)

其值為AA55,存儲時低位在前,高位在後,即看上去是55AA(十六進制)。

詳解

MBR的讀取

硬碟的引導記錄(MBR)是不屬於任何一個作業系統,也不能用作業系統提供的磁碟操作命令來讀取它。但我們可以用ROM-BIOS中提供的INT13H的2號功能來讀出該扇區的內容,也可用軟體工具Norton8.0中的DISKEDIT.EXE來讀取。

用INT13H的讀磁碟扇區功能的調用參數如下:

入口參數:AH=2 (指定功能號)

AL=要讀取的扇區數

DL=磁碟號(0、1-軟碟;80、81-硬碟)

DH=磁頭號

CL高2位+CH=柱面號

CL低6位=扇區號

CS:BX=存放讀取數據的記憶體緩衝地址

出口參數:CS:BX=讀取數據存放地址

錯誤信息:如果出錯CF=1 AH=錯誤代碼

用DEBUG讀取位於硬碟0柱面、0磁頭、1扇區的操作如下:

A>DEBUG

-A 100

XXXX:XXXX MOV AX,0201 (用功能號2讀1個扇區)

XXXX:XXXX MOV BX,1000 (把讀出的數據放入緩衝區的地址為CS:1000)

XXXX:XXXX MOV CX,0001 (讀0柱面,1扇區)

XXXX:XXXX MOV DX,0080 (指定第一物理盤的0磁頭)

XXXX:XXXX INT 13

XXXX:XXXX INT 3

XXXX:XXXX (按回車鍵)

-G=100 (執行以上程式段)

-D 1000 11FF (顯示512位元組的MBR內容)

MBR的組成

一個扇區的硬碟主引導記錄MBR由如圖6-15所示的4個部分組成。

·主引導程式(偏移地址0000H--0088H),它負責從活動分區中裝載,並運行系統引導程式。

·出錯信息數據區,偏移地址0089H--00E1H為出錯信息,00E2H--01BDH全為0位元組。

·分區表(DPT,Disk Partition Table)含4個分區項,偏移地址01BEH--01FDH,每個分區表項長16個位元組,共64位元組為分區項1、分區項2、分區項3、分區項4。

·結束標誌字,偏移地址01FE--01FF的2個位元組值為結束標誌55AA,如果該標誌錯誤系統就不能啟動。

0000-0088 Master Boot Record 主引導程式 主引導 程式
0089-01BD 出錯信息數據區 數據區
01BE-01CD 分區項1(16位元組) 分區表
01CE-01DD 分區項2(16位元組)
01DE-01ED 分區項3(16位元組)
01EE-01FD 分區項4(16位元組)
01FE 55 結束標誌
01FF AA

圖6-15 MBR的組成結構圖

MBR中的分區信息結構

占用512個位元組的MBR中,偏移地址01BEH--01FDH的64個位元組,為4個分區項內容(分區信息表)。它是由磁碟介質類型及用戶在使用 FDISK定義分區說確定的。在實際套用中,FDISK對一個磁碟劃分的主分區可少於4個,但最多不超過4個。每個分區表的項目是16個位元組,其內容含義如表6-19所示。

表6-19 分區項表(16位元組)內容及含義

存貯位元組位 內容及含義
第1位元組 引導標誌。若值為80H表示活動分區,若值為00H表示非活動分區。
第2、3、4位元組 本分區的起始磁頭號、扇區號、柱面號。其中: 磁頭號——第2位元組; 扇區號——第3位元組的低6位; 柱面號——為第3位元組高2位+第4位元組8位。
第5位元組 分區類型符。 00H——表示該分區未用(即沒有指定); 06H——FAT16基本分區; 0BH——FAT32基本分區; 05H——擴展分區; 07H——NTFS分區; 0FH——(LBA模式)擴展分區(83H為Linux分區等)。
第6、7、8位元組 本分區的結束磁頭號、扇區號、柱面號。其中: 磁頭號——第6位元組; 扇區號——第7位元組的低6位; 柱面號——第7位元組的高2位+第8位元組。
第9、10、11、12位元組 本分區之前已用了的扇區數。
第13、14、15、16位元組 本分區的總扇區數。

MBR的主要功能及工作流程

啟動PC機時,系統首先對硬體設備進行測試,測試成功後進入自舉程式INT 19H,然後讀系統磁碟0柱面、0磁頭、1扇區的主引導記錄(MBR)內容到記憶體指定單元0:7C00地址開始的區域,並執行MBR程式段。

硬碟的主引導記錄(MBR)是不屬於任何一個作業系統的,它先於所有的作業系統而被調入記憶體,並發揮作用,然後才將控制權交給主分區(活動分區)內的作業系統,並用主分區信息表來管理硬碟。

MBR程式段的主要功能如下:

·檢查硬碟分區表是否完好。

·在分區表中尋找可引導的“活動”分區。

·將活動分區的第一邏輯扇區內容裝入記憶體。在DOS分區中,此扇區內容稱為DOS引導記錄(DBR)。

硬碟邏輯驅動器的分區表鏈結構

硬碟是由很多個512位元組的扇區組成,而這些扇區會被組織成一個個的“分區”。

硬碟的分區規則是:一個分區的所有扇區必須連續,硬碟可以有最多4個物理上的分區,這4個物理分區可以是4個主分區或者3個主分區加一個擴展分區。在DOS/Windows管理下的擴展分區里,可以而且必須再繼續劃分邏輯分區(邏輯盤)。

從MS-DOS3.2問世以後,用戶就可以在一個物理硬碟驅動器上劃分一個主分區和一個擴展分區,並在擴展分區上創建多個邏輯驅動器,也即我們常說的一個物理盤上多個邏輯盤。

舉一個例子,一個10G的硬碟,安裝Windows,有C:、D:、E:三個邏輯盤,那么它的分區情況可以是如下的方式:

分區一:主分區2GB,格式化為C:盤。

分區二:擴展分區8GB。它被再劃分為兩個各4GB的邏輯盤,格式化為以D:和E:盤。

在一個劃分有多個主分區的硬碟上,則可安裝多個不同的作業系統。如Windows、Linux、Solaris等。每個作業系統自己去管理分配給自己的分區。但是,每個作業系統對分區的操作方式是不同的。對於DOS/Windows來說,它能夠把它所能管轄的一個主分區和一個擴展分區格式化,然後按照 C:、D:、E:邏輯盤的方式來管理。而Linux則不同,它是把“分區”看作一個設備,既沒有“擴展分區”的概念,也沒有“邏輯盤”的概念。

1.邏輯盤的連結關係

在FAT 檔案系統中,硬碟的邏輯盤字元用字元C:、D:、E:、...、Z:來表示。主分區一般被格式化成C:盤,從D:盤開始的邏輯盤是建立在擴展分區之上的。在系統進行讀寫操作時,DOS首先查看主引導記錄(MBR)中的分區信息表,分區項將指向活動主分區的DOS引導記錄(DBR)。

MBR中的分區表位於0柱面、0磁頭、1扇區內,以位移1BEH開始的第一分區表作為鏈首,有表內的連結表項指示下一分區表的物理位置(xx柱面、0磁頭、1扇區),在該位置的扇區內同樣位移1BEH處,保存著第2張分區表,依次類推,直至指向最後一張分區表的物理位置(yy柱面、0磁頭、1扇區)。因該分區表內不存在連結表項,即作為分區表鏈的鏈尾。如圖6-17所示。

硬碟 第一個虛擬 第二個虛擬 第三個虛擬

MBR分區表 MBR分區表 MBR分區表 MBR分區表

定義C:盤 ------------> 定義D:盤 -----------> 定義E:盤 ------------> 定義F:盤
描述剩餘空間 描述剩餘空間 描述剩餘空間 描述剩餘空間


未用 未用 未用 未用


未用 未用 未用 未用


55AA 55AA 55AA 55AA


圖6-17 具有4個邏輯盤的分區鍊表示意圖

舉例來說,本來位於柱面0、磁頭0、扇區1上的分區表的每一項記錄和主分區的DBR之間有一對應的關係,但是,如果在擴展分區中建立了多個邏輯盤,例如D:、E:、F:,該分區表中的分區項可指向第一個邏輯盤:,但對於其它的邏輯盤,則就沒有這種對應關係了。為能夠查找擴展分區中的多個邏輯盤,DOS系統可做如下安排:

·如果硬碟只有一個主分區,即是將整個硬碟作為一個邏輯盤C:,則分區命令FDISK只在硬碟的柱面0、磁頭0、扇區1上建立一個MBR。

·如果硬碟被劃分成2--4個分區,則FDISK除了在柱面0、磁頭0、扇區1上建立一個MBR之外,還在擴展分區的每個邏輯盤的起始扇區上都建立一個虛擬MBR,每一個虛擬MBR用於擴展分區上的一個邏輯盤。

·擴展分區的第一個扇區不是用於一個邏輯盤的DBR,而是指向一個“擴展的”分區表,即第一個虛擬的MBR。該邏輯盤DBR扇區的起點應為虛擬MBR的下一個磁軌1扇區。

這些MBR中的各個分區表連結成一個如圖6-17所示的分區表鏈。這是一個硬碟具有4個表項所描述的內容。

DOS就是用這種方法來使一個擴展分區看起來象是有多個硬碟。

從圖6-17中可以看到,位於磁碟柱面0、磁頭0、扇區1上MBR的分區表指向基本分區及擴展分區中的第一個邏輯盤。

主引導記錄的組成

1.1啟動代碼

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

1.2硬碟分區表

硬碟分區表占據主引導扇區的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值通常設為 FEFFFF, 並加以忽略,直接使用08-0f的4位元組相對值,再進行內部轉換。

硬碟分區表結構信息

長度 意義
1位元組 引導標誌(Boot Indicator):00-->非活動分區;80--> 活動分區;其它數值沒有意義
1位元組 開始磁頭(Start Head)
6位 起始扇區(Start Sector):使用1個位元組中的低6位,即0~5位
10位 起始柱面(Start Cylinder):使用上個位元組中的高2位,再加上1個位元組8位,共10位
1位元組 分區類型描述(Partition type indicator):定義了分區的類型
1位元組 結束磁頭(End Head)
6位 結束扇區(End Sector ) 使用1個位元組中的低6位,即0~5位
10位 結束柱面(End Cylinder )使用上個位元組中的高2位,再加上1個位元組8位,共10位
4位元組 本分區之前使用的扇區數(Sector preceding partition):該分區的起始物理扇區地址
4位元組 本分區的總扇區數(Sector in partition):該分區所包含的扇區總數

1.3結束標誌字

結束標誌字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:7CFEH-0000:7CFFH(MBR的結束標誌位)是否等於55AAH,若不等於則轉去嘗試其他啟動設備,如果沒有啟動設備滿足要求則顯示“NO ROM BASIC”然後當機。

4.當檢測到有啟動設備滿足要求後,BIOS將控制權交給相應啟動設備。啟動設備的MBR將自己複製到0000:0600H處,然後繼續執行。

5.根據MBR中的引導代碼啟動引導程式。

事實上,BIOS不僅檢查0000:7CFEH-0000:7CFFH(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 EB(Exabytes)並且每磁碟的分區數沒有上限,只受到作業系統限制(由於分區表本身需要占用一定空間,最初規劃硬碟分區時,留給分區表的空間決定了最多可以有多少個分區,IA-64版Windows限制最多有128個分區,這也是EFI標準規定的分區表的最小尺寸)。與MBR分區的磁碟不同,至關重要的平台運算元據位於分區,而不是位於非分區或隱藏扇區。另外,GPT分區磁碟有備份分區表來提高分區數據結構的完整性。

注釋

[1]對於一個作業系統而言,系統分區設為活動分區並不是必須的,這主要視引導程式而定,如果使用的引導程式是Grub4Dos,MBR中的引導代碼僅僅按照分區的順序依次探測第二階段引導器grldr的位置,並運行第一個探測到的grldr檔案。

[2]一個硬碟的分區個數還要受到分區大小的限制,因為硬碟是按照柱面分區的:一個分區至少要占一個柱面。但有一點需要注意,由於現在的硬碟結構已經和老式硬碟有了很大區別,其定址結構也不再是CHS定址,所以這裡的柱面大小不同於相關軟體顯示的柱面大小。對於物理結構上有n個面的硬碟,其分區空間的最小值為:n × 扇區/磁軌 × 512位元組。

[3]根據16位元組分區表的結構:當前分區的扇區數用4個位元組表示,前面各分區扇區數的總和也是4個位元組,而232 × 512 = 2 199 023 255 552 Byte

熱門詞條

聯絡我們