mbr

硬碟的主引導記錄

MBR,即主引導記錄,是對IBM兼容機的硬碟或者可移動磁碟分區時,在驅動器最前端的一段引導扇區。MBR概念是在1983年PC DOS 2.0支持硬碟后才有的。MBR描述了邏輯分區的信息,包含文件系統以及組織方式。此外,MBR還包含計算機在啟動的第二階段載入操作系統的可執行代碼或連接每個分區的引導記錄(VBR)。這個MBR代碼通常被稱為引導程序。由於MBR分區表的最大可定址的存儲空間只有2Tb(232×512位元組)。因此,在大硬碟出現的現在,MBR分區方式逐漸被GUID分區表取代。

MBR不可能存在於不可分區的媒介如軟盤等中。

分區解析


mbr
mbr
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 結構
地址描述長度
HexOctDec(位元組)
代碼區440
(最大446)
01B8670440選用軟盤標誌4
01BC674444一般為空值;0x00002
01BE676446標準MBR分區表規劃64
(四個16byte的主分區表入口)
01FE77651055hMBR有效標誌2
01FF777511AAh
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~1BD446引導代碼
1BE~1CD16分區表項1
1CE~1DD16分區表項2
1DE~1ED16分區表項3
1EE~1FD16分區表項4
1FE~1FF2簽名值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,然後選擇菜單“硬碟”-“重建主引導記錄”,為避免病毒殘留,還可執行一次”硬碟“-”清除保留扇區“
xp之下,需要安裝tool kit附加工具,為系統增加一個fixmbr命令行工具。執行命令之前,先將故障硬碟掛載到一台好的電腦,或者使用xp安裝盤啟動電腦,然後執行命令:
fixmbr\Device\HardDisk0 此處的0或其他數字需先通過diskpart工具的list driver進行查找。
Windows 7命令
修復方式同xp,只是命令換成bootrec/fixmbr