Windows7 引导修复
一、Windows7引导概述
配置windows update失败(一)术语说明
Bootmgr(Windows Boot Manager):Windows启动管理器
BCD(Boot Configuration Data):启动配置数据存储
(二)双分区Windows7与单分区Windows7
1、双分区Windows7:Win7安装后默认占用两个主分区,一个C盘(windows文件夹所在的盘,硬盘的第一个分区,不是活动的)和一个隐藏分区(引导文件所在的盘,硬盘的第二个分区,真正的活动分区)。
2、单分区Windows7:可以将Win7默认安装出的两个分区合二为一,合并方法是:①将两个分区的文件合并到C盘(即硬盘第一个分区);②将C盘设为活动分区;③执行"bootsect /nt60 c:"给C盘写入兼容bootmgr的引导代码;④用Windows7的安装光盘启动计算机,进入光盘后选择“修复计算机”,光盘中的“系统恢复选项”就开始工作了,稍等提示完成,重启OK。
(三)Windows7的引导过程
1、BIOS按设置的存储介质次序轮询到硬盘后,首先寻硬盘的MBR(主引导记录)和DPT(分区表),然后根据MBR和DPT中的信息寻系统分区。
2、硬盘MBR中有两个重要信息(引导代码):一个是“目标分区”,一个是“系统类型”。带/MBR参数的bootsect能向MBR中同时写入“活动标记”和“系统类型”。
3、DPT就像是一副地图,MBR中的“目标分区”就像是目的地地名,一般的分区工具都将这个地名写成“活动分区”,但有些软件会对地名进行特殊改写,比如一键还原精灵就将地名改写为自己的“备份/恢复分区”,而这个“备份/恢复分区”并不是活动的。
4、活动分区的PBR(分区引导记录,也叫OBR或DBR)中也有一个重要信息(引导代码),即“引导文件名称”。对于WinXP,“引导文件名称”是“ntldr”。对于Win7,“引导文件名称”是“bootmgr”。BIOS根据MBR和DPT到活动分区后,就按PBR中的“引导文件名称”在该分区根目录下寻ntldr(bootmgr)文件,如果到就将控制权交给ntldr(bootmgr),如果不到就提示ntldr(bootmgr)丢失,终止引导。带不同参数的bootsect能向PBR中写入不同的“引导文件名称”。
5、ntldr(bootmgr)接管控制权后,就在根目录下寻并加载启动环境文件(字体文件等)和启动配置文件,然后按启动配置文件中的指令继续下一步引导。对于WinXP,启动配置文件是活动分区根目录下的boot.ini,boot.ini内容单一,它指令ntldr直接加载系统内核。对于Win7,启动配置文件是活动分区根
目录下的boot\BCD,BCD内容复杂,它会指令bootmgr对系统配置进行多项验证,首先验证硬盘MBR中是否有兼容bootmgr的“系统类型”信息,验证一致就接着引导,验证不一致就给出提示,终止引导。
6、Win7启动失败后,通常会有五种提示:①不着设备——活
动分区PBR空白,引导进程根本没加载到bootmgr——格式化活动分区造成的;②不着操作系统——MBR中没有兼容bootmgr的“系统类型”信息——FDISK /MBR造成的;③开机自动启动“Windows启动修复”——其他都没问题,但分区表局部紊乱——GHOST不对等恢复造成的。④Windows启动管理器弹出0xc000000f错误——其他都没问题,但分区表局部紊乱——GHOST不对等恢复+误删/Recovery目录造成的;⑤Windows启动管理器弹出0xc000000e错误——bootmgr不到BCD中dvice选项指定的分区——起因详见“四、手工解决0xc000000e错误”。
7、关于GHOST:①GHOST的对象包括整个PBR、文件系统和用户数据。②GHOST不对等恢复不会改变目标分区的大小,但会造成分区表局部紊乱。
二、Windows7引导代码的维护
(一)Windows7引导代码维护概述
引导代码的维护的目的是更新硬盘的MBR(主引导记录)和分区的PBR(分区引导记录)以在识别bootmgr
和识别ntldr之间切换。更新MBR和PBR最方便、最通用、最专业的工具是Bootsect。是一个单文件程序(附含在Windows vista/7安装光盘的boot目录下),支持Windows命令行运行(包括WinPE命令行)。推荐用光盘启动WinPE执行,硬盘操作系统下执行有时会因无法锁定目标卷造成PBR更新失败。另外要注意的是,Vista的没有/mbr参数,因而它只能更新PBR,而不能更新MBR。
(二)Bootsect命令参数
< {/help | /nt52 | /nt60} {SYS | ALL | <DriveLetter:>}[/force] /mbr
参数 描述
/help 显示使用说明。
/nt52 将与 NTLDR 兼容的主启动代码应用到 SYS、ALL 或 <DriveLetter>。在 SYS、ALL 或 <DriveLetter> 上安装的操作系统必须是 Windows(R) XP。
/nt60 将与 Bootmgr 兼容的主启动代码应用到 SYS、ALL 或 <DriveLetter>。在 SYS、ALL 或 <DriveLetter> 上安装的操作系统必须是 Windows Vista?。
SYS 更新用于启动 Windows 的系统分区上的主启动代码。
ALL 更新所有分区上的主启动代码。ALL 选项不必更新每个卷的启动代码。相反,该选项将更新可用作 Windows 启动卷(不包括没有与基础磁盘分区连接的动态卷)的卷上的启动代码。存在此限制是因为启动代码必须位于磁盘分区的起始处。
<DriveLetter> 更新与此驱动器号关联的卷上的主启动代码。在以下两种情况下,不会更新引导代码:
<DriveLetter> 没有与卷关联
<DriveLetter> 与未连接到基础磁盘分区的卷关联。
/force 在启动代码更新期间强制卸除卷。必须谨慎使用该选项。
如果 无法获得独占的卷访问权限,则文件系统可能在下一次重新启动前覆盖启动代码。 始终会在每次更新前尝试锁定和卸除卷。当指定 /force 时,如果初始的锁定尝试失败
王者荣耀实名认证怎么修改
,将尝试强制卸除。例如,如果目标卷上的文件当前已被其他程序打开,则锁定可能会失败。
如果锁定成功,强制卸除将启用独占卷访问权限和可靠的启动代码更新,即使初始锁定失败。同时,强制卸除将使指向目标卷上文件的所有打开的句柄无效。这可以导致来自打开这些文件的程序的意外行为。因此,请谨慎使用该选项。
/mbr 更新主启动记录,而不对包含 SYS、ALL 或 <drive letter> 指定的分区的磁盘扇区 0 上的分区表进行更改。当与 /nt52 选项一起使用时,主启动记录将与 Windows Vista 以前版本的操作系统兼容。当与 /nt60 选项一起使用时,主启动记录将与 Windows? 7、Windows Vista、Windows Server? 2008 或 Windows Server? 2008 R2 兼容。
(三)Bootsect应用示例
bootsect /nt52 E:    给E盘写入兼容WindowsXP的PBR。
bootsect /nt60 sys /mbr    给硬盘写入兼容Windows7和Vista的MBR,给活动分区写入兼容Windows7和Vista的PBR。
bootsect /nt52 sys /mbr    给硬盘写入兼容WindowsXP的MBR,给活动分区写入兼容WindowsXP的PBR。
(四)Bootsect返回信息释义
下图是WinPE下给双分区的Win7重写PBR和MBR成功后的返回信息。
1、Target volumes will be updated with NTLDR compatible bootcode
(目标卷将被与NTLDR兼容的引导代码更新)
2、X:  <\\?\Volume{···}>
(本地计算机上标识符为{···}的卷(分区),X: 是该卷的盘符,未分配时不显示X: 和 < > 。此处要特别注意,Bootsect识别出的标识符多半是错的)
3、Successfully updated NTFS filesystem bootcode
(成功更新了NTFS文件系统引导代码)
4、Updated NTFS filesystem bootcode。The update may be unreliable since the volume could not be locked during the update
(更新NTFS文件系统引导代码。更新可能无效,因为该卷在更新时无法锁定)
5、Bootcode was successfully updated on all targeted volumes
(所有目标卷上的引导代码已被成功更新)
6、\??\PhysicalDrive0
(\本地计算机\物理驱动器0,一般指主硬盘)
7、\Device\Harddisk0\DR0
(\设备\硬盘0\数据记录器0)
8、Successfully updated disk bootcode
(成功更新了磁盘引导代码)
三、Windows7引导文件的维护
(一)Windows7引导文件维护概述
Windows7的引导文件包括bootmgr和整个boot目录(内含BCD等),若其中某个文件丢失或损坏,Windows7将无法启动。引导文件维护的办法有以下三种:
1、完全备份法:就是将引导文件复制一份保存起来,有需要时再复制回去。
2、Bcdedit编辑法:只能用于维护BCD,由于BCD不能像XP的boot.ini那样直接用记事本打开编辑启动选项,而且目前尚没有简单易行的第三方编辑工具,所以在BCD中自定义启动选项只能使用Bcdedit。
Bcdedit是一个编辑BCD(启动配置数据)的命令行工具
。它有多种功能,包括创建新的BCD、修改现有BCD以及添加启动菜单选项等。该工具与分发一起包含在%WINDIR%\System32文件夹中。你需要有管理员权限才能使用Bcdedit。注意Bcdedit默认操作的是活动分区下的\boot\BCD,即使活动分区没有盘符或者是隐藏分区,操作都仍然有效。要操作其它路径的BCD,请用bcdedit /store参数指定。
3、完全创建法:必须使用,该工具与分发一起包含在%WINDIR%\System32文件夹中,利用它可以从已有的Windows映像(%WINDIR%\boot和%WINDIR%\System32)创建一套启动环境文件(整个boot目录,内含BCD等)到系统分区中,Windows7安装光盘中的“启动修复”就是以该工具为内核,但由于“启动修复”自动运行,不能按需进行区域设置,因此会按默认值美国进行创建,自动修复后的启动菜单以后就是英文的了。至于手工操作,太复杂了,没有必要掌握。
(二)BCD中的项和元素
BCD中的项只能有两种,即启动管理器项和启动加载器项。启动管理器项必须有且只能有一个,启动加载器项却可以有好几个(每个启动加载器项对应一个操作系统)。启动管理器项统领所有启动加载器项。项的子项就是元素,也叫项选项。
(三)BCD中的标识符
BCD中的每个项和重要元素都有一个全局唯一的标识符,用于对它们进行识别和管理。标识符使用GUID格式({xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}),其中的x都是十六进制数。GUID标识符可以通过bcdedit /v命令查看。为方便记忆,微软使用缩写形式来表示几个特定项和元素的GUID标识符。执行bcdedit(不带参数)如果显示以下字符,就说明相应的项或元素正以缩写形式显示GUID标识符。
{bootmgr} Windows启动管理器项
{default} 默认启动加载器项
李晨 赵琼{ntldr} 早于Vista的Windows启动加载器项
清蒸鲈鱼做法和步骤家常做法
{current} 当前运行的启动加载器项
{globalsettings} 验证全局设置(包括验证MBR中是否有兼容bootmgr的引导代码)
{memdiag} 内存诊断
{badmemory} RAM故障列表
{dbgsettings} 验证调试程序运行环境
{emssettings} 验证紧急管理服务运行环境
{ramdiskoptions} 验证启动管理器运行的RAM环境
{bootloadersettings} 验证启动加载器运行环境
{resumeloadersettings} 验证休眠恢复运行环境
{fwbootmgr} 固件启动管理器项(仅用于EFI规格的计算机上)
下图是双分区(活动分区无盘符)的Win7执行bcdedit /v显示的详细模式的BCD。图中BCD有两个项,一个启动管理器项和一个启动加载器项,注意用方框圈住的三个标识符,所有装了Win7的计算机都是同一个值。
下图是双分区(活动分区无盘符)的Win7执行bcdedit(不带参数)显示的缩写模式的BCD。图中的BCD有两个项,一个启动管理器项和一个启动加载器项,注意用方框圈住的
三个标识符,所有装了Win7的计算机都是同一个值。
(四)Bcdedit命令参数
常规参数
参数 描述
/? 显示 BCDEdit 命令列表。运行此命令(不带参数)将显示可用命令的摘要。若要显示特定命令的详细帮助,请运行 bcdedit /?命令,其中命令是正在搜索其详细信息的命令的名称。例如,bcdedit /? createstore 显示 Createstore 命令的详细帮助。
用于文件的参数
参数 描述
/createstore 新建一个空的BCD。创建的BCD不是系统BCD。
/export 将系统BCD的内容导出到文件。此文件可以在以后用于还原系统BCD的状态。此命令仅对系统BCD有效。
/import 使用以前使用 /export 选项生成的备份数据文件来还原系统BCD的状态。此命令将删除系统BCD中导入发生以前的所有现有项。此命令仅对系统BCD有效。
/
store 此选项可以与大多数 BCDedit 命令一起用来指定要使用的BCD。如果未指定此选项,则 BCDEdit 将在系统BCD上操作。自身运行 bcdedit /store 命令等同于运行 bcdedit /enum active 命令。
例如:
1. 在D盘创建一个名为newstroe的BCD文件
bcdedit /createstore d:\newstroe
2. 将系统BCD备份为d:\bcdbake文件
bcdedit /export d:\bcdbake
3. 将d:\bcdbake文件还原为系统BCD
bcdedit /import d:\bcdbake
用于项的参数
参数 描述
/copy 复制同一BCD中指定的启动加载器项。启动管理器项不能被复制。
王杰退出歌坛/create 在BCD中创建一个新的空项。如果同时指定了一个正在使用的标识符,则无法指定 /application、/inherit 和 /device 选项。如果未指定标识符或指定的标识符未被使用,则必须指定 /application、/inherit 和 /device 选项。
语法:bcdedit /create [{<id>}] /d <description> [-application <apptype> | /inherit [<apptype>]|/inherit DEVICE | /device]
其中,<id>指定新项要使用的标识符,<description>指定新项要使用的描述,/application <apptype>指定新项必须是应用程序项,<apptype>指定应用程序类型,其值可以是BOOTSECTOR、OSLOADER、RESUME、STARTUP。
/delete 删除BCD中指定的项。
例如:
1. 创建基于NTLDR的启动加载器项
bcdedit /create {ntldr} /d "Earlier Windows OS Loader"
2. 创建新的启动加载器项
bcdedit /create /d "Windows Vista" /application osloader
3. 复制当前系统的启动加载器项
bcdedit /copy {current} /d "copy of osloader"
4. 删除GUID为{9f62d3dc-3054-11dd-95a5-001e3d8b719b}的启动加载器项
bcdedit /delete {9f62d3dc-3054-11dd-95a5-001e3d8b719b}
用于项选项的参数
参数 描述
/deletevalue 删除指定项中的一个元素。
语法:bcdedit [/store <filename>] /deletevalue [<id>] <datatype>
/set 设置一个项选项值。
语法:bcdedit [/store <filename>] /set [{<id>}] <datatype> <value>
其中,filename是BCD的名称,<id>是项的标识符(若不指定则默认为{current}),<datatype>是选大血藤的功效与作用