此前在Ubuntu下用virtualbox装了份Windows 7,确实比以往的Windows好用许多。于是花了点时间把机子上原来与Ubuntu并存的Windows XP升级成Windows 7。
所需工具、文件
Windows 7安装镜像;
我下载的是7600.16385.090713-1255_x64fre_client_zh-cn_Retail_Ultimate-GRMCULXFRER_CN_DVD.iso,3.1G。
Grub4Dos
用于引导Windows安装,后来听说Grub2也行,还要更方便一些,但我没可能再装一遍,以下还是以grub4dos为例;
EasyBCD
用于在Windows安装完成后找回启动Ubuntu的菜单.
备份MBR
$ sudo dd if=/dev/sda of=/backup/mbr.img bs=512 count=1
至关重要。Ubuntu的安装过程会保留Windows启动项,但Windows的安装过程却很霸道,安装后需导入MBR才能找回Ubuntu启动项。
Windows下无法访问Ubuntu里的文件,所以需要把这个备份文件复制到Windows文件系统下,或则先用U盘备份。
挂载Windows 7 ISO
$ sudo mount /iso/7600.16385.090713-1255_x64fre_client_zh-cn_Retail_Ultimate-GRMCULXFRER_CN_DVD.iso /mnt -o loop
即把Windows 7 ISO挂载到/mnt,打开这个目录,把里边的所有文件复制到一个NTFS分区的根目录下——不能是将用于安装Windows 7的分区,亦即,需要预先准备两个Windows分区。
我这里因为原本就是Windows与Ubuntu并存,Windows下有C、D、E盘,C盘准备用来安装Windows 7,以上安装文件就复制到了E盘根目录下。
添加启动菜单
打开载下来的Grub4dos.zip,把其中的grub.exe解压出来。
修改/boot/grub/menu.lst,添加如下几行
title grub4dos
root (hd0,3)
kernel /home/grub.exe
boot
第二行的0,3需根据实际情况修改,可查看menu.lst里原有的部分,找到Ubuntu的选项复制成一样的即可。
如我原有启动项第一项是:
title Ubuntu 9.10, kernel 2.6.31-16-generic
root (hd0,3)
第三行的/home/grub.exe需修改成刚解压出的grub.exe所在路径。
重启安装
重启,在操作系统选单里选择grub4dos,屏幕一闪再度进入操作系统选单,按c进入命令行grub>,依次输入以下指令:
grub>find --set-root /bootmgr
grub>chainloader /bootmgr
grub>boot
随即进入Windows 7安装引导界面,一路装下去即可。
恢复MBR
Windows安装完成后,多系统选单不见了,此时需要恢复MBR。我安装前在网上找到的几篇文章里有指明,可以在Windows下以如下指令恢复:
echo c:\"linux.lnx"=linux >> boot.ini
遗憾的是Windows 7里好像根本就没有boot.ini,试了一下,此法无效。
无奈只好用下了一份easyBCD,安装之后运行,添加LINUX启动项。C盘下会生成c:\nst\nst_linux.mbr文件,删除之,把此前备份的mbr.img复制到这个位置,重命名为nst_linux.mbr。
重启在多系统选单选择linux选项,即可看见原来的Ubuntu多系统选单。进入Ubuntu之后,再彻底还原MBR。
$ sudo dd if=/backup/mbr.img of=/dev/sda bs=446 count=1