Windows 7, Windows XP和Linux Fedora 三重启动修复
一、 启动项说明
我想大家知道系统启动之后首先通过mbr来引导机器上安装好的操作系统,如果操作系统的安装顺序不对,即先安装高版本后安装低版本,或者先安装Linux后安装Windows,这个时候,后来安装的系统改写了mbr的内容,就无法引导先安装上的操作系统了,下面举说明:
安装顺序为 Windows 7 Window XP,则Win 7无法引导;
安装顺序为 Linux Windows, Linux无法引导。
如果我们先安装Windows,后安装Linux,事情好办很多,至少有一个Windows是可以启动的。另一外启动项用下面介绍的内容来修复。
有很多高手介绍了用安装盘来引导,这里我们讲解的是没有安装盘,用一些工具辅助一些命令来完成引导项的修复。
Windows XP的启动项是:ntldr,如果要在Windows 7下修复,有可能丢失了NTDETECT
(是,如果是.exe则为病毒),这两个文件在安装盘和正常机器(XP系统)的系统盘根目录下都有,而且属性都是SHR(system, hidden, read)所以一定要在命令行提示符下进入系统根目录,操作如下:
开始运行,输入cmd,确定,进入到命令终端(DOS)界面。
CURENT_PATH> cd \  (退到系统盘根目录,因为打开命令行后不一定在根目录下,前面的CURENT_PATH代表当前路径,显示是什么就是什么)
X:\>attrib ntldr –r –s –h  (X代表系统盘盘符,如C盘,则C:\>)
就可以到 ntldr了。
X:\>attrib ntdetect –r –s –h
就可以到ntdetect了
Windows 7启动项是:bootmgr。这个文件在启动盘根目录下,对于很多用户装双系统而Windows 7又不是启动盘的情况下,该文件是不在Win 7系统目录下的。比如,在C盘(启动
盘)安装了Windows XP,D盘装Windows 7,则bootmgr在C盘而不在D盘,但是它也是SHR属性的哦。该文件在Window 7安装盘的根目录下也能到,这时候不是SHR属性,直接copy到启动盘根目录下可以使用。
此外,要启动Windows 7,bcd文件是必不可少的,一般在正常情况下,该文件位于启动盘(如C盘)Boot文件夹中,而文件夹boot的属性一般为 SH(system, hidden),bcd文件属性一般也是SH;想要到boot文件夹和bcd文件,你可以直接在浏览器中输入如 C:\boot,即能打开,也可以用atrrib命令取消其SH属性,如:
X:\>attrib boot –s –h
X:\>cd boot
X:\boot>attrib bcd –s –h
(提醒同学们注意哦,windows系统也有不带扩展名的文件,上面的ntldr,这里的bootmgr和bcd就是如此。用过Linux的人我想不会有这个疑惑的)
请注意,安装盘或安装镜像(iso文件)里boot文件夹(里面有文件bcd)直接copy下来是不可用的,因为该文件夹里的bcd是引导系统安装用的。
为什么不能用windows文件夹选项的“查看隐藏文件或文件夹”这个选项来查看呢?很遗憾的告诉你,即使你这样设置了,你能打开隐藏文件,但具有系统属性的文件你还是看不到。所以必须要先去除它们的系统属性,这就是attrib命令的能耐了。
二、 Windows XP下修复Window 7启动项
有这么麻烦吗,其实没有。
方法一:BCDAutofix
从网络上下载一个BCDAutofix,解压之后,按照它的提示运行一下,就能修复Windows 7启动项了。
方法二:EasyBCD
下载一个EasyBCD,但操作麻烦一点点,你可以去网络上一搜一大堆,这里只提醒注意一个
事情。想让EasyBCD在XP下运行起来,必须装好DotNetFrameWork2.0以上的版本。
方法三:用安装盘中的bootsec命令
用这个方法的前提是bootmgr和bcd完好,只是mbr里面没有Windows 7的引导信息。是这种情形是怎么出现的呢?是在你装好Windows 7之后,又安装了XP或低版本的Windows,但安装前或者安装过程中并没有格式化启动盘,使得这些文件都保存下来了,而在安装低版本的Windows时会修改了mbr,使得不能引导Window 7了。这个时候,只要你在命令行运行一下bootsect /nt60 sys(或者bootsect /nt60 c: C盘为启动盘)就修复了。这个文件在哪里呢?在安装盘的boot文件夹里,到它所在的目录,然后用上面的命令运行,或者把它copy到 C:盘都可以。如果你没有安装盘,iso你总有,不然怎么安装的?再者,网络你总有吧,不然怎么看到我的这篇文章,到网络下载一个都行,大小为110K。
和方法三相比,方法一和二不管是不是有bootmgr,bcd文件,操作都可以完成,即你格过启动盘也没关系(不是把Win 7格掉了)。这两个方法完成后,你都可以在启动盘根目录下到bootmgr文件,boot文件夹及里面的bcd文件,里面应该还有好多其他的文件或文件夹,干什么用,这里不多说,高手一看便能明白。
所以Window XP下修复Windows 7是很容易的一个事情。
在这里提及一下另一整方法。
有人指出可以进到Windows 7系统目录 \windows\system32下通过调用bcdboot和bcdedit命令来完成修复,但是很遗憾的告诉你,因为你在XP下,系统不会调用Windows 7目录下的动态链接库文件msvcrt.dll,上面两条命令要调用的接口函数在XP下的msvcrt.dll中是没有的,所以操作不会成功。
三、 Windows 7修复Windows XP
这个应该说更简单,你能进Windows 7一般ntldr和ntdetect都没丢,如果丢了,它们在XP的安装盘里也都能到,copy到启动目录下即能用了。
方法一:BCDAutofix
同上面一样简单。
方法二:EasyBCD
也和上面一样。
注意用方法一添加的启动项,Windows 7以前的版本都被叫做“早期版本的Windows”,它不会给你取个正确的名字,需要自己修改。可以用EasyBCD来改,也可以用bcdedit命令来改。一定要用“管理员身份”启动哦,否则修改可能会不成功。如何使用,
bcdedit /?一下就会提示你了,中文的(必须是中文操作系统)。
方法三:bcdedit
都已经在Windows 7下了,还怕啥,哈哈。
用管理员身份运行之后,输入
CURRENT_PATH>bcdedit    (CURRENT_PATH是当前路径,其实不用担心路径,原因4个——环境变量。)
所有的启动项信息就都列出来了。如果有XP或其他早期版本的Windows(比Vista早的Windows,Vista的启动和Win 7是一样的)则有一项内容如下:
Windows 旧 OS 加载器
―――――――――――――――
标识符            ntldr
device              partition=C:    (我的XPC)
path                \ntldr
description        Microsoft Windows XP (这个被我改成了这个名字)
locale                zh-CN
如果这些信息都有,只可能是配置不正确了,如丢了ntldr,自然启不动,当启动时报的错自然会告诉你 /ntldr 文件丢失。如果丢了ntdetect,也会告诉你该文件丢失了,把这些文件从安装光盘或都镜像中,或者其他安装了XP且正常的机器中copy过来放在启动盘中就行了。
当然你也可能不是装在C盘,这个时候你再要加载器去
partition=C:
中去怎样打开隐藏文件XP并启动,自然不成功,如在D,怎么办?很简单,用一下bcdedit /set /?命令,它会告诉你如何修复,里面讲了示例,如改到D盘:
CURRENT_PATH>bcdedit /set {ntldr} device partition=D:
如果没有到该项,怎么办?手动创建一个。
bcdedit /create {ntldr} /d "Windows XP"  (创建XP启动项)
bcdedit /set {ntldr} device partition=C:  (修改操作系统设备驱动器)
bcdedit /set {ntldr} path \ntldr        (修改ntldr所在路径)
bcdedit /displayorder {ntldr} /addlast    (将该显示项加到列表最后)
只要你多玩一下,这个东西用起来也是很简单的。
四、 在Windows下修复 Linux(以Fedora为例)
不管怎样,Windows总进得去一个吧!如果真进不去,那重装吧。或者你干脆机器上没有Windows,还修复什么呢?而且,如果你备份好了Linux下的 f或menu.lst,那事情就好办了,如果没有,自己去到软件,到Linux文件系统中去把它出来吧,否则,怕永远都进不去了,高手不在其列。
第一步:用前面的步骤修复Windows XP或者Windows 7
第二步:进到Win 7
为什么用Win 7呢,就是因为有好用的bcdedit。
第三步:用EasyBCD添加一个Linux启动项,记住要选grub2,说实话,其他的我也没试过。记得把它装到启动盘上去,在高级设置中可以更改的,用了就知道。
为什么用EasyBCD来加,主要是因为不想输入bcdedit下那一串标识符(id)
<xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx>  (8-4-4-4-12总共32个16进制数)
如果你觉得自己可以做到,那就输吧,命令bcdedit /create /?会告诉你怎么做的,还告诉了
你哪些标识符已经被占用了,反正我用EasyBCD来偷了个懒。
用EasyBCD添加Linux启动项之后,可以在启动盘下看到一个/NTS文件夹,里面有一个AutoNeoGrub0.mbr。另外还帮你加载了一个grub4dos,至今我没到那个文件在什么位置,惭愧,如果你用手工加载的话,也必须自己准备好grub4dos。
到这里,你别指望它能够帮你启动,它连menu.lst都不会引导。还是要用grub4dos。
第三步,到grub4dos中提取grldr.mbr,grldr两个文件放在启动盘根目录,上面的/NTS/AutoNeoGrub0.mbr,直接删除掉吧。下面用bcdedit来修改Linux的启动项,主要是把path改到\grldr.mbr上,其他的看你的需要而定。
CURRENT_PATH>bcdedit /set {id} path=\grldr.mbr (其中id就是那个32位长串,直接通过bcdedit命令可以查看到,不加参数)
当然,这里也可以将设备驱动器改到启动盘上来,就是第三步中说到的,如
CURRENT_PATH>bcdedit /set {id} device partition=C: