MBR
(主引導(dǎo)記錄(Master Boot Record))
MBR,即主引導(dǎo)記錄,是對(duì)IBM兼容機(jī)的硬盤或者可移動(dòng)磁盤分區(qū)時(shí),在驅(qū)動(dòng)器最前端的一段引導(dǎo)扇區(qū)。MBR概念是在1983年P(guān)C DOS 2.0支持硬盤后才有的。
MBR描述了邏輯分區(qū)的信息,包含文件系統(tǒng)以及組織方式。此外,MBR還包含計(jì)算機(jī)在啟動(dòng)的第二階段加載操作系統(tǒng)的可執(zhí)行代碼或連接每個(gè)分區(qū)的引導(dǎo)記錄(VBR)。這個(gè)MBR代碼通常被稱為引導(dǎo)程序。
由于MBR分區(qū)表的最大可尋址的存儲(chǔ)空間只有2Tb(232×512字節(jié))。因此,在大硬盤出現(xiàn)的現(xiàn)在,MBR分區(qū)方式逐漸被GUID分區(qū)表取代。
MBR不可能存在于不可分區(qū)的媒介如軟盤等中
MBR,全稱為Master Boot Record,即硬盤的主引導(dǎo)記錄。
為了便于理解,一般將MBR分為廣義和狹義兩種:廣義的MBR包含整個(gè)扇區(qū)(引導(dǎo)程序、分區(qū)表及分隔標(biāo)識(shí)),也就是上面所說的主引導(dǎo)記錄;而狹義的MBR僅指引導(dǎo)程序而言。
硬盤的0柱面、0磁頭、1扇區(qū)稱為主引導(dǎo)扇區(qū)(也叫主引導(dǎo)記錄MBR)。它由三個(gè)部分組成,主引導(dǎo)程序、硬盤分區(qū)表DPT(Disk Partition table)和分區(qū)有效標(biāo)志。在總共512字節(jié)的主引導(dǎo)扇區(qū)里主引導(dǎo)程序(boot loader)占446個(gè)字節(jié),第二部分是Partition table區(qū)(分區(qū)表),即DPT,占64個(gè)字節(jié),硬盤中分區(qū)有多少以及每一分區(qū)的大小都記在其中。第三部分是magic number,占2個(gè)字節(jié),固定為0xAA55或0x55AA,這取決于處理器類型 ,如果是小端模式處理器 (如Intel系列),則該值為0xAA55;如果是大端模式處理器 (如Motorola6800),則該值為0x55AA。
MBR是不屬于任何一個(gè)操作系統(tǒng),也不能用操作系統(tǒng)提供的磁盤操作命令來讀取它,但可以通過命令來修改和重寫,如在minix3里面,可以用命令:installboot -m /dev/c0d0 /usr/mdec/masterboot來把masterboot這個(gè)小程序?qū)懙絤br里面,masterboot通常用匯編語(yǔ)言來編寫。我們也可以用ROM-BIOS中提供的INT13H的2號(hào)功能來讀出該扇區(qū)的內(nèi)容,也可用軟件工具Norton8.0中的DISKEDIT.EXE來讀取。
調(diào)用參數(shù)
用INT13H的讀磁盤扇區(qū)功能的調(diào)用參數(shù)如下:
入口參數(shù):AH=2 (指定功能號(hào))
AL=要讀取的扇區(qū)數(shù)
DL=磁盤號(hào)(0、1-軟盤;80、81-硬盤)
DH=磁頭號(hào)
CL高2位+CH=柱面號(hào)
CL低6位=扇區(qū)號(hào)
CS:BX=存放讀取數(shù)據(jù)的內(nèi)存緩沖地址
出口參數(shù):CS:BX=讀取數(shù)據(jù)存放地址
錯(cuò)誤信息:如果出錯(cuò)CF=1 AH=錯(cuò)誤代碼
用DEBUG讀取位于硬盤0柱面、0磁頭、1扇區(qū)的操作如下:
A>DEBUG
-A 100
XXXX:XXXX MOV AX,0201 (用功能號(hào)2讀1個(gè)扇區(qū))
XXXX:XXXX MOV BX,1000 (把讀出的數(shù)據(jù)放入緩沖區(qū)的地址為CS:1000)
XXXX:XXXX MOV CX,0001 (讀0柱面,1扇區(qū))
XXXX:XXXX MOV DX,0080 (指定第一物理盤的0磁頭)
XXXX:XXXX INT 13
XXXX:XXXX INT 3
XXXX:XXXX (按回車鍵)
-G=100 (執(zhí)行以上程序段)
-D 1000 11FF (顯示512字節(jié)的MBR內(nèi)容)
在windows操作系統(tǒng)下,例如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寫入到你的機(jī)器
fclose(fd); //大功告成
MBR組成
一個(gè)扇區(qū)的硬盤主引導(dǎo)記錄MBR由4個(gè)部分組成。
硬盤MBR扇區(qū)
·主引導(dǎo)程序(偏移地址0000H--0088H),它負(fù)責(zé)從活動(dòng)分區(qū)中裝載,并運(yùn)行系統(tǒng)引導(dǎo)程序。
·出錯(cuò)信息數(shù)據(jù)區(qū),偏移地址0089H--00E1H為出錯(cuò)信息,00E2H--01BDH全為0字節(jié)。
·分區(qū)表(DPT,Disk Partition Table)含4個(gè)分區(qū)項(xiàng),偏移地址01BEH--01FDH,每個(gè)分區(qū)表項(xiàng)長(zhǎng)16個(gè)字節(jié),共64字節(jié)為分區(qū)項(xiàng)1、分區(qū)項(xiàng)2、分區(qū)項(xiàng)3、分區(qū)項(xiàng)4。
·結(jié)束標(biāo)志字,偏移地址01FE--01FF的2個(gè)字節(jié)值為結(jié)束標(biāo)志0xAA55或0x55AA,稱為“魔數(shù)”(magic number)。如果該標(biāo)志錯(cuò)誤系統(tǒng)就不能啟動(dòng)。
MBR的結(jié)構(gòu)如下表所示
字節(jié)偏移(16進(jìn)制) | 字節(jié)數(shù) | 描述 |
00~1BD | 446 | 引導(dǎo)代碼 |
1BE~1CD | 16 | 分區(qū)表項(xiàng)1 |
1CE~1DD | 16 | 分區(qū)表項(xiàng)2 |
1DE~1ED | 16 | 分區(qū)表項(xiàng)3 |
1EE~1FD | 16 | 分區(qū)表項(xiàng)4 |
1FE~1FF | 2 | 簽名值0xAA55或0x55AA |
MBR修復(fù)
MBR在某些情況下,如病毒或者分區(qū)操作不當(dāng)會(huì)引起MBR代碼段的損壞,表現(xiàn)的現(xiàn)象就是電腦啟動(dòng)時(shí),屏幕出現(xiàn)黑底一個(gè)或幾個(gè)無意義的字母閃光標(biāo)或無任何提示閃光標(biāo)。這種情況在確認(rèn)硬盤無物理故障后,可以使用一些簡(jiǎn)單方法進(jìn)行恢復(fù)。
Dos命令
使用任意啟動(dòng)盤啟動(dòng)到MSDOS提示符,鍵入命令:
fdisk /mbr
Diskgenius
用啟動(dòng)盤,無論dos版或者pe版均可,啟動(dòng)diskgenius,然后選擇菜單“硬盤”-“重建主引導(dǎo)記錄”,為避免病毒殘留,還可執(zhí)行一次”硬盤“-”清除保留扇區(qū)“
Windows xp命令
xp之下,需要安裝tool kit附加工具,為系統(tǒng)增加一個(gè)fixmbr命令行工具。執(zhí)行命令之前,先將故障硬盤掛載到一臺(tái)好的電腦,或者使用xp安裝盤啟動(dòng)電腦,然后執(zhí)行命令:
fixmbr \Device\HardDisk0 此處的0或其他數(shù)字需先通過diskpart工具的list driver進(jìn)行查找。
Windows 7命令
修復(fù)方式同xp,只是命令換成bootrec /fixmbr