无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 6312|回复: 13
打印 上一主题 下一主题

[讨论]关于Vista的引导故障修复

[复制链接]
跳转到指定楼层
1#
发表于 2008-3-2 19:49:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
个人比较讨厌Vista这东西,所以除了刚出来时随便找了台机器安装试用了一下之外,基本上就再没有用过。

在我安装vista的那台机器上,我装了多个系统,第一个主分区上安装了XP,第二个主分区上安装了Win2003,第三个主分区是一个DOS分区,这些分区之间的切换我使用BootStar。为了安装Vista,我在硬盘最后分了一个10G的NTFS分区,然后让Vista与第一主分区上的xp共享一个引导记录。当然,在安装vista之后,第一主分区的引导扇区被换成了vista的,在激活它之后,最先出现的就是vista的引导菜单,所有这些系统都可以正常引导。

但最近给别人装机器时,经常遇到预装vista系统的机器,一般他们既想保留Vista,又想再新安装一个xp。但我一直无法解决这个问题,往往是新的xp装好后,原来的vista就无法正常引导了。我一般的安装步骤是:将Vista所在分区使用无损数据分区软件(PQ、Acronis DDS、Paragon PM)缩小(一般这个分区出厂时都分配给了100G左右的空间),一般缩小到15G以内,然后在后面空出的空间再分出一个主分区并激活,然后在这个主分区上安装新的XP。但无论我如何做,都无法保证第一主分区的vista能够正常引导,xp的引导很容易修复,但vista似乎在mbr中做了手脚,只要分区结构有变动,vista就会罢工,就算你能够修复vista的引导扇区甚至bcd文件,仍然无法正常引导vista,印象中,最经常出现的错误就是找不到\windows\winload.exe。

不知道其他兄弟有没有类似的经验和技巧可以分享,请不吝赐教。
2#
发表于 2008-3-2 20:23:31 | 只看该作者
不知以下方法是否可行。(没用过)
1,调整vista分区,分出第二主分区。
2,备份mbr
3,安装xp
4,恢复原mbr

不过vista出现找不到文件后,只要用安装光盘修复一下应该就可以了。
回复

使用道具 举报

3#
 楼主| 发表于 2008-3-2 23:56:02 | 只看该作者
我试过这样了,仍然无效。

不过我搜索了一下国外的网络,发现了一些感兴趣的话题,我准备着力研究一下这个问题,当有结果时再公布技术细节吧。

还有,我从来没有将Vista刻到dvd上用过,我觉得这是对dvd盘片的污辱和浪费。
回复

使用道具 举报

4#
发表于 2008-3-3 07:27:49 | 只看该作者
前几天QQ里指导一人在独立主分区安装了xp与vista双系统,不过是先装xp,再装vista的。

下面是他装完后写的帖子。
-----------------------

xp,vista独立双系统安装方法

   本人是DELL 1420的机子,由于不名原因导致PM8.5的分区工具在DOS下无法正常运用,以下内容可根据个人情况自己删减。
   所谓独立双系统就是在任何一个系统受损的情况下,另外一个系统都可以正常运行,该方法与网上的安装双系统并不一样。有兴趣者可以对比下。
1. 为了保险,先安装XP然后在VISTA,由于无法在在DOS用分区工具,只能在XP安装时候进行分区,在XP下分出C,D两个区,把XP装在C盘下,使用分区工具(windows下的分区工具很多,随便一个就可以),把D盘改成主分区,同时把隐藏D区。
2. 使用PQBOOT激活第二个分区(此时已经隐藏D,则无盘符),重启后从光驱启动,把VISTA安装到第二个主分区。
3. 用分区工具在VISTA下分出逻辑分区,一次是D,E,F.....在VISTA下放个PQBOOT
4. 安装GGHOST2008,为了安全起见,备份下
5. 使用PQBOOT切换下到XP下,这时候你有可能会遇到原来的D变E,E变F。。。的情况,反正我就遇到了,这时候就要在XP调整盘符,方法是放入一光盘,你会很意外的发现这时候光驱是D,在个情况下进行调整盘符
6. 安装GGHOST2008,这样,独立双系统基本完成,同时都有了各自的备份软件
7. 在VISTA下观察下盘符,就会发现,你的系统里XP区已经隐藏,在XP下观察也是一样

下面是我的分区情况

