Win7启动过程及启动项修复
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Win7启动过程及启动项修复
/Windows/2011/05/18/win7-boot-process-and-restoration/
先让我们看一下win7的启动过程的常识:
电脑加电后,首先是启动BIOS程序,BIOS自检完毕后,找到硬盘上的主引导记录 MBR,MBR读取DPT(分区表),从中找出活动的主分区,然后读取活动主分区的PBR(分区引导记录,也叫dbr),PBR再搜寻分区内的启动管理器文件 BOOTMGR,在BOOTMGR被找到后,控制权就交给了BOOTMGR。BOOTMGR读取\boot\bcd文件(BCD=Boot Configuration Data),也就是“启动配置数据”,简单地说,win7下的bcd文件就相当于xp下的boot.ini文件),如果存在着多个操作系统并且选择操作系统的等待时间不为0的话,这时就会在显示器上显示操作系统的选择界面。在我们选择启动WINDOWS7后,BOOTMGR就会去启动盘寻找 WINDOWS\system32\winload.exe,然后通过winload.exe加载win7内核,从而启动整个win7系统。
可以把这个过程简单地概括为:
BIOS-->MBR-->DPT-->pbr-->Bootmgr-->bcd-->Winload.exe-->内核加载 -->整个win7系统
本文就来说一说MBR-->DPT-->pbr--> Bootmgr-->bcd这一段可能出现的故障的解决。
1.MBR出现问题
主要是mbr代码被改写,因为被改写的代码不同,所以出错信息也各不相同。比如我们装了win7与ubuntu双系统,ubuntu改写了mbr,在我们把ubuntu 所在的分区格式化后,既进不了win7,也进不了ubuntu,开机的时候会出现如图的错误提示:
GRUB Loading stage1.5.GRUB loading, please wait...Error 22
解决的办法就是重写mbr。对于重写mbr,我们所熟知的是在dos下用fdisk /mbr命令进行重写。fdisk /mbr所重写的mbr与xp是兼容的,但是,与win7已经不那么兼容了。实践表明:用fdisk /mbr命令重写win7的mbr后,需要重建bcd,否则不能正常启动win7。有网友指出,这里面的原因是fdisk /mbr 命令改写了mbr中的硬盘签名。一般的分区工具都是可以重写mbr的,比如diskgenius,它所重写的mbr与win7是兼容的。也可以用bootrec /fixmbr 命令重写。要运行 Bootrec.exe 工具,必须启动 Windows RE。为此,请按照下列步骤操作:
插入windows 7安装光盘,从光盘启动电脑,在光盘启动完成后,按下
shift+f10键,调出cmd命令提示符。在cmd命令提示符中输入:bootrec
/fixmbr回车。
这样也就重写了mbr。
2.分区表存在问题
系统盘不是活动的主分区,这种情形只要用分区工具(比如diskgenius)把系统盘设为活动的主分区即可。 pbr出现问题,主要是pbr代码被改写,因为被改写的代码不同,所以出错信息也不相同。比如Win7系统的活动分区,却被写入了适合于XP的 pbr,这样开机的时候就会出现如图的提示:
NTLDR is missingPress Ctrl+Alt+Del to restart
简单的解决办法就是用bootrec /fixboot命令重写pbr:
插入win7安装光盘,从光盘启动,在光盘启动完成后,按下shift+f10键,调出cmd命令提示符。在命令提示符中输入:bootrec /fixboot回车。
这样也就重建了活动分区的pbr。这里面还有一个常用的命令也要提一下,这就是bootsect:
插入win7安装光盘,从光盘启动,在光盘启动完成后,按下shift+f10键,调出cmd命令提示符。在cmd命令提示符中输入:bootsect /nt60 sys /mbr回车。
这个命令会改写活动分区的pbr,并同时会改写mbr,使得mbr和pbr适合于win7和vista。 bootsect.exe程序位于win7安装光盘的boot目录下,可以把这个文件提取出来,在xp下的命令行可以运行这个程序,也可以在 winpe 下的命令行运行这个程序,因而这个程序在使用时很方便。而bootrec.exe命令的使用就没这么方便了。所以BOOTSECT命令被应用得更为广泛一些。另外有一个要点需要指出,vista的安装光盘里面的boot文件夹也存在着这个小工具,但vista的bootsect命令没有/mbr参数,因而它只能改写pbr,而不能改写mbr,这是必须要注意的。实践表明:把一个硬盘的mbr清零,然后运行win7的bootsect命令,确实可以发现mbr被恢复正常。这也就表明了win7的bootsect命令的确能够重写mbr。另外,bootsect命令也可以重写xp的mbr和pbr,而这也是bootrec命令所做不到的。xp的恢复控制台用fixmbr命令改写mbr,用 fixboot命令改写pbr。
3.引导文件的问题
一般可以用bcdboot命令重新写入引导文件:
插入win7安装光盘,从光盘启动,在光盘启动完成后,按下shift+f10键,调出cmd命令提示符。在命令提示符中输入: bcdboot x:\windows /s x:
注意,这前一个x:是win7的windows文件夹所在的盘,一般是c:,如果你的不是c盘,请改为对应的盘符。这后一个x:是活动主分区的盘符所在,一般也是c盘。所以这个命令一般的写法是:bcdboot c:\windows /s c: 但需要注意,在windows re环境下所看到的盘符与你在win7下所看到的盘符未必一样。所以需要首先用dir /a命令确认各盘是否正确。比如:
cd /d c: dir /a
这两个命令的作用是,首先进入c:盘的根目录,然后显示c盘根目录下的所有文件和文件夹,根据所显示的文件或者文件夹,可以判断这个盘具体是你在win7下所看到的哪一个盘。 win7的引导文件主要是bootmgr和boot文件夹里面的文件,而boot文件夹里面的文件主要是bcd文件。bcdboot命令会在指定的分区内重新写入全部win7的引导文件。如果只是bcd文件有问题,则可以用bootrec命令重建bcd:
插入win7安装光盘,从光盘启动,在光盘启动完成后,按下shift+f10键,调出cmd命令提示符。在命令提示符中输入: bootrec /RebuildBcd
这个命令如果搜到没有写入bcd的win7或者vista的操作系统,会提示你是否写入,按提示输入Y也就会写入了的。或者用bcdedit命令手动改写bcd,但操作要复杂得多。
具体案例分析
案例一:开机的时候出现:
BOOTMGR is missing press ctrl+alt+del to restart.
翻译成汉语就是:bootmgr缺失,按Ctrl + Alt + Del重新启动这是很常见的故障。既然是bootmgr缺失,我们一般只要用bcdboot命令重建引导文件即可。这种情形产生的原因,一般可能有:bootmgr文件确实没有了,这是最为常见的。一种则是由磁盘错误导致的,这种情形下,在winpe下运行一下chkdsk /f命令也可能解决。有朋友使用 Diskeeper 对MFT碎片进行整理,开机的时候也出现了这个提示。估计可能是用DISKEEPER进行的MFT磁盘整理后,这或者是diskeeper的一个bug,因而不建议用diskeeper进行mft碎片整理。一位网友因为好奇。把C盘设成了活动的(active partition )。是这样设置活动的:对计算机点右键-管理-硬盘管理。右键点C盘,设置为活动的。靠。怎么回事啊。重启后居然无法启动!显示bootmgr is missing,Ctrl+Alt+Delete to restart。然后还是如此。这是从网上找到的一个案例,分析可以得出结论。他所装的windows7应该存在着一个隐藏的“系统保留”分区,这个隐藏的系统保留分区才是真正的活动主分区,而他的c盘则应该不是活动的。他把c盘设为活动,这也就意味着取消了“系统保留”分区的活动状