From Fedora Project Wiki
Line 16: Line 16:


<pre>
<pre>
# yum install os-prober
# dnf install os-prober


# grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfg

Revision as of 01:26, 7 April 2021

介绍

GRUB 2 是 GNU GRUB (GRand Unified Bootloader) 的最新版本。bootloader(引导程序) 是计算机开机时第一个运行的软件程序。它负责加载操作系统内核并把控制权交给操作系统内核(Fedora 下就是 Linux 了)。反过来,内核初始化操作系统的其余部分。

GRUB 2 已经取代了之前的 GRUB (即,0.9x 版本),使 GRUB 成为了 GRUB Legacy 。

从 Fedora 16 开始,GRUB 2 就是 x86 BIOS 系统下默认的引导程序了。对于 BIOS 系统的升级也是默认安装 GRUB 2,但是您完全可以选择跳过配置引导程序。

任务/常见问题

添加其他操作系统到 GRUB 2 菜单

如果您还安装有其他操作系统而且希望通过 GRUB 2 引导它们,那么请按照以下操作来做:

# dnf install os-prober

# grub2-mkconfig -o /boot/grub2/grub.cfg
笔记
从 F16 Beta 开始,系统探测器应该在安装过程中便自动为其他已安装好的系统生成菜单项并添加到配置中,因此您通常无需再次执行本操作。

设置默认项

由于 grub2-mkconfig (和系统探测器),我们不能预知 /boot/grub2/grub.cfg 中的各项的顺序,因此我们通过名称/标题来设置默认项。要设置默认项,首先,我们在 /etc/default/grub 中设置

grub_default=saved

并运行

grub2-mkconfig -o /boot/grub2/grub.cfg

来更新 grub.cfg 。然后调用

grub2-set-default <标题或名称>

和最近安装的 Fedora 项标题。从此之后,您便可以通过调用

grub2-set-default <标题或名称>

改变默认项或通过运行

grub2-editenv list

查看它。 要设置默认项,您还需要可能的菜单项列表,您可以通过

grep menuentry /boot/grub2/grub.cfg

找到它。

(难道就没有更好地办法吗?)

注意
有其他更简单的方法来设置默认项,但是如果再次运行 grub2-mkconfig 或是在它重复运行时容易出错。这些方法包括在 /boot/grub2/grub.cfg 中直接设置默认项和设置 GRUB_DEFAULT 为 /etc/default/grub 中的一个序号或某一项的标题。这些方法都不建议使用。

如果您了解相关的风险,但却仍然想直接修改 /boot/grub2/grub.cfg ,下面是您可以做的: 编辑 /boot/grub2/grub.cfg ,改变行

这是方法不建议使用
因为这在运行 grub2-mkconfig 后就会失效,甚至更新内核后就失效了。
set default="0" 

set default="5"

更新 GRUB 2 设置

在 Feodra 下直接编辑 /boot/grub2/grub.cfg 是安全的。Fedora 里的 grubby 在更新内核后就会以一种安全的行为修改配置信息。在 Fedora 中不包含也不需要包含其他的发行版(尤其是 Debian 及其衍生版)提供的添加一个 update-grub 命令的软件补丁。

邂逅可怕的 GRUB 2 启动提示符

如果设置不当,GRUB 2 可能会加载失败,随后进入启动提示符中。要解决此问题,按如下步骤执行:

1. 列出 GRUB 2 识别的驱动器:

grub2> ls

2. 对于一个含有三个分区的 dos 分区表 /dev/sda ,输出看起来类似于:

(hd0) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)

3. 对于一个含有四个分区的 gpt 分区表 /dev/sda ,输出看起来类似于:

(hd0) (hd0,gpt4) (hd0,gpt3)  (hd0,gpt2) (hd0,gpt1)

4. 通过这些信息您就可以在驱动器的每个分区探测并定位您的 vmlinuz 和 initramfs 文件了:

ls (hd0,1)/ 

将列出 /dev/sda1 下的文件。如果这个分区包含 /boot ,输出就会显示 vmlinuz 和 initramfs 的全名。

5. 有了地址和 vmlinuz 和 initramfs 的全名您就可以启动您的系统了。

5a. 声明您的根分区:

grub> set root=(hd0,3)

5b. 声明您要想使用的内核:

grub> linux (hd0,1)/vmlinuz-3.0.0-1.fc16.i686 root=/dev/sda3 rhgb quiet selinux=0 
# 注意:需要的话添加其他内核参数
# 注意:对照自己的系统改变内容

5c. 声明要使用的 initrd :

  
grub> initrd (hd0,1)/initramfs-3.0.0-1.fc16.i686.img
# 注意:对照自己的系统改变内容

5d. 通知 GRUB 2 启动所选文件:

grub> boot

6. 启动后,打开一个终端。

7. 使用 grub2-mkconfig 命令来重新创建 grub 2 启动系统需要的 grub.cfg 文件:

grub2-mkconfig -o /boot/grub2/grub.cfg

8. 使用 grub2-install 命令并根据不得配置来安装 grub 2 到您的硬盘驱动器中:

grub2-install --boot-directory=/boot /dev/sda
# 注意:您的驱动器可能会有其他的设备名称。使用 mount 命令输出检查。

其他 GRUB 2 问题

缺少软盘:一些用户报告称安装 GRUB 2 到分区启动扇区时可能会失败,如果计算机软盘控制器在 BIOS 中处于激活状态但却没有实际的软盘。一个可能的替代办法是从救援模式(系统安装后)运行:

grub2-install <target device> --no-floppy

深入阅读

http://www.gnu.org/software/grub/manual/grub.html

http://fedoraproject.org/wiki/Features/Grub2

http://fedoraproject.org/wiki/Anaconda/Features/Grub2Migration