注:1.如果不经常切换XP和VISTA,就可以使用PQBOOT切换,如果经常切换,可以自己设置双系统启动菜单。
    2,对于该独立系统来说,GGHOST 2008 菜单中的2,3,4,5选项有可能不能使用,这样你只要对4,5重写下,使得能互相激活,隐藏自身。详情可请教GGHOST。
    3,启动项最好别选写入MBR,毕竟VISTA是个“怪胎”,和XP放在一起那就更怪
    4,每做一步最好备份下,同时一定要有个GGHOST2008的启动盘,以防万一


   在此感谢GGHOST一直给与的帮助~~

   【出现盘符错乱的原因,由于在安装xp时,第二分区是可见的,装完xp后再激活第二分区,隐藏第一分区装vista造成的。
假如能在装xp前隐藏掉第二主分区(如通过启动光盘进行修改等),就不会出现盘符错乱的问题。】
回复

使用道具 举报

5#
发表于 2008-3-3 09:10:39 | 只看该作者
bootsect  用了没有呀?
他可以修复引导
比如:修复XP引导
   XP在C:
命令:bootsect /nt52 c:

比如:修复VISTA引导
   VISTA在D:

命令:bootsect /nt60 D:

[ 本帖最后由 xuexiang 于 2008-3-3 11:01 AM 编辑 ]
回复

使用道具 举报

6#
 楼主| 发表于 2008-3-3 09:20:50 | 只看该作者
上面这个帖子一点儿也没有参考价值。

安装xp和vista的双系统根本不需要如此麻烦。

经过我在网上搜索,发现vista的启动过程已经跟以前的NT系统不太一样,原来nt启动时不依赖于mbr中的disk signature(硬盘签名,这个签名占用MBR中0x1B8开始的4字节),而是依赖于boot.ini中按bios顺序指定的磁盘、分区编号启动。而现在的Vista的启动,已经跳过了bios,它在安装时将自己启动文件所在硬盘的签名写入了BCD文件中(同时将所在启动分区,也就是bootmgr和bcd及winload.exe所在的分区的起始扇区也写在了bcd中),它在启动时直接根据bcd中硬盘签名来找到自己的启动盘(所以,如果硬盘的mbr被重写导致硬盘签名改变,vista就无法正常启动),同时,如果你改变了vista启动分区所在的起始位置,也会导致vista无法正常启动。

基于vista的这些特性,基本上vista与现有的大部分启动管理软件冲突,因为大部分启动管理软件都会重写mbr。如果你在重写vista的mbr之前没有备份原来的mbr,或者你改变了vista启动分区的起始扇区位置,那么,基本上只有两个解决办法:

1、使用vista安装/拯救光盘启动系统并修复系统。参考命令:

bootrec.exe /fixmbr
bootsect.exe /nt60 all /force
ren C:\boot\bcd bcd.old
bootrec.exe /rebuildbcd

Vista拯救光盘下载地址:http://neosmart.net/blog/2008/wi ... very-disc-download/

2、使用第三方工具修复(过程与上面类似,但不再需要准备vista的安装盘或者拯救盘)。
例如使用EasyBCD。

http://neosmart.net/wiki/display ... loader+with+EasyBCD
回复

使用道具 举报

7#
发表于 2008-3-3 10:25:51 | 只看该作者
建议楼主研究一下bcd里盘符的意义,和注册表给系统芬盘符用的是一个原理,搞清之后你就会理解为何动一下分区vista就无法启动了,这和mbr关系不大。

这里短短的一个帖子无法说清这么多了。

顺便说一下,paragon的boot corrector很好用的,专门用来解决这类问题的。

[ 本帖最后由 fujianabc 于 2008-3-3 10:27 AM 编辑 ]
回复

使用道具 举报

8#
发表于 2009-5-10 16:19:46 | 只看该作者

我也正想解决这个问题呢。

手动 比较麻烦点。
这个说是远景写的bat 你看看,今天晚上 我回去。试试。
代码
@Echo Off
COLOR 2F

