CentOS+Ubuntu+Windows 多系统Grub引导修复

为了在ubuntu的grub中成功引导windows 7、ubuntu和centos三个系统,我们需要在ubuntu的/boot/grub/grub.cfg文件中手动添加centos的引导条目。以下是详细步骤和注意事项:

步骤和注意事项:

  1. 确认CentOS的/boot分区UUID: 确保你知道CentOS的/boot分区的UUID。你可以通过在Ubuntu中使用

    blkid
    命令来查找UUID。例如:

    sudo blkid

    找到CentOS的/boot分区的UUID,并记下它。

  2. 编辑/boot/grub/grub.cfg文件: 在Ubuntu中,打开/boot/grub/grub.cfg文件。你可以使用文本编辑器来编辑这个文件,例如:

    sudo nano /boot/grub/grub.cfg
  3. 添加CentOS引导条目: 在文件的适当位置(通常是其他操作系统条目的后面),添加以下内容。请确保将UUID和分区号替换为你实际的CentOS/boot分区的UUID和分区号。

    menuentry 'CentOS6.5, with Linux 2.6.32-431.el6.x86_64' {
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='hd0,7'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7 e30284d7-5cf6-4864-a875-75012d8d9b14
        else
          search --no-floppy --fs-uuid --set=e30284d7-5cf6-4864-a875-75012d8d9b14
        fi
        echo 'Loading Linux 2.6.32-431.el6.x86_64 ...'
        linux /boot/vmlinuz-2.6.32-431.el6.x86_64 root=UUID=e30284d7-5cf6-4864-a875-75012d8d9b14 ro quiet splash
        echo 'Loading initial ramdisk ...'
        initrd /boot/initramfs-2.6.32-431.el6.x86_64.img
    }

    注意:请将

    e30284d7-5cf6-4864-a875-75012d8d9b14
    替换为你的CentOS/boot分区的实际UUID,将
    hd0,7
    替换为你的CentOS/boot分区的实际分区号。

  4. 保存并退出编辑器: 保存文件并退出编辑器。

  5. 重新启动系统: 重新启动Ubuntu系统,检查GRUB菜单中是否出现了CentOS的引导选项。

其他注意事项:

  • UUID和分区号:确保你使用的是正确的UUID和分区号。错误的UUID或分区号会导致无法引导CentOS。
  • 手动编辑grub.cfg:手动编辑grub.cfg文件是一种临时解决方案。每次更新GRUB时,这些手动添加的条目可能会被覆盖。因此,建议将这些条目添加到
    /etc/grub.d/40_custom
    文件中,然后运行
    sudo update-grub
    来使其永久生效。
  • 备份grub.cfg:在编辑grub.cfg文件之前,建议先备份该文件,以防编辑错误导致系统无法启动。

通过以上步骤,你应该能够在Ubuntu的GRUB菜单中成功引导Windows 7、Ubuntu和CentOS三个系统。

如果在Ubuntu中安装时无法看到Windows分区,可以使用LiveCD进入系统,并使用以下命令修复:

sudo dd if=/dev/zero of=/dev/sda bs=1 count=8 seek=512

这样可以修复分区表,使Ubuntu安装程序能够识别Windows分区。