编辑本段简介
一个完整硬盘的数据应该包括五部分:MBR,DBR,FAT,DIR区和DATA区。其中只有主 引导扇区是唯一的,其它的随你的分区数的增加而增加。
编辑本段主引导扇区释疑
关键词: 引导扇区、主引导扇区、 主引导记录、 硬盘分区表。
很多朋友对于硬盘的主 引导扇区里的MBR(Main Boot Record)和DPT
(Disk Partition Table)的区别有些分不太清。于是我想把它写个简短的
介绍,希望能对这些朋友有点帮助。
引导扇区在每个分区里都存在,但是我们常说的*主引导扇区*是硬盘的
第一物理扇区。它由两个部分组成:即 主引导记录MBR和 硬盘分区表DPT。在
总共512字节的主 引导扇区里其中MBR占446个字节(偏移0--偏移1BDH),DPT
占64个字节(偏移1BEH--偏移1FDH),最后两个字节“55,AA”(偏移1FEH
偏移1FFH)是分区的结束标志。大致的结构如下图:
|------------------------------------------------|0000
| |
| |
| Main Boot Record |
| |
| |
| 主引导记录(446字节) |
| |
| |
| |
| |01BD
|------------------------------------------------|01BE
| |
| 分区信息 1(16字节) |01CD
|------------------------------------------------|01CE
| |
| 分区信息 2(16字节) |01DD
|------------------------------------------------|01DE
| |
| 分区信息 3(16字节) |01ED
|------------------------------------------------|01EE
| |
| 分区信息 4(16字节) |01FD
|------------------------------------------------|01FE
| |
| 55 | AA |
|------------------------------------------------|01FF
图一:主 引导扇区结构图
主引导记录中包含了硬盘的一系列参数和一段引导程序。引导程序主要
是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统。它执行
到最后的是一条JMP指令跳到操作系统的引导程序去。这里往往是引导型病
毒的 注入点,也是各种多系统引导程序的注入点。但是由于引导程序本身完
成的功能比较简单,所以我们可以完全地判断该引导程序的合法性(看JMP
指令的合法性),因而也易于修复。象命令fdisk/mbr可以修复MBR和KV300
这类软件可以查杀任意类型的 引导型病毒,就是这个原因。
往下来是硬盘的 分区表,由4个16字节的分区信息表组成。每个信息表的
结构如下:
偏移 长度 所表达的意义
存贮字节位 内容及含义
第1字节 引导标志。若值为80H表示 活动分区,若值为00H表示非活动分区。
第2、3、4字节 本分区的起始磁头号、扇区号、柱面号。其中:
磁头号——第2字节;
扇区号——第3字节的低6位;
柱面号——为第3字节高2位+第4字节8位。
第5字节 分区类型符。
00H——表示该分区未用(即没有指定);
06H——FAT16基本分区;
0BH——FAT32基本分区;
05H—— 扩展分区;
07H——NTFS分区;
0FH——(LBA模式) 扩展分区(83H为Linux分区等)。
第6、7、8字节 本分区的结束磁头号、扇区号、柱面号。其中:
磁头号——第6字节;
扇区号——第7字节的低6位;
柱面号——第7字节的高2位+第8字节。
第9、10、11、12字节 本分区之前已用了的 扇区数。
第13、14、15、16字节 本分区的总 扇区数。
最后的两个标志“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就是指令部分的恢复, 不是DPT的恢复. 往往MBR里面的第一个指令是cli... 研究起来是比较有意思的.