Chinaunix首页 | 论坛 | 博客
  • 博客访问: 306138
  • 博文数量: 120
  • 博客积分: 2015
  • 博客等级: 大尉
  • 技术积分: 1350
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-13 17:27
文章分类

全部博文(120)

文章存档

2010年(11)

2009年(109)

我的朋友
mbr

分类:

2009-11-16 11:59:14

  

MBR


 

 

 

 

 

 

 

 

 

 

 

 

MBR,全称为Master Boot Record,即主引导记录

  引导扇区是每个分区(Partition)的第一扇区,而是硬盘的第一扇区。它由三个部分组成,主引导记录MBR、DPT和硬盘有效标志。在总共512字节的主引导扇区里MBR占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。
  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=1 AH=错误代码
  用DEBUG读取位于硬盘0柱面、0磁头、1扇区的操作如下:
  A>DEBUG
  -A 100
  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由如图6-15所示的4个部分组成。
  ·主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。
  ·出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。
  ·分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。

  ·结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。

====================================================================================================

硬盘的0柱面、0磁头、1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR)。该记录占用512个字节,它用语硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统区。
1.MBR的读取
    硬盘的引导记录(MBR)是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。但我们可以用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=1 AH=错误代码
用DEBUG读取位于硬盘0柱面、0磁头、1扇区的操作如下:
A>DEBUG
-A 100
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内容)
2.MBR的组成
一个扇区的硬盘主引导记录MBR由如图6-15所示的4个部分组成。
·主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。
·出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。
·分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
·结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA,如果该标志错误系统就不能启动。

0000-0088

 

Master Boot Record

主引导程序

主引导

程序

0089-01BD

出错信息数据区

数据区

01BE-01CD

分区项1(16字节)

 

分区表

 

01CE-01DD

分区项2(16字节)

01DE-01ED

分区项3(16字节)

01EE-01FD

分区项4(16字节)

01FE

55

结束标志

01FF

AA


图6-15 MBR的组成结构图
3.MBR中的分区信息结构
    占用512个字节的MBR中,偏移地址01BEH--01FDH的64个字节,为4个分区项内容(分区信息表)。它是由磁盘介质类型及用户在使用FDISK定义分区说确定的。在实际应用中,FDISK对一个磁盘划分的主分区可少于4个,但最多不超过4个。每个分区表的项目是16个字节,其内容含义如表6-19所示。
表6-19 分区项表(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字节

本分区的总扇区数。


4.MBR的主要功能及工作流程
    启动PC机时,系统首先对硬件设备进行测试,测试成功后进入自举程序INT 19H,然后读系统磁盘0柱面、0磁头、1扇区的主引导记录(MBR)内容到内存指定单元0:7C00地址开始的区域,并执行MBR程序段。
    硬盘的主引导记录(MBR)是不属于任何一个操作系统的,它先于所有的操作系统而被调入内存,并发挥作用,然后才将控制权交给主分区(活动分区)内的操作系统,并用主分区信息表来管理硬盘。
MBR程序段的主要功能如下:
·检查硬盘分区表是否完好。
·在分区表中寻找可引导的“活动”分区。
·将活动分区的第一逻辑扇区内容装入内存。在DOS分区中,此扇区内容称为DOS引导记录(DBR)。
MBR引导程序段的执行流程如图6-16所示。

                             图6-16 MBR引导程序段执行流程
5.硬盘逻辑驱动器的分区表链结构
    硬盘是由很多个512字节的扇区组成,而这些扇区会被组织成一个个的“分区”。
硬盘的分区规则是:一个分区的所有扇区必须连续,硬盘可以有最多4个物理上的分区,这4个物理分区可以时个主分区或者3个主分区加一个扩展分区。在DOS/Windows管理下的扩展分区里,可以而且必须再继续划分逻辑分区(逻辑盘)。
从MS-DOS3.2问世以后,用户就可以在一个物理硬盘驱动器上划分一个主分区和一个扩展分区,并在扩展分区上创建多个逻辑驱动器,也即我们常说的一个物理盘上多个逻辑盘。
举一个例子,一个10G的硬盘,安装Windows,有C:、D:、E:三个逻辑盘,那么它的分区情况可以是如下的方式:
分区一:主分区2GB,格式化为C:盘。
分区二:扩展分区8GB。它被再划分为两个各4GB的逻辑盘,格式化为以D:和E:盘。
在一个划分有多个主分区的硬盘上,则可安装多个不同的操作系统。如Windows、Linux、Solaris等。每个操作系统自己去管理分配给自己的分区。但是,每个操作系统对分区的操作方式是不同的。对于DOS/Windows来说,它能够把它所能管辖的一个主分区和一个扩展分区格式化,然后按照C:、D:、E:逻辑盘的方式来管理。而Linux则不同,它是把“分区”看作一个设备,既没有“扩展分区”的概念,也没有“逻辑盘”的概念。
1.逻辑盘的链接关系
在FAT文件系统中,硬盘的逻辑盘字符用字符C:、D:、E:、...、Z:来表示。主分区一般被格式化成C:盘,从D:盘开始的逻辑盘是建立在扩展分区之上的。在系统进行读写操作时,DOS首先查看主引导记录(MBR)中的分区信息表,分区项将指向活动主分区的DOS引导记录(DBR)。
MBR中的分区表位于0柱面、0磁头、1扇区内,以位移1BEH开始的第一分区表作为链首,有表内的链接表项指示下一分区表的物理位置(xx柱面、0磁头、1扇区),在该位置的扇区内同样位移1BEH处,保存着第2张分区表,依次类推,直至指向最后一张分区表的物理位置(yy柱面、0磁头、1扇区)。因该分区表内不存在链接表项,即作为分区表链的链尾。如图6-17所示。

   硬盘                      第一个虚拟              第二个虚拟                   第三个虚拟

MBR分区表                    MBR分区表               MBR分区表                    MBR分区表

定义C:盘 ------------> 定义D:盘 -----------> 定义E:盘 ------------> 定义F:盘

描述剩余空间

描述剩余空间 描述剩余空间 描述剩余空间

未用

未用 未用 未用

未用

未用 未用 未用

55AA

55AA 55AA 55AA


图6-17 具有4个逻辑盘的分区链表示意图
举例来说,本来位于柱面0、磁头0、扇区1上的分区表的每一项记录和主分区的DBR之间有一对应的关系,但是,如果在扩展分区中建立了多个逻辑盘,例如D:、E:、F:,该分区表中的分区项可指向第一个逻辑盘:,但对于其它的逻辑盘,则就没有这种对应关系了。为能够查找扩展分区中的多个逻辑盘,DOS系统可做如下安排:
·如果硬盘只有一个主分区,即是将整个硬盘作为一个逻辑盘C:,则分区命令FDISK只在硬盘的柱面0、磁头0、扇区1上建立一个MBR。
·如果硬盘被划分成2--4个分区,则FDISK除了在柱面0、磁头0、扇区1上建立一个MBR之外,还在扩展分区的每个逻辑盘的起始扇区上都建立一个虚拟MBR,每一个虚拟MBR用于扩展分区上的一个逻辑盘。
·扩展分区的第一个扇区不是用于一个逻辑盘的DBR,而是指向一个“扩展的”分区表,即第一个虚拟的MBR。该逻辑盘DBR扇区的起点应为虚拟MBR的下一个磁道1扇区。
这些MBR中的各个分区表链接成一个如图6-17所示的分区表链。这是一个硬盘具有4个表项所描述的内容。
DOS就是用这种方法来使一个扩展分区看起来象是有多个硬盘。
从图6-17中可以看到,位于磁盘柱面0、磁头0、扇区1上MBR的分区表指向基本分区及扩展分区中的第一个逻辑盘。

阅读(1267) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~