在很多网上的教程里都告诉我们,如果要在你的电脑里装多个系统,那么一定要按照这个顺序装:低等级 Windows 系统→高等级 Windows 系统→ Ubuntu 等 Linux 发行版。这是因为如果倒过来装,那么低等级的 Windows 系统的引导程序会把高级的 Windows 系统及 Linux 发行版的引导程序破坏。事实也的确是这样的,但是难道真的没有变通的方法吗?如果我硬盘里已经有 Windows 7 了,我要再装个 XP ,一定就要重装 Windows 7 吗?本文将会为你提供一种解决此问题的方法。
一、关于多系统启动
(由于 Mac OS X 系列系统难以在普通 PC 上安装,所以本文只讨论 Windows 和 Linux 。前者以 Windows 7 和 Windows XP 为例,后者以最流行的发行版 Ubuntu 的 10.04 版本为例)
在 NT 架构出现之后, NT6.0 出现之前,也就是从 Windows NT 到 Windows Server 2003 (内核为 NT 5.3 )这段时间里, Windows 系统的引导程序都是 ntldr ,这是一个存在于硬盘的第一个主分区的一个小文件,就是它引导系统启动的。如果你的电脑的操作系统是 Windows XP 的话,那么看看 C 分区的根目录里,就有这样的一个文件。
在 NT6.0 (第一个使用 NT6.0 内核的操作系统是 Windows Vista )出现之后, ntldr 就退休了,新的引导程序叫 bootmgr ,也就是 Boot Manager ,这也是一个存在于硬盘第一个主分区的小文件,比 ntldr 稍大一些,但是也只有 300KB 多一点,新的 Windows 系统用它来引导启动。如果你的电脑的操作系统是 Windows Vista 或是 Windows 7 的话,那么在 C 分区的根目录里就有这样的一个文件。
无论是 ntldr 还是 bootmgr ,都是可以管理多系统启动的,就是说它可以形成一个多系统选单,在开机的时候显示一下,让你选择进入哪个系统,问题也就这样来了。 ntldr 时代要管理多系统选单是很容易的,因为在与 ntldr 这个文件同目录里,还有一个叫 boot.ini 的文本文件,用记事本打开它可以看到类似这样的文字:
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(6)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(6)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetec
这样编辑起来真是太容易了,只要把这个文件的只读属性去掉,然后就可以随意地添加选项并保存了。
而 bootmgr 出现后,编辑多系统选单就没有这么简明了。在 Windows Vista和Windows 7 里内置了一个叫 bcdedit 的命令行工具,可以用来导出、编辑、保存 bootmgr 的设置,具体用法可以在 cmd 里敲入 bcdedit
来查看,这里不再详细叙述。此外还有一些带 GUI 的编辑器,下文会提到。
至于 Ubuntu 10.04 这个发行版,则是用一个叫 grub2 的工具来引导的,这是一个安装在 MBR 里的微型操作系统,功能强大,但是却不是那么容易使用,这里也不再详细介绍。
清楚了这三个系统的引导机制,问题也就来了:安装顺序。关于安装顺序的几点事实:
- 先装 Windows XP 再装 Windows Vista/7 ,那么后者会自动检测前者的存在,把它加入到 bootmgr 的多系统选单中,双系统或三系统都可以正常启动。
- 先装 Windows XP/Vista/7 ,再装 Ubuntu ,那么后者也会自动检测前者的存在,把它们都加入到 grub2 的多系统选单中,双系统或三系统或四系统都能正常启动。
- 先装 Windows Vista/7 ,再装 Windows XP ,那么后者会用自己的 ntldr 把前面的设置全部覆盖掉,只有 Windows XP 能启动,其它的系统都存在于硬盘里,但是无法启动。这也很好理解,因为 XP 是 2001 年出生的,当时还没有 bootmgr 这种东西。
- 硬盘里已经存在有 Ubuntu 再装 Windows XP/Vista/7 ,结果我不记得了,貌似比较惨烈,因为 grub2 似乎还存在,但是已经无法正常工作,似乎一个也启动不了,或者还有一种结果是只有 Vista/7 能启动,其它的都看不见了。
需要说明的是,以上列出的情况下,都是把不同的系统装在不同的分区里的。
本来我的电脑里是 Windows 7 和 Ubuntu 双系统,用 grub2 引导的这一个系统,使用 bootmgr 引导,前段时间因为一些特殊原因,我需要在电脑里装一个 Windows XP ,于是有了这篇文章。
二、尝试用 grub2 引导
我本来是想用 grub2 引导三个系统的,但是后来发现我实在是搞不定 grub2 ,安装了 XP 之后 grub2 就陷入不正常的状态,可能是相关的设置信息丢失了,结果开机后一个系统也看不见,只有 grub rescue 的命令行界面在一闪一闪。没办法,我用 Ubuntu Live CD 启动,然后尝试用 root 权限修改 /boot/grub/grub2.cfg
文件,改了半天,重启动, grub rescue 还是在那里一闪一闪,实在是没辙,算了,放弃 grub2 吧,改用 bootmgr 了。
于是要请走 grub2 ,我用量产过的 U 盘启动到 PE 下,用磁盘分区表工具把 MB R重写了一遍,这样之后,存在于 MBR 里的 grub2 就算被清除了。
二、在已存在 Windows 7 情况下安装 Windows XP 的步骤
正如上文所说,如果先装了高等级的 Windows 系统,再安装低等级的 Windows 系统,则后者会把前的引导设置破坏。比如我的电脑里已经有了 Windows 7 ,这时候我要装 Windows XP 了,那么装完后就只有 Windows XP 能启动了。如何修复双系统启动菜单呢?按着下面的步骤走:
安装 Windows XP
- 分区安装XP。我的Windows 7是安装在硬盘的第一个主分区的,打算把XP安装在后面的一个逻辑分区里。分好区之后,格式化,就可以安装了。我用的是普通的安装版XP而非GhostXP。
- 安装完XP之后,的确只有XP能启动,没有多系统选单出现。这时候接管引导任务的是ntldr而不是bootmgr了。
修复bootmgr引导
- 进入Windows XP,从Windows 7的安装光盘里提取
X:\boot\bootsect.exe
(其中X代表光盘盘符)个文件,把它放到一个便于操作的目录里,比如D分区根目录。 - 打开cmd,切换到D分区,然后键入以下命令:
bootsect /nt60 c:
输入完毕后重启系统。这时候系统是用bootmgr引导的,不过只有Windows 7能够启动,没有多系统选单。
修复Windows 7和Windows XP双系统选单
- 现在已经在Windows 7里了,如果你之前用的是mbr导入证书式的破解版Windows 7,此时应该会提示你你使用的版本不是正版,重新导入一次就可以消去提示。
- 下载一个叫EasyBCD的软件,这就是上文提到的bcdedit工具的GUI版本,是第三方制造的。它的功能非常强大,可以轻易地修改BCD设置,添加各种各样的启动项,包括各类Windows版本,WinPE,Linux/BSD,甚至包括Virtual Disk(vhd文件)和Mac OS X。
- 打开它,按照下面的图示操作:
- 点击
Save
之后,列表就应该多出一个你刚才添加的选项了,也就是Windows XP。这时点击左侧的第一个按钮View Settings
,看到的内容应该与下面类似:There are a total of 2 entries listed in the bootloader. Default: Windows 7 Timeout: 3 seconds. Boot Drive: C:\ Entry #1 Name: Windows 7 BCD ID: {current} Drive: C:\ Bootloader Path: \Windows\system32\winload.exe Entry #2 Name: Windows XP BCD ID: {a2744f94-d151-11de-9a84-a4dce0d08af0} Device: boot Bootloader Path: \NTLDR
- 这时点击左侧的
Change Settings
按钮,可以看到如下画面: - 在②处可以修改默认的启动系统,在③处可以修改系统选单停留的时间。修改完后按
Save Settings
按钮保存。 - 此时重启动系统已经是双系统选单了。
转载请注明本文出处。谢谢合作。