硬碟的第一個扇區被保留為主開機磁區,它位於整個硬碟的0磁軌0柱面1扇區,包括硬碟主引導記錄MBR(Main Boot Record)和分區表DPT(Disk Partition Table)。其中主引導記錄的作用就是檢查分區表是否正確以及確定哪個分區為引導分區,並在程式結束時把該分區的啟動程式(也就是作業系統開機磁區)調入記憶體加以執行。至於分區表,很多人都知道,以80H或00H為開始標誌,以55AAH為結束標誌,共64位元組,位於本扇區的最末端。
硬碟主開機磁區 = 硬碟主引導記錄(MBR) + 硬碟分區表(DPT)
用FDISK 進行硬碟分區時產生的, 它屬於整個硬碟而不屬於某個獨立的DOS 分區, 是硬碟正確引導和使用的必要條件.
物理位置:0柱面0磁頭1扇區(Cylinder 0, Head 0, Sector 1)
系統扇區(System Secotrs): 0C-0H-2S,0C-0H-63S, 共 62 Sectors
大小:512位元組
其中:MBR 446位元組(0000--01BD),DPT 64位元組(01BE--01FD),結束標誌2位元組(55 AA)
功能:MBR通過檢查DPT分區資訊引導系統跳轉至DBR
詳解: (DEBUG -A: MOV AX,0201 MOV BX,0200 MOV CX,0001 MOV DX,0080 INT 13)
000H--08AH MBR啟動程式(尋找開機分區)
08BH--0D9H MBR啟動字串
0DAH--1BCH 保留( "0 ")
1BEH--1FDH 硬碟分區表
1FEH--1FFH 結束標誌(55AA)
硬碟分區表(DPT)
位移地址 01BE
位元組數 1
含義分析 分區類型:00表示非使用中的磁碟分割;80表示使用中的磁碟分割;其他為無效分區
位移地址 01BF ~ 01C1
位元組數 3
含義分析 分區的起始地址(磁頭/扇區/柱面):通常第一分區的起始地址開始於1磁頭0柱面1扇區,因此這三個位元組應為010100
位移地址 01C2
位元組數 1
含義分析 常見的分區作業系統的類型:00 [none-use] 04 [DOS FAT16 <32M] 05 [EXTEND] 06 [DOS FAT16 >32M] 07 [NTFS (OS/2)] 0B [ FAT32] 83 [LINUX >64M]
位移地址 01C3 ~ 01C5
位元組數 3
含義分析 該分區的結束位址(磁頭/扇區/柱面)
位移地址 01C6 ~ 01C9
位元組數 4
含義分析 該分區起始邏輯扇區[線上性定址方式下的分區相對扇區地址]
位移地址 01CA ~ 01CD
位元組數 4
含義分析 該分區佔用的總扇區數
注釋: 注意分區的起始地址 (磁頭/扇區/柱面) 和結束位址 (磁頭/扇區/柱面) 中位元組分配:
00000000 01000001 00010101 (第一位元組為磁頭,第二位元組2~7位為扇區,第二位元組0~1位和第三位元組為柱面)
DPT 總共64位元組(01BE--01FD), 如上所示每個分區佔16個位元組, 所以可以表示四個分區, 這也就是為什麼一個磁碟的主要磁碟分割和擴充分區之和總共只能有四個的原因.
邏輯磁碟機
擴充分區的資訊位於以上所示的硬碟分區表(DPT)中, 而邏輯磁碟機的資訊則位於擴充分區的起始扇區, 即該分區的起始地址(柱面/扇區/磁軌)所對應的扇區, 該扇區中的資訊與硬碟主開機磁區的區別是不包含MBR,而16位元組的分區資訊則表示的是邏輯磁碟機的起始和結束位址等.
所以, 在磁碟僅含有一個主要磁碟分割, 一個擴充分區(包含多個邏輯磁碟機)的情況下,即使由於病毒或其他原因導致硬碟主開機磁區的資料丟失(包括DPT),也可以通過邏輯磁碟機的資料來恢複整個硬碟.
絕對扇區=磁頭號*每道扇區數[3F] + 柱面號*最大磁頭數[一般是FF]*每道扇區數 + 扇區號 - 1
最大磁頭數=(((總扇區數 + 起始邏輯扇 - 扇區止) / 每道扇區數[3F])-磁頭號止) / 柱面號止
或 最大磁頭數=(((起始邏輯扇 +1 - 扇區起) / 每道扇區數[3F])-磁頭號起) / 柱面號起
例如: 以下是一個硬碟的分區情況.
磁頭 柱面 扇區 磁頭 柱面 扇區 起始扇(邏輯) 結束扇 總共扇區
MBR 0 1 0
C 1 0 1 239 276 63 63 4,188,239 4,188,177
擴 0 277 1 239 554 63 4,188,240 8,391,599 4,203,360
D 1 277 1 239 554 63 4,188,303 8,391,599 4,203,297
如果主要磁碟分割表損壞, 則可以通過手工尋找擴充分區表中所包含的邏輯磁碟機資料, 在本例中就是D盤所對應的資料, 然後將其起始扇(邏輯)減去63就是所對應的擴充分區的起始扇(邏輯), 將其起始地址(磁頭/扇區/柱面)改為0柱面就是擴充分區的起始地址. 然後通過擴充分區就可以得到主要磁碟分割C的資訊, 然後就可以使用FDISK/MBR命令和手工填寫分區表恢複整個硬碟.
該例所對應的分區表資料:
80 01
01 00 06 EF 7F 14 3F 00 00 00 11 E8 3F 00 00 00
41 15 05 EF BF 2A 50 E8 3F 00 60 23 40 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
演算法過程: (以第一個分區為例)
EF 7F 14 對應的磁頭號EFH = 239D, 柱面號7F高二位與14H=114H = 276D, 扇區號7F低六位= 3FH = 63D
起始邏輯扇= 3F 00 00 00 = 3FH = 63D
分區總扇區數= 11 E8 3F 00 = 3FE811H = 4188177D
最大磁頭數= ((((4188177+63)-63)/63)-239)/276=240D = 0F0H
01 01 00 對應的邏輯扇 = 1*63 + 240*0*63 + 1 - 1 = 63D
EF 7F 14 對應的邏輯扇 = 239*63 + 240*276*63 + 63 - 1 = 4188239D
擴充分區表資料:
00 01
41 15 07 EF BF 2A 8F E8 3F 00 21 23 40 00
注意: 邏輯起始扇區和總共分區數是左邊為低位, 如該例的擴充分區的起始地址為8F E8 3F 00轉換十進位時要先變為00 3F E8 8F, 總共佔用分區數21 23 40 00要先變為00 40 23 21, 同理當手工填寫該值時也要進行高低位轉換.
擴充邏輯盤尋找說明:
1 在主要磁碟分割的分區表中,尋找擴充分區的物理地址
2 在擴充分區地址所指扇區尾部,尋找擴充分區表(擴充卷),結構與主要磁碟分割表相同
3 擴充分區表的物理地址中,將磁頭數加1,其餘不變,則為第一個邏輯磁碟機(如D盤)的BOOT扇區物理地址
4 根據擴充磁碟機的系統分類(FAT16/FAT32,以2048MB為界限),查看FAT表與ROOT區
5 如果還有E、F……等盤,則繼續尋找符合要求的BOOT扇區,BOOT扇區規定在每個磁頭的1號扇區
系統啟動過程主要由一下幾步組成(以硬碟啟動為例)
1. 開機
2. BIOS 加電自檢 ( Power On Self Test -- POST ) 記憶體位址為 0FFFF : 0000
3. 將硬碟第一個扇區 (0頭0道[柱面]1扇區,也就是Boot Sector) 讀入記憶體位址0000 : 7C00 處.
4. 檢查(WORD) 0000 : 7DFE 是否等於0xAA55,若不等於則轉去嘗試其它啟動介質
如果沒有其它啟動介質則顯示"No ROM BASIC" 然後死機.
5. 跳轉到0000 : 7C00 處執行MBR 中的程式.
6. MBR 首先將自己複製到 0000 : 0600 處, 然後繼續執行.
7. 在主要磁碟分割表中搜尋標誌為活動的分區. 如果發現沒有使用中的磁碟分割或有不止一個使用中的磁碟分割, 則轉停止.
8. 將使用中的磁碟分割的第一個扇區讀入記憶體位址 0000 : 7C00 處.
9. 檢查(WORD) 0000 : 7DFE是否等於0xAA55,若不等於則顯示"Missing Operating System"然後停止,或嘗試磁碟片啟動
10. 跳轉到0000 : 7C00處繼續執行特定系統的啟動程式.
11. 啟動系統 ...
以上步驟中 2,3,4,5 步是由 BIOS 的引導程式完成. 6,7,8,9,10步由MBR中的引導程式完成.