:Open
Title %Prog%——2008与VISTA启动项恢复
Echo.
Echo ╭═════════════════════╮
Echo ╭-═┤ 网虫2008制作 2008与VISTA启动项恢复 ├═-╮
Echo ║  ╰═════════════════════╯  ║
Echo ║ ║
Echo ║ [1] 2008与VISTA单系统启动项恢复 ║
Echo ║ ║
Echo ║ [2] 多系统启动项恢复(比如安装2008后再安装XP...)║
Echo ║ ║
Echo ║ [3] 1与2无法恢复,请选择此项(BCD替换法) ║
Echo ║ ║
Echo ╟══════════════════════════╢
Echo ║ 请在WinPE或管理员下运行此程序 ║
Echo ╰──────────────────────────╯
Echo.
Set Choice=
Set /P Choice=请选择要进行的操作 (1/2/3) ,然后按回车:
If "%Choice%"=="" Goto Open
If /I "%Choice%"=="1" call :start&&Goto okback
If /I "%Choice%"=="2" call :start&&Goto BackDXT
If /I "%Choice%"=="3" call :start&&Goto BackBCD
Goto Open

:start
Cls
SET XT_pan=
Echo.
SET /P XT_pan= 请输入2008或vista系统所在盘符后按回车,(不需要冒号,例如 C ):
if /I "%XT_pan%"=="" Goto Open
if /I Not "%XT_pan%"=="" Set XT_pan=%XT_pan%:
If /I Not Exist C:\boot boot.exe&&Goto BackBCD
If /I Not Exist C:\boot\bcd boot.exe&&Goto BackBCD
bootsect.exe /nt60 %XT_pan%
Goto :EOF

:BackDXT
bcdedit /store c:\boot\bcd /set {ntldr} device boot
bcdedit /store c:\boot\bcd /displayorder {ntldr} /addlast
bcdedit /store c:\boot\bcd /timeout 5
Goto okback

:BackBCD
copy bcd c:\bcd
bcdedit /import "c:\bcd"
Set current={d513f20a-5002-11dd-8533-a5e796a6c8cb}
bcdedit /store c:\boot\bcd /set {bootmgr} device partition=%XT_pan%
bcdedit /store c:\boot\bcd /set {default} device partition=%XT_pan%
bcdedit /store c:\boot\bcd /set {default} osdevice partition=%XT_pan%
bcdedit /store c:\boot\bcd /set %current% device partition=%XT_pan%
bcdedit /store c:\boot\bcd /set %current% filedevice partition=%XT_pan%
bcdedit /store c:\boot\bcd /set {memdiag} device partition=%XT_pan%
bcdedit /store c:\boot\bcd /set {ntldr} device boot
del c:\bcd
If /I "%Choice%"=="1" Goto okback
bcdedit /store c:\boot\bcd /displayorder {ntldr} /addlast
bcdedit /store c:\boot\bcd /timeout 5
Goto okback

kback
Cls
ATTRIB +S +H c:\boot>nul 2>nul
ATTRIB +S +H +R +A c:\bootmgr>nul 2>nul
Echo.
Echo *--------------------------------------------------------------------------*
Echo.
Echo 修复成功,请重新启动电脑
Echo.
Echo *--------------------------------------------------------------------------*
Echo.
Echo ╟════════ 按 任 意 键 退 出 ════════╢
PAUSE>NUL 2>NUL
Goto EX

:EX
exit
打错字了。重新编辑一下。 有两款软件都得要netframe2.0的支持,我就放弃用软件了。还不如直接用cmd  调 用引导修复工具呢。

[ 本帖最后由 3791436 于 2009-5-10 16:23 编辑 ]
回复

使用道具 举报

9#
 楼主| 发表于 2009-5-11 00:40:33 | 只看该作者

回复 #7 fujianabc 的帖子

楼上这位挖古墓挖出我当年这个帖子。

不过,看了7# fujianabc兄的回复,我有些不同意见商榷。

首先,你没有说清楚你想要讲什么,恕我愚钝,真的理解不了。

其次,遵循6楼我给的解决方案,我现在已经成功安装了若干台Vista和XP双系统的机器,当然,都是先有Vista然后再安装XP的。通过这些实践,我发现,Vista的启动基本上主要依赖于MBR中的微软磁盘标识那4个字节。只要你在安装XP之前将这四个字节(其实你就备份原来的MBR就行了)备份下来,然后在装完XP之后(我是指Vista和XP各使用独立主分区的安装方式),你会发现XP肯定会改写MBR中这四个字节的磁盘标识。这时候,你只要在XP下用WinHex编辑磁盘的MBR,将备份的Vista的磁盘标识写入原来的位置就可以了。

当然,如果Vista的引导扇区被破坏,你可以使用微软自己的bootsect程序来修复,如果是BCD文件中有需要调整的,你可以在XP下直接用bcdedit来修正相应的启动项,这里只有一点儿要注意,不要理会bcd中启动项的盘符在vista下是什么盘符,让它跟XP下对应分区显示的盘符一致就行了。

下面就是请fujianabc兄有时间认真讲一下注册表中的盘符分配是什么方案了,同时还要讲一下我提到的MBR中的磁盘标识与Vista的启动到底是什么关系。

当然,我到现在还是没有正式使用过Vista(都是给别人装机时遇到的),我准备直接Win7了。
回复

使用道具 举报

10#
发表于 2009-5-11 15:13:03 | 只看该作者
原帖由 Climbing 于 2009-5-11 00:40 发表
下面就是请fujianabc兄有时间认真讲一下注册表中的盘符分配是什么方案了,同时还要讲一下我提到的MBR中的磁盘标识与Vista的启动到底是什么关系。

简而言之,注册表中的盘符由HKLM\system\mounteddevices里面来控制,在mounteddevices里,
前面的比如\??\Volume{...}为分区的guid项,其数据内容是四个字节的mbr签名+分区起始位置字节数的16进制
后面的比如\DosDevices\C:为盘符控制项,其数据内容和guid项一致。

bcd文件中的盘符控制项方式与注册表完全相同,也是根据磁盘mbr签名和分区起始字节来判断的。

举个例子,比如磁盘mbr签名是ABCD,第一分区是从63*512=32256字节开始的

bcd中的描述类似于“从磁盘签名为ABCD的磁盘的起始于32256字节的分区启动”

而boot.ini就直接是“从第一硬盘的第一分区启动”

[ 本帖最后由 fujianabc 于 2009-5-11 15:14 编辑 ]
回复

使用道具 举报

11#
 楼主| 发表于 2009-5-11 15:56:23 | 只看该作者

回复 #10 fujianabc 的帖子

好,我现在明白了这个注册表中的“数据”内容是什么意思了。

至少,我现在比较认可你这种解释,因为这种解释正好验证了我前面所说的保留Vista的MBR签名四字节的必要性。当然,我一般给人装xp时,不会动Vista分区的起始位置(这是很自然的),而是在Vista分区后面继续分出另一个主分区用来安装XP系统。

问题来了,假设,我动了Vista分区的起始位置,有没有什么简便的方法修复它的启动呢?也就是说,我从哪个位置修改BCD中关于分区起始扇区字节数的描述信息?还有一个问题,如果我没有备份原来的MBR签名,是不是也有办法恢复Vista的正常启动呢?也就是说,有没有办法将BCD中记录的原MBR签名换成新的?

[ 本帖最后由 Climbing 于 2009-5-11 15:57 编辑 ]
回复

使用道具 举报

12#
发表于 2009-5-11 16:55:07 | 只看该作者
原帖由 Climbing 于 2009-5-11 15:56 发表
好,我现在明白了这个注册表中的“数据”内容是什么意思了。

至少,我现在比较认可你这种解释,因为这种解释正好验证了我前面所说的保留Vista的MBR签名四字节的必要性。当然,我一般给人装xp时,不会动Vista ...

一个变通的办法是bcdedit时不指定具体盘符,而用[boot]代替,比如[boot]\ntldr
[boot]指bootmgr所在分区,与mbr签名和分区位置无关。
回复

使用道具 举报

13#
 楼主| 发表于 2009-5-12 01:05:52 | 只看该作者

回复 #12 fujianabc 的帖子

我想问的是通用的解决方案,例如:假设我的启动分区(也就是bootmgr和bcd所在的分区)跟vista所在的分区不是同一个分区该怎么办?
回复

使用道具 举报

14#
发表于 2009-5-12 14:58:31 | 只看该作者
原帖由 Climbing 于 2009-5-12 01:05 发表
我想问的是通用的解决方案,例如:假设我的启动分区(也就是bootmgr和bcd所在的分区)跟vista所在的分区不是同一个分区该怎么办?

你这种情况修复一下bcd就是了,用win7的bcdboot.exe很容易修复的,在winpe 2.x/3.0下面,如果你的vista所在分区是c:,bootmgr所在分区是d:,那么
bcdboot c:\windows /s d:
即可

bcdboot.rar

61.03 KB, 下载次数: 22, 下载积分: 无忧币 -2

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-20 04:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表