此前在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