1. 程式人生 > >主引導扇區(Master Boot Record:MBR)

主引導扇區(Master Boot Record:MBR)

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

標準 MBR 結構
位址 描述 長度
位元組
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值通常設為 FEFFFF, 並加以忽略,直接使用08-0f的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: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

外部連結[編輯]