利用 bcdedit 解决 Vista 启动问题

前一段时间,把系统原来的还原分区(一个NTFS)清了,在那里装了FreeBSD 8/amd64。之后发现,FreeBSD的分区引导记录很不行,他只找活动分区启动,而不管自己是哪个分区的引导记录(大概也不知道……),所以从原来的BSD切换到新装的很麻烦,要手动改活动分区。于是就装了个grub4dos,折腾了半天终于好了。装完之后,尝试新菜单,发现Vista进不去了…… 提示大概是这样的:\Windows\system32\winload.exe 文件未找到或者已损坏 错误0xc000000e。试了一下,发现Vista启动菜单里面其他的项目也用不了了。
想了一下,多半是干掉那个还原分区之后,Windows所在的分区成了第一个Windows能够认出来的分区,于是这个Boot Loader分不清楚了,不能在老地方找到这个文件了……
先尝试把那个新装了BSD的分区类型改成NTFS,结果Windows还是不认…… 改回去之后,我想只好手动修改启动数据库了。Vista的启动数据库,不像XP就是根目录下面有一个boot.ini,而是在根目录下面\Boot\BCD这个文件里面,还是个二进制文件…… Windows就给了一个bcdedit来弄。
因为进不了Vista,我尝试着用虚拟机里的XP来跑。这个虚拟机同时也把主机的真实硬盘作为第二块硬盘挂在上面。
启动虚拟机,尝试了一下,bcdedit竟然能用,于是拷到WinXP这边来。主机Vista所在的盘在虚拟机里面是D盘,所以在运行bcdedit的时候,后面都要加上/store d:\boot\BCD 。
改的过程其实很少。bcdedit原来那些命令也都能用。
命令里面某一项的GUID,可以通过直接运行 bcdedit /store d:\boot\BCD 来了解,最上面{xxxxxxxx-…..}那个就是了,一串很长的十六进制数。默认项这个可以用{default}代替。
首先,把默认项指定成Vista(原来是老BSD):
bcdedit /store d:\boot\BCD /default <Vista项的GUID>
然后设置默认项设备为分区d(一开始我设了c,结果还是不行…… Windows还是把那个算进去了么……)
bcdedit /store d:\boot\BCD /set {default} device partition=D:
bcdedit /store d:\boot\BCD /set {default} osdevice partition=D:
这就好了。
效果不用重启都能看见。还是利用虚拟机,qemu或者VirtualBox都可以,直接挂主机硬盘,Vista果然跑起来了…… 不过一会儿就蓝屏了……