先安装的ubuntu11.04,后安装xp。由于安装xp时重写了mbr,开机直接进入xp, ubuntu不能引导。解决过程走了不少弯路,主要是因为网上的很多方法是针对grub早期版本的。而ubuntu 11.04使用的是grub2,它的配置文件和处理过程和老grub有很大的不同。下面记录基于grub2的mbr重建过程。
1.使用live usb引导进入live ubuntu。
2.打开终端
sudo mount /dev/sda1 /mnt *挂载根文件系统,如果你的/boot目录位于单独的分区,则需要 sudo mount /dev/sdax /mnt/boot,x表示/boot所在的分区号。
3.sudo mount --bind /dev /mnt/dev
4.sudo mount --bind /sys /mnt/sys
*3和4必须要,否则后面update-grub时会出错。
5.sudo chroot /mnt *切换根文件系统,即切换到硬盘上ubuntu的/环境。
6.cd /etc/grub.d
vi 09_winxp_entry
在其中加入如下内容:
#!/bin/sh
cat << EOF
menuentry "WinXP" {
set root=(hd0,3)
chainloader (hd0,3)+1
}
EOF
其中set root=(hd0,3)表示xp安装在第一块硬盘设备的第3个分区。
7.chmod +x 09_winxp_entry *加上可执行标志。
8.update-grub *更新/boot/grub/grub.cfg
9.grub-install /dev/sda *将grub程序安装到/dev/sda的mbr。
10. exit *退出root用户
11. exit *退出chroot模式,即回到usb引导的ubuntu环境。
12. sudo umount /mnt/dev
sudo umount /mnt/sys
*如果/boot安装在单独分区,则需加上 sudo umount /mnt/boot
sudo umount /mnt
13. sudo reboot
14. 系统重新启动后进入bios设置,将启动顺序改成硬盘优先。保存重启。一切正常的话就能看到grub的引导菜单了。
os的引导取决于mbr中放置的bootloader。安装winxp时写入到mbr的引导程序会根据分区表来找到第一个活动的主分区,并将该分区的系统引导代码载入内存, 然后执行。
安装ubuntu时写入到mbr的是grub程序,ubuntu 11.04用的是grub2。如果先安装ubuntu后安装xp,则grub被覆盖,不能引导ubuntu。如果先安装xp再安装ubuntu,grub能自动探测到xp的存在,并自动加入到引导菜单。
grub的原理和详细使用说明参考
http://www.dedoimedo.com/computers/grub.html (旧版grub)
http://www.dedoimedo.com/computers/grub-2.html (grub2)