硬盘主引导记录(mbr)及其结构。
硬盘的0柱面、0磁头、1扇区称为主引导扇区,fdisk程序写到该扇区的内容称为主引导记录(mbr)。该记录占用512个字节,它用语硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统区。的读取。
硬盘的引导记录(mbr)是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。但我们可以用rom-bios中提供的int13h的2号功能来读出该扇区的内容,也可用软件工具norton8.0中的来读取。
用int13h的读磁盘扇区功能的调用参数如下:入口参数:ah=2(指定功能号)al=要读取的扇区数。
dl=磁盘号-软盘-硬盘)dh=磁头号。
cl高2位+ch=柱面号cl低6位=扇区号。
cs:bx=存放读取数据的内存缓冲地址出口参数:cs:bx=读取数据存放地址错误信息:如果出错cf=1ah=错误**。
用debug读取位于硬盘0柱面、0磁头、1扇区的操作如下:a>debug-a100
***x:***xmovax,0201(用功能号2读1个扇区)
***x:***xmovbx,1000(把读出的数据放入缓冲区的地址为cs:1000)***x:***xmovcx,0001(读0柱面,1扇区)
***x:***xmovdx,0080(指定第一物理(盘的0磁头)***x:***xint13***x:***xint3***x:***x(按回车键)
g=100(执行以上程序段)
d100011ff(显示节的mbr内容)的组成。
一个扇区的硬盘主引导记录mbr由如图6-15所示的4个部分组成。
主引导程序(偏移地址0000h--0088h),它负责从活动分区中装载,并运行系统引导程序。·出错信息数据区,偏移地址0089h--00e1h为出错信息,00e2h--01bdh全为0字节。
分区表(dpt,diskpartitiontable)含4个分区项,偏移地址01beh--01fdh,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。
结束标志字,偏移地址01fe--01ff的2个字节值为结束标志55aa,如果该标志错误系统就不能启动。0000-0088
master boot record
主引导。0089-01bd01be-01cd01ce-01dd01de-01ed01ee-01fd01fe01ff
主引导程序出错信息数据区分区项1(16字节)分区项2(16字节)
程序数据区。
分区表。分区项3(16字节)分区项4(16字节)
结束标志。aa
图6-15mbr的组成结构图中的分区信息结构。
占用512个字节的mbr中,偏移地址01beh--01fdh的64个字节,为4个分区项内容(分区信息表)。它是由磁盘介质类型及用户在使用fdisk定义分区说确定的。在实际应用中,fdisk对一个磁盘划分的主分区可少于4个,但最多不超过4个。
每个分区表的项目是16个字节,其内容含义如表6-19所示。
表6-19分区项表(16字节)内容及含义。
存贮字节位第1字节。
内容及含义。
引导标志。若值为80h表示活动分区,若值为00h表示非活动分区。本分区的起始磁头号、扇区号、柱面号。其中:磁头号——第2字节;
第字节。扇区号——第3字节的低6位;
柱面号——为第3字节高2位+第4字节8位。分区类型符。
00h——表示该分区未用(即没有指定);06h——fat16基本分区;
第5字节。0bh——fat32基本分区;05h——扩展分区;07h——ntfs分区;
0fh——(lba模式)扩展分区(83h为linux分区等)。本分区的结束磁头号、扇区号、柱面号。其中:磁头号——第6字节;
第字节。扇区号——第7字节的低6位;
柱面号——第7字节的高2位+第8字节。
第字节本分区之前已用了的扇区数。第字。
本分区的总扇区数。
节。的主要功能及工作流程。
启动pc机时,系统首先对硬件设备进行测试,测试成功后进入自举程序int19h,然后读系统磁盘0柱面、0磁头、1扇区的主引导记录(mbr)内容到内存指定单元0:7c00地址开始的区域,并执行mbr程序段。
硬盘的主引导记录(mbr)是不属于任何一个操作系统的,它先于所有的操作系统而被调入内存,并发挥作用,然后才将控制权交给主分区(活动分区)内的操作系统,并用主分区信息表来管理硬盘。
mbr程序段的主要功能如下:·检查硬盘分区表是否完好。
在分区表中寻找可引导的“活动”分区。
将活动分区的第一逻辑扇区内容装入内存。在dos分区中,此扇区内容称为dos引导记录(dbr)。
mbr引导程序段的执行流程如图6-16所示。
图6-16mbr引导程序段执行流程硬盘逻辑驱动器的分区表链结构。
硬盘是由很多个节的扇区组成,而这些扇区会被组织成一个个的“分区”。
硬盘的分区规则是:一个分区的所有扇区必须连续,硬盘可以有最多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:盘描述剩余空。
间。未用未用55aa
未用未用55aa定义d:盘描述剩余空。
间。未用未用55aa定义e:盘描述剩余空。
描述剩余空间。
间。未用未用55aa定义f:盘。
图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的分区表指向基本分区及扩展分区中的第一个逻辑盘。