安装 Ubuntu 后 Grub 开机选项中的 Fedora 不见了


原本因为工作的关系, 装了 Fedora 17 测试, 想说干脆试用看看, 不过使用了一段时间后, 还是不习惯, 所以又安装了 Ubuntu 12.04 版, 没想到安装完后怎么原本 Grub2 开机选项中的 Fedora 不见了?即使在 Ubuntu 中利用 update-grub 重新产生了 /boot/grub/grub.cfg, 仍然就是没有看到 Fedora 出现。

为了一探究竟, 把安装 Fedora 的分区挂载起来看了一下, 奇怪, 怎么 /boot/grub 下没有 grub.cfg 档?又注意到了 /boot 下有另一个 grub2 目录, 里头有 grub.cfg 文件, 难不成就是这个原因?没办法, 死马当活马医, 既然这里有 grub.cfg 档, 我就在 Ubuntu 下帮 Grub2 新增一个项目, 从这个 grub.cfg 文件复制 Fedora 开机内容试看看了。

以下是 Fedora 下 /boot/grub2/grub.cfg 中有关第一个选项 (预设就是启动 Fedora) 的内容:

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Fedora Linux' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-33f4c026-0cb9-4b61-bf8d-17b4b8779488' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos8'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos8 --hint-efi=hd0,msdos8 --hint-baremetal=ahci0,msdos8 --hint='hd0,msdos8'  33f4c026-0cb9-4b61-bf8d-17b4b8779488
    else
      search --no-floppy --fs-uuid --set=root 33f4c026-0cb9-4b61-bf8d-17b4b8779488
    fi
    echo    'Loading Linux 3.3.4-5.fc17.x86_64 ...'
    linux    /boot/vmlinuz-3.3.4-5.fc17.x86_64 root=UUID=33f4c026-0cb9-4b61-bf8d-17b4b8779488 ro rd.md=0 rd.lvm=0 rd.dm=0 SYSFONT=True  KEYTABLE=us rd.luks=0 LANG=en_US.UTF-8 rhgb quiet
    echo    'Loading initial ramdisk ...'
    initrd    /boot/initramfs-3.3.4-5.fc17.x86_64.img
}
只要把这一段复制下来, 贴到 /etc/grub.d/ 下预设提供给我们当范本的 40_custom 档案中即可 (用贴的最方便, 不然还得研究 Grub2 的指令, 也容易出错):

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'Fedora Linux' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-33f4c026-0cb9-4b61-bf8d-17b4b8779488' {
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos8'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos8 --hint-efi=hd0,msdos8 --hint-baremetal=ahci0,msdos8 --hint='hd0,msdos8'  33f4c026-0cb9-4b61-bf8d-17b4b8779488
    else
      search --no-floppy --fs-uuid --set=root 33f4c026-0cb9-4b61-bf8d-17b4b8779488
    fi
    echo    'Loading Linux 3.3.4-5.fc17.x86_64 ...'
    linux    /boot/vmlinuz-3.3.4-5.fc17.x86_64 root=UUID=33f4c026-0cb9-4b61-bf8d-17b4b8779488 ro rd.md=0 rd.lvm=0 rd.dm=0 SYSFONT=True  KEYTABLE=us rd.luks=0 LANG=en_US.UTF-8 rhgb quiet
    echo    'Loading initial ramdisk ...'
    initrd    /boot/initramfs-3.3.4-5.fc17.x86_64.img
}
要特别注意前两行不能改, 只要把刚刚复制的内容贴到 # 开头的註解行之后即可, 接着再使用 update-grub 指令, 就可以看到这次居然自动找到 Fedora 了:

www.bkjia.com @ www.bkjia.com:~$ sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.2.0-26-generic
Found initrd image: /boot/initrd.img-3.2.0-26-generic
Found linux image: /boot/vmlinuz-3.2.0-23-generic
Found initrd image: /boot/initrd.img-3.2.0-23-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 8 (loader) on /dev/sda1
Found Fedora release 17 (Beefy Miracle) on /dev/sda8
done
接着只要重新开机, 就可以看到开机选单上反而出现了两个 Fedora 17 的选项, 一个是刚刚我自己加上去, 由 40_custom 自订的选项, 另一个就是刚刚经由 update-grub 指令, 透过 OS-Prober 自动找到的。虽然两个选项都可以启动 Fedora, 不过过程的显示内容不大一样, OS-Prober 自动找到的选项启动过程多是文字, 最后才进入绘图模式, 从原本 Fedora 的设定档复制过来的选项开机过程很早就进入绘图模式, 比较美观。

后来发现, 其实只要把安装 Fedora 17 的分区挂载起来, OS-Prober 的动作就可以自动找到 Fedora 了。另外, 我不知道为甚么 Fedora 要改将 grub.cfg 放到 /boot/grub2 下, 但根据 Fedora 的文件, 的确是特意如此。

GNU Grub2 的官方文件在这里, 提供参考 (不过比较难阅读)。

相关内容