修复win7的mbr

修复win7的mbr(zz)

(2010-08-09 10:06:06)
这几天帮人修复win7引导,发现一些规律:

1. BCD里面记录的,确实是分区GUID,而非 C: D: ... 盘符。而通过 bcdedit 或 easyBCD 查看到的
osdevice partition=C:
是经过“翻译”的, bcdedit 把 GUID 翻译成该分区在当前环境下的盘符

2. GUID 确实与 MBR 有关。我试着重现故障,在 dos 用 diskgen 2.0 重写硬盘主引导记录(MBR)后,win7果然不能启动,bootmgr找不到系统盘了。应该是GUID变化导致的。
linux 中,分区 UUID 与MBR无关。而微软把分区 GUID 和 MBR 扯在一起,不知道是怎么想的。或许是出于技术考虑。但客观上给 win7 与 linux 双系统用户造成了麻烦:安装 linux ,可以,安装 GRUB 不会碰触到 MBR 中与 GUID 有关的关键字段,此时 win7 可以正常启动;然而,当 GRUB 出了问题,想恢复微软MBR,可要小心了,过去惯用的 fdisk /mbr 、diskgen重建MBR 方法都有问题了。

3. 我试着把 iso中的 bootmgr 和 boot 目录解压到D盘,在D盘新建文件夹,命名为 sources,把 iso 中 sources 目录下的 boot.wim 解出来 放进去,重启,从 BIOS 设定的默认启动设备进入 GRUB4DOS(这一点很重要,后面详述),chainloader (hd0,4)/bootmgr ,boot ,即可进入 win7 PE ,修复引导。
这一点上比 xp 先进了。xp 的启动器只能从第一活动主分区载入 boot.ini。而从试验结果看, bootmgr 会默认加载同分区中的 boot/BCD ,这借鉴了 grldr 默认加载同分区 menu.lst 的特性 (呵呵,这样说有点吹捧 GRUB4DOS ,不过,的的确确是 GRUB4DOS 最先引入这一特性)。而从ISO中取来的 BCD ,又默认加载同分区中的 sources/boot.wim :
复制内容到剪贴板
代码:
Windows Boot Loader
-------------------
identifier              {7619dcc9-fafe-11d9-b411-000476eba25f}
device                  ramdisk=[boot]/sources/boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
path                    /windows/system32/boot/winload.exe
description             Windows Setup
locale                  en-US
inherit                 {6efb52bf-1766-41db-a6b3-0ee5eff72bd7}
osdevice                ramdisk=[boot]/sources/boot.wim,{7619dcc8-fafe-11d9-b411-000476eba25f}
systemroot              /windows
detecthal               Yes
winpe                   Yes
ems                     Yes
这样一来,bootmgr、boot 、sources 不再限制于主分区,放在逻辑分区也可以启动

4. 从U盘启动修复 win7 引导,有些麻烦。
这是因为 win7 修复程序会把修复的引导记录写入 当前启动分区 。所谓 当前启动分区 也就是 (hd0,0)。举例来说,我有两块内置硬盘 A 和 B,一块移动硬盘,BIOS 设定从 A 启动,那么启动后,硬盘A的第一活动主分区即 win7 认为的“当前启动分区”。假如启动时按 ESC 键进入选择菜单,选了从 移动硬盘 启动,那么,移动硬盘的第一分区就是 “当前启动分区” 。

回到正题,从U盘启动,假如是ZIP模式,即 U盘在 bios 里映射为 0x00,盘符为A,那么, “当前启动分区” 是 BIOS 设定的第一硬盘的第一分区,也就是正常的启动分区,此时修复程序会把 win7 引导写入该盘,重启后,就会进入win7菜单,一切OK。光盘启动与此类似,只不过变成 0xff 。

然而,如果U盘是以HDD模式启动,那么,进入 WIN7 PE后,U盘第一分区将成为 “当前启动分区” ,修复的引导 将被写入U盘第一分区,而内置硬盘上的引导 故障依旧。当你摘下U盘,从内置硬盘启动时,依旧不能进入 win7 。移动硬盘也有类似问题。

回复1:
我试着重现故障,在 dos 用 diskgen 2.0 重写硬盘主引导记录(MBR)后,win7果然不能启动
---
这个应该是跟mbr引导代码有关,diskgen用的是Nt 5.x
而vistat以后用的是Nt 6.x
好像boot.wim是iso自带的pe环境...

回复2:
VISTA 以上系统启动都要检查 MBR 中的磁盘签名,这个以前讨论过的,磁盘签名变了就不能启动了。DISKGENIUS 重写 MBR 也重写了磁盘签名,所以 WIN7 不能启动了。

回复3:
磁盘签名改变了,HKEY_LOCAL_MACHINE/SYSTEM/MountedDevices下的值未变,就导致WINDOWS找不到用户配置文件,最后就是楼上的情况了。这种情况在XP、2003中也会发生。
该变了系统分区大小后,系统分区上的系统启动后也会发什这种情况。
一般重写硬盘MBR后,还要加载系统的注册表,把MountedDevices下的值删掉,WINDOWS启动后会自动创建的。
但有些系统删掉MountedDevices下的值却还是找不到户配置文件(原因不明),解决方法就是进PE,复制MountedDevices下的值,覆盖到原系统的MountedDevices下。

回复4:
其实用bcdboot这么一条简单的命令就能搞定bcd的修复,不管你是从什么设备启动的winpe,用bcdboot可以搞定上面几种情况

回复5:
回楼上几位,系统登陆时卡住,或者空桌面卡助,都是由于盘磁盘签名变化使得mounteddevice下盘符分配不再有效所造成的。

2000/xp/vista/win7都会碰到这种问题,如果把系统装在第一分区,碰到问题时直接清空mounteddevice重新自动分配盘符就可以了。

但如果系统装在非第一主分区,但系统盘盘符是c:,或者像pt这种系统盘盘符是e:,但该分区按照windows自动盘符分配规则不是e:,则清空mounteddevice不能解决,因为系统自动分配的盘符与系统盘符不一致仍旧会卡助。

解决方法有两种:
1、用paragon partition manager里面的boot corrector,可以离线手动分配mounteddevice中每个分区的盘符
2、在winpe中用微软的这个脚本(我做过一些修改),比如pe中windows分区的盘符为f:,则 driveletter /currentos:f  即可,这个批处理会自动从离线系统注册表的software中找到windows分区的盘符,然后从winpe注册表的mounteddevice下把系统盘对应的项复制到离线系统的mounteddevice中,并把盘符修正为离线系统的盘符。

回复6:
在PE3.0的系统下用RegWorkshop加载win7的SYSTEM到HKEY_LOCAL_MACHINE下,随便起个名如:win7
然后删除HKEY_LOCAL_MACHINE/win7/MountedDevices
复制HKEY_LOCAL_MACHINE/SYSTEM/MountedDevices到HKEY_LOCAL_MACHINE/win7/MountedDevices
然后卸载配置单元就可以了。

其他测试解决方法:
1.bootsect.exe  通过 bootsect /nt60 SYS 来修复MBR

2.用win7 安装光盘启动,选修复计算机,在命令提示符窗口下运行
bootsect /nt60 c: /mbr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值