分區解析
MBR,全稱為Master Boot Record,即硬碟的主引導記錄。為了便於理解,一般將MBR分為廣義和狹義兩種:廣義的MBR包含整個扇區(引導程式、分區表及分隔標識),也就是上面所說的主引導記錄;而狹義的MBR僅指引導程式而言。
硬碟的0柱面、0磁頭、1扇區稱為主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程式、硬碟分區表DPT(Disk Partition table)和分區有效標誌。在總共512位元組的主引導扇區里主引導程式(boot loader)占446個位元組,第二部分是Partition table區(分區表),即DPT,占64個位元組,硬碟中分區有多少以及每一分區的大小都記在其中。第三部分是magic number,占2個位元組,固定為0xAA55或0x55AA,這取決於處理器類型, 如果是小端模式處理器(如Intel系列),則該值為0xAA55;如果是大端模式處理器(如Motorola6800),則該值為0x55AA。
標準 MBR 結構 | |||||
地址 | 描述 | 長度 | |||
Hex | Oct | Dec | (位元組) | ||
0 | 0 | 0 | 代碼區 | 440 | |
(最大446) | |||||
01B8 | 670 | 440 | 選用軟碟標誌 | 4 | |
01BC | 674 | 444 | 一般為空值;0x0000 | 2 | |
01BE | 676 | 446 | 標準MBR分區表規劃 | 64 | |
(四個16byte的主分區表入口) | |||||
01FE | 776 | 510 | 55h | MBR有效標誌 | 2 |
01FF | 777 | 511 | AAh | ||
MBR,總大小: 446+64+2= | 512 |
注意
MBR是不屬於任何一個作業系統,也不能用作業系統提供的磁碟操作命令來讀取它,但可以通過命令來修改和重寫,如在minix3裡面,可以用命令:installboot-m/dev/c0d0/usr/mdec/masterboot來把masterboot這個小程式寫到mbr裡面,masterboot通常用彙編語言來編寫。我們也可以用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=1AH=錯誤代碼
用DEBUG讀取位於硬碟0柱面、0磁頭、1扇區的操作如下:
A>DEBUG
-A100
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內容)
在windows作業系統下,例如xp,2003,Vista,windows7,有微軟提供的接口直接讀寫mbr;
FILE*fd=fopen("\\\\.\\PHYSICALDRIVE0","rb+");
char buffer[512];
fread(buffer,512,1,fd);
//then you can edit buffer[512]as your wish。
fseek(fd,0,SEEK_SET);//很重要
fwrite(buffer,512,1,fd);//把修改後的MBR寫入到你的機器
fclose(fd);//大功告成
MBR組成
一個扇區的硬碟主引導記錄MBR由4個部分組成。
主引導程式(偏移地址0000H--0088H),它負責從活動分區中裝載,並運行系統引導程式。
出錯信息數據區,偏移地址0089H--00E1H為出錯信息,00E2H--01BDH全為0位元組。
分區表(DPT,Disk Partition Table)含4個分區項,偏移地址01BEH--01FDH,每個分區表項長16個位元組,共64位元組為分區項1、分區項2、分區項3、分區項4。
結束標誌字,偏移地址01FE--01FF的2個位元組值為結束標誌0xAA55或0x55AA,稱為“魔數”(magic number)。如果該標誌錯誤系統就不能啟動。
MBR的結構如下表所示
位元組偏移(16進制) | 位元組數 | 描述 |
00~1BD | 446 | 引導代碼 |
1BE~1CD | 16 | 分區表項1 |
1CE~1DD | 16 | 分區表項2 |
1DE~1ED | 16 | 分區表項3 |
1EE~1FD | 16 | 分區表項4 |
1FE~1FF | 2 | 簽名值0xAA55或0x55AA |
具體含義如下:
(1)0x00~0x1BD:446個位元組,包含一段指令,用以通知計算機如何訪問分區表並定位作業系統的位置
這部分的代碼會因為作業系統不同而不同,利用引導代碼可以實現多重系統引導。多系統引導有兩種方法可以實現:一種方法是用Windows作業系統在引導分區中設定一段代碼,先載入進入用戶選擇系統的界面,允許用戶選擇要進入的系統,再進入指定的系統;第二種方法是改變MBR中的引導代碼,該代碼直接呈現給用戶一個選擇系統的界面。
(2)0x1BE~0x1FD:64個位元組,4個分區表項,每個表項占用16個位元組,描述一個分區,最多可以描述4個分區(這就是為什麼MBR分區體系只能分成4個區我們平時看到的分區一般可以從26個字母中選取任意多個當做分區標識(多於4個),這是因為那些分區是邏輯分區,這裡的4個分區指的是主分區和擴展分區的數目,而邏輯分區是在擴展分區中劃分出來的,也叫做二級、三級擴展分區。)。
分區表項並沒有順序要求,即不要求第一個分區表項在第二個分區表項前。
分區表也不要求從第一個分區表項開始
(3)0x1FE~0x1FF:2個位元組,有效結束標誌0xAA55或0x55AA。如果沒有這個標誌,作業系統會認為磁碟沒有初始化,無法正確載入磁碟的分區。
分區表參數含義(位元組)
0活動(80)或非活動分區(00)
123起始的磁頭01柱面01扇區00值
4分區類型符NTFS(07)FAT32(0B)擴展(0F)
567結束的磁FE柱面FF扇區FF值
89AB本分區之前已用扇區數
CDEF本分區大小
虛擬MBR
即EBR(extent boot record)擴展引導記錄
其記錄表項與MBR相同,用於管理擴展還能分區上的邏輯驅動器。
MBR修復
MBR在某些情況下,如病毒或者分區操作不當會引起MBR代碼段的損壞,表現的現象就是電腦啟動時,螢幕出現黑底一個或幾個無意義的字母閃游標或無任何提示閃游標。這種情況在確認硬碟無物理故障後,可以使用一些簡單方法進行恢復。
Dos命令
使用任意啟動盤啟動到MSDOS提示符,鍵入命令:
fdisk/mbr
Diskgenius
用啟動盤,無論dos版或者pe版均可,啟動diskgenius,然後選擇選單“硬碟”-“重建主引導記錄”,為避免病毒殘留,還可執行一次”硬碟“-”清除保留扇區“
Windows xp命令
xp之下,需要安裝tool kit附加工具,為系統增加一個fixmbr命令行工具。執行命令之前,先將故障硬碟掛載到一台好的電腦,或者使用xp安裝盤啟動電腦,然後執行命令:
fixmbr\Device\HardDisk0此處的0或其他數字需先通過diskpart工具的list driver進行查找。
Windows 7命令
修複方式同xp,只是命令換成bootrec/fixmbr