很多朋友對于硬盤的主引導扇區里的MBR(Main Boot Record)和DPT(Disk Partition Table)的區別有些分不太清。于是我想把它寫個簡短的介紹,希望能對這些朋友有點幫助。
一個完整硬盤的數據應該包括五部分:MBR,DBR,FAT,DIR區和DATA區。其中只有主引導扇區是唯一的,其它的隨你的分區數的增加而增加。引導扇區(Boot Sector) 通常指設備的第一個扇區,用于加載并轉讓處理器控制權給計算機操作系統.
主引導扇區位于整個硬盤的0磁道0柱面1扇區,包括硬盤主引導記錄MBR(Main Boot Record)和分區表DPT(Disk Partition Table)。其中主引導記錄的作用就是檢查分區表是否正確以及確定哪個分區為引導分區,并在程序結束時把該分區的啟動程序(也就是操作系統引導扇區)調入內存加以執行。引導扇區在每個分區里都存在,但是我們常說的*主引導扇區*是硬盤的第一物理扇區。它由兩個部分組成:即主引導記錄MBR和硬盤分區表DPT。在總共512字節的主引導分區里其中MBR占446個字節(偏移0--偏移1BDH),DPT占64個字節(偏移1BEH--偏移1FDH),最后兩個字節“55,AA”(偏移1FEH偏移1FFH)是分區的結束標志。大致的結構如下圖:
圖一:主引導扇區結構圖
主引導記錄中包含了硬盤的一系列參數和一段引導程序。引導程序主要是用來在系統硬件自檢完后引導具有激活標志的分區上的操作系統。它執行到最后的是一條JMP指令跳到操作系統的引導程序去。這里往往是引導型計算機病毒的注入點,也是各種多系統引導程序的注入點。但是由于引導程序本身完成的功能比較簡單,所以我們可以完全地判斷該引導程序的合法性(看JMP指令的合法性),因而也易于修復。象命令fdisk/mbr可以修復MBR和KV300這類軟件可以查殺任意類型的引導型病毒,就是這個原因。
往下來是硬盤的分區表,由4個16字節的分區信息表組成。每個信息表的結構如下:
偏移 長度 所表達的意義
0 字節 分區狀態: 如0-->非活動分區
80--> 活動分區
1 字節 該分區起始頭(HEAD)
2 字 該分區起始扇區和起始柱面
4 字節 該分區類型:如82--> Linux Native分區
83--> Linux Swap 分區
5 字節 該分區終止頭(HEAD)
6 字 該分區終止扇區和終止柱面
8 雙字 該分區起始絕對分區
C 雙字 該分區扇區數
最后的兩個標志“55 AA”是分區表的結束標志,如果這兩個標志被修改(有些病毒就會修改這兩個標志),則系統引導時將報告找不到有效的分區表。
由上面的所列出的結構可以大致地了解主引導扇區的結構和用途。
下面,有一些關于主引導扇區的常見問題:
Q1、fdisk/mbr 會不會把硬盤的分區表破壞呀?
A: 從上面的土一我們可以看到fdisk/mbr是不會影響到DPT的。fdisk/
mbr只是把主引導分區里的MBR部分重新寫過,而不會對DPT有任何破壞。
Q2、在Linux里有一種方法可以恢復MBR是用如下的命令:
dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1
其中bs(buffer size)是指重寫的字節數。為什么不是512
呢?主引導扇區是一個扇區(512字節呀)?
A: 答案是因為我們用上面的命令是為了修復可能被病毒修改了的主引導記
錄MBR,或者想把LILO卸載掉,而不是恢復整個主引導扇區。所以我們
只把主引導扇區的備份文件boot.NNNN的前446個字節重寫入主引導扇區。
boot.NNNN是我們在安裝Linux之前整個主引導分區的備份。如果我們把
512個字節全部寫入主引導扇區就可能會把安裝了Linux后改變了的硬盤
DPT表也破壞掉。那就壞事了。 :-)
linuxrat補充一些:=)...
MBR-> Main/Master Boot Record, 有些書上是寫成Master的.我認為可以分成三個部分吧, MBR+DPT+MagicNumber(446+64+2=512)這也就是為什么進行MBR備份的時候要指定bs=512 或者 bs=1k, count=1的原因.然后恢復時經常看到HOWTO里面是bs=446 count=1. 這個446就是指令部分的恢復。