:BIOS→MBR→Bootmgr→BCD→Winload.exe→内核加载1.开机后,BIOS进行开机自检(POST),然后选择从硬盘进行启动,加载硬盘的MBR并把控制权交给MBR(MBR是硬盘的第一个扇区,它不在任何一个分区内);2.MBR会搜索64B大小的分区表,找到4个主分区(可能没有4个)的活动分区并确认其他主分区都不是活动的,然后加载活动分区的第一个扇区(Bootmgr)到内存;3.Bootmgr寻找并读取BCD,如果有多个启动选项,会将这些启动选项反映在屏幕上,由用户选择从哪个启动项启动。
4.选择从Windows7启动后,会加载C:\windows\system32\winload.exe,并开始内核的加载过程,内核加载过程比较长,比较复杂,这里就不一一讲了。
在这个过程中,bootmgr和BCD存放在Windows7的保留分区里,而从Winload.exe开始,就开始进入到C盘执行内核的加载过程了。
•MBR(Master Boot Record),中文意为主引导记录。
注意事项硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为两个部分。
第一部分为pre-boot区(预启动区),占446字节;第二部分是Partition table区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。
他是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。
但我们可以用ROM-BIOS中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取•BCD=Boot Configuration Data (启动设置数据) ,BCD是操作系统中的启动设置数据,在有vista或windows7的多重操作系统中,系统通bootmgr程序导入BCD 文件完成启动菜单的引导。
可用bcdedit.exe程序来编辑BCD文件,来调整开机默认操作系统和等待时间。
先让我们看一下windows7的启动过程的常识:电脑加电后,首先是启动BIOS程序,BIOS自检完毕后,找到硬盘上的主引导记录MBR,MBR读取DPT(分区表),从中找出活动的主分区,然后读取活动主分区的PBR(分区引导记录,也叫dbr,究竟该叫什么,网络上争论未休,我们姑且叫它pbr吧),PBR再搜寻分区内的启动管理器文件BOOTMGR,在BOOTMGR被找到后,控制权就交给了BOOTMGR。
BOOTMGR读取\boot\bcd文件(BCD=Boot Configuration Data,“启动配置数据”,简单地说,windwows7下的bcd 文件就相当于xp下的boot.ini文件),如果存在着多个操作系统并且选择操作系统的等待时间不为0的话,这时就会在显示器上显示操作系统的选择界面。
在我们选择启动WINDOWS7后,BOOTMGR就会去启动盘寻找WINDOWS\system32\winload.exe,然后通过winload.exe 加载windows7内核,从而启动整个windows7系统。
可以把这个过程简单地概括为:BIOS-->MBR-->DPT-->pbr--> Bootmgr-->bcd-->Winload.exe-->内核加载-->整个windows7系统本文就来说一说MBR-->DPT-->pbr--> Bootmgr-->bcd这一段可能出现的故障的解决。
mbr 出现问题,主要是mbr代码被改写,因为被改写的代码不同,所以出错信息也各不相同。
比如我们装了windows7与ubuntu双系统,ubuntu改写了mbr,在我们把ubuntu所在的分区格式化后,既进不了windows7,也进不了ubuntu,开机的时候会出现如图的错误提示:[图一]解决的办法就是重写mbr。
对于重写mbr,我们所熟知的是在dos下用fdisk /mbr命令进行重写。
fdisk /mbr所重写的mbr与xp是兼容的,但是,与windows7已经不那么兼容了。
实践表明:用fdisk /mbr命令重写windows7的mbr后,需要重建bcd,否则不能正常启动windows7。
有网友指出,这里面的原因是fdisk /mbr命令改写了mbr中的硬盘签名。
一般的分区工具都是可以重写mbr的,比如diskgenius,它所重写的mbr与windows7是兼容的。
也可以用bootrec /fixmbr命令重写。
要运行Bootrec.exe 工具,必须启动Windows RE。
为此,请按照下列步骤操作:插入windows 7安装光盘,从光盘启动电脑,在光盘启动完成后,按下shift+f10键,调出cmd命令提示符。
在cmd命令提示符中输入:bootrec /fixmbr回车。
这样也就重写了mbr。
[图二]分区表存在问题,对于这个问题,限于篇幅,不做详细探讨。
系统盘不是活动的主分区,这种情形只要用分区工具(比如diskgenius)把系统盘设为活动的主分区即可。
pbr出现问题,主要是pbr代码被改写,因为被改写的代码不同,所以出错信息也不相同。
比如WINDOWS7系统的活动分区,却被写入了适合于XP的pbr,这样开机的时候就会出现如图的提示:[图三]解决办法:就是用bootrec /fixboot命令重写pbr:插入windows7安装光盘,从光盘启动,在光盘启动完成后,按下shift+f10键,调出cmd命令提示符。
在命令提示符中输入:bootrec /fixboot回车。
这样也就重建了活动分区的pbr。
这里面还有一个常用的命令也要提一下,这就是bootsect:插入windows7安装光盘,从光盘启动,在光盘启动完成后,按下shift+f10键,调出cmd命令提示符。
在cmd命令提示符中输入:bootsect /nt60 sys /mbr回车。
这个命令会改写活动分区的pbr,并同时会改写mbr,使得mbr和pbr适合于windows7和vista。
bootsect.exe 程序位于windows7安装光盘的boot目录下,可以把这个文件提取出来,在xp下的命令行可以运行这个程序,也可以在winpe 下的命令行运行这个程序,因而这个程序在使用时很方便。
而bootrec.exe命令的使用就没这么方便了。
所以BOOTSECT命令被应用得更为广泛一些。
另外有一个要点需要指出,vista的安装光盘里面的boot文件夹也存在着这个小工具,但vista的bootsect命令没有/mbr参数,因而它只能改写pbr,而不能改写mbr,这是必须要注意的。
实践表明:把一个硬盘的mbr清零,然后运行windows7的bootsect命令,确实可以发现mbr被恢复正常。
这也就表明了windows7的bootsect命令的确能够重写mbr。
另外,bootsect命令也可以重写xp的mbr和pbr,而这也是bootrec 命令所做不到的。
xp的恢复控制台用fixmbr命令改写mbr,用fixboot 命令改写pbr。
如果是引导文件的问题,一般可以用bcdboot命令重新写入引导文件:插入windows7安装光盘,从光盘启动,在光盘启动完成后,按下shift+f10键,调出cmd命令提示符。
在命令提示符中输入:bcdboot x:\windows /s x:注意,这前一个x:是windows7的windows文件夹所在的盘,一般是c:,如果你的不是c盘,请改为对应的盘符。
这后一个x:是活动主分区的盘符所在,一般也是c盘。
所以这个命令一般的写法是:bcdboot c:\windows /s c:但需要注意,在windows re环境下所看到的盘符与你在windows7下所看到的盘符未必一样。
所以需要首先用dir /a命令确认各盘是否正确。
比如:cd /d c:dir /a这两个命令的作用是,首先进入c:盘的根目录,然后显示c盘根目录下的所有文件和文件夹,根据所显示的文件或者文件夹,可以判断这个盘具体是你在windows7下所看到的哪一个盘。
windows7的引导文件主要是bootmgr和boot文件夹里面的文件,而boot文件夹里面的文件主要是bcd文件。
bcdboot命令会在指定的分区内重新写入全部windows7的引导文件。
如果只是bcd文件有问题,则可以用bootrec命令重建bcd:插入windows7安装光盘,从光盘启动,在光盘启动完成后,按下shift+f10键,调出cmd命令提示符。
在命令提示符中输入:bootrec /RebuildBcd这个命令如果搜到没有写入bcd的windows7或者vista的操作系统,会提示你是否写入,按提示输入Y也就会写入了的。
或者用bcdedit命令手动改写bcd,但操作要复杂得多。
具体案例分析:案例一:怪事,系统盘不是活动的主分区在网上看到一则求助,windows7系统运行正常,只是在磁盘管理中所看到的则是:系统盘不是活动的主分区。
[图四]我们在安装了一键还原精灵装机版后,在开机的时候按下F11键可以启动一键还原程序。
但我们在格式化系统盘后,在开机的时候仍是可以这样操作的。
而所谓的pbr是高级格式化的时候产生的。
这表明了,一键还原精灵的启动代码不是写入了活动分区的pbr(如果是的话,在格式化的时候已经被清除了),而是写入了MBR。
通过在MBR中设定首先读取一键还原精灵的隐藏分区,然后才读取活动的主分区。
那么,现在我们所遇到的这种情形是不是也通过改写mbr而指向特定的分区?假设mbr没有问题,那么问题就可能出在pbr(也就是所谓的dbr),win7的pbr中写入的代码应该是去找bootmgr,但如果这个代码中规定了要找的是另外的一个特殊的文件,而再通过这个文件去启动另一个分区中的bootmgr,这样就能实现把另一个不是活动的主分区变为系统盘的目的。
通过上面的分析,我们可以得到结论:问题不是出在mbr,就是出在pbr,解决的办法就是先试着重建mbr,如果不能解决,那就可以肯定问题出在pbr,只要重建pbr就能解决问题的。
于是首先重建mbr,问题依旧,然后再重建pbr,问题果然得到解决。
案例二:开机的时候出现:BOOTMGR is missingpress ctrl+alt+del to restart.翻译成汉语就是:bootmgr缺失,按Ctrl + Alt + Del重新启动这是很常见的故障。
既然是bootmgr缺失,我们一般只要用bcdboot 命令重建引导文件即可。