介绍
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,但是您完全可以选择跳过配置引导程序。
使用 Grubby 管理内核引导参数
Grubby 可用于更新引导相关的配置文件,我们推荐你使用它更新内核引导参数和设定默认内核。
下面我们简单介绍 grubby
的用法:
- 为单个引导项添加一个内核参数:
# grubby --args=<NEW_PARAMETER> --update-kernel=/boot/vmlinuz-5.11.14-300.fc34.x86_64
- 为单个引导项添加多个内核参数:
# grubby --args="<NEW_PARAMETER1> <NEW_PARAMETER2 <NEW_PARAMETER_n>" --update-kernel=/boot/vmlinuz-5.11.14-300.fc34.x86_64
- 为所有引导项添加内核参数:
# grubby --args=<NEW_PARAMETER> --update-kernel=ALL
- 从当前和以后的所有引导项中删除内核参数:
# grubby --remove-args=<PARAMETER_TO_REMOVE> --update-kernel=ALL
- 设置默认内核:
# grubby --set-default=/boot/vmlinuz-5.11.12-300.fc34.x86_64
任务/常见问题
添加其他操作系统到 GRUB 2 菜单
如果您还安装有其他操作系统而且希望通过 GRUB 2 引导它们,那么请按照以下操作来做:
# dnf install os-prober # grub2-mkconfig -o /boot/grub2/grub.cfg
设置默认项
由于 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
找到它。
(难道就没有更好地办法吗?)
如果您了解相关的风险,但却仍然想直接修改 /boot/grub2/grub.cfg
,下面是您可以做的:
编辑 /boot/grub2/grub.cfg
,改变行
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