主引導區
硬碟專業術語
硬碟的第一個扇區被保留為主引導扇區,它位於整個硬碟的0磁頭0柱面1扇區,包括硬碟主引導記錄MBR(Main Boot Record)和分區表DPT(Disk Partition Table)。
= 硬碟主引導記錄(MBR) + 硬碟分區表(DPT)
用FDISK 進行硬碟分區時產生的,它屬於整個硬碟而不屬於某個獨立的DOS 分區,是硬碟正確引導和使用的必要條件.
物理位置:0柱面0磁頭1扇區(Cylinder 0,Head 0,Sector 1)
系統扇區(System Sectors):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)
偏移地址01BE
位元組數 1
含義分析 分區類型:00表示非活動分區;80表示活動分區;其他為無效分區
位元組數 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號扇區
以硬碟啟動為例
⒈開機
⒊將硬碟第一個扇區(0頭0道[柱面]1扇區,也就是Boot Sector)讀入內存地址0000 : 7C00 處.
⒋檢查(WORD) 0000 : 7DFE 是否等於0xAA55,若不等於則轉去嘗試其它啟動介質
如果沒有其它啟動介質則顯示"No ROM BASIC" 然後死機.
⒌跳轉到0000 : 7C00 處執行MBR中的程序.
⒍MBR 首先將自己複製到 0000 : 0600 處,然後繼續執行.
⒎在主分區表中搜索標誌為活動的分區. 如果發現沒有活動分區或有不止一個活動分區,則轉停止.
⒏將活動分區的第一個扇區讀入內存地址 0000 : 7C00處.
⒐檢查(WORD) 0000 : 7DFE是否等於0xAA55,若不等於則顯示"Missing Operating System"然後停止,或嘗試軟盤啟動
⒑跳轉到0000 : 7C00處繼續執行特定系統的啟動程序.
⒒啟動系統 ...
以上步驟中 2,3,4,5 步是由 BIOS 的引導程序完成. 6,7,8,9,10步由MBR中的引導程序完成.