1. 什么是Grub
Grub,全称为GRand Unified Bootloader,是一种通用的引导程序,可以让你安装多个操作系统并在它们之间切换。它可以在多种不同的硬件环境下工作,包括x86、PowerPC和Alpha处理器等。在许多Linux发行版中,Grub是默认的启动管理器。Grub的主要作用是引导操作系统的启动。当启动计算机时,BIOS将把控制权传送给Grub,在Grub中可以选择启动哪个操作系统。
2. Grub配置文件
Grub的功能是根据配置文件中的设置进行引导,因此了解Grub的配置文件非常重要。Grub的配置文件位于/boot/grub/grub.cfg,但是不要直接编辑该文件。通常,Grub使用/etc/default/grub文件中的设置生成/boot/grub/grub.cfg文件。
先来了解一下grub.cfg配置文件的结构:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-/dev/sda1' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 bfe5d7fa-d8f7-4654-84f7-28e91fca8f5e
else
search --no-floppy --fs-uuid --set=root bfe5d7fa-d8f7-4654-84f7-28e91fca8f5e
fi
linux /boot/vmlinuz-5.4.0-65-generic root=UUID=bfe5d7fa-d8f7-4654-84f7-28e91fca8f5e ro quiet splash $vt_handoff
initrd /boot/initrd.img-5.4.0-65-generic
}
### END /etc/grub.d/10_linux ###
2.1 格式
每个菜单条目由一个menuentry指令开始,后面跟随的是标题。menuentry指令必须以右括号结尾。标题在单引号内。之后是菜单条目内部的指令和命令列表。指令和命令必须以左括号开始,右括号结束。
2.2 配置参数
配置参数可以直接在menuentry条目中定义。例如,下面指定了要使用的内核文件和硬盘及分区,以及Linux内核在启动时需要的根设备:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-/dev/sda1' {
linux /boot/vmlinuz-5.4.0-65-generic root=UUID=bfe5d7fa-d8f7-4654-84f7-28e91fca8f5e ro quiet splash $vt_handoff
initrd /boot/initrd.img-5.4.0-65-generic
}
控制开机启动时间和数字时间设置可以在/etc/default/grub文件中进行。您可以编辑GRUB_TIMEOUT设置,以更改启动菜单的等待时间:
GRUB_TIMEOUT=5
3. 添加菜单条目
要将新菜单添加到Grub,您需要创建一个扩展名为.cfg的文件,并将其放在/etc/grub.d/目录中,文件名通常以数字开头,以便确定生成菜单条目的顺序。例如,如果要创建名为myOS.cfg的文件,您可以将其放在/etc/grub.d/00_myOS.cfg中。
在文件中,添加以下示例内容,以便在Grub中添加菜单项:
#!/bin/bash
cat << EOF
menuentry 'My Operating System' {
set root=(hd0,msdos1)
linux /boot/vmlinuz-3.16.0-31-generic root=/dev/sda1
initrd /boot/initrd.img-3.16.0-31-generic
}
EOF
现在,重新生成配置文件:
sudo update-grub
现在,您可以通过重新启动计算机来检查Grub菜单中是否有新条目。
4. 进入Grub命令行
如果您需要更改引导项设置或解决启动时出现的问题,您可以进入Grub的命令行。进入命令行的最简单方法是按下Shift键同时启动计算机。您应该能够看到Grub菜单,选择菜单中的高级选项并按下E进入编辑模式。现在,确定包含内核位置的行,按下E再次进入编辑模式,而不是按下Enter键启动计算机。您会在编辑模式下看到一个完整的命令行,此时可以进行更改。按下Ctrl + X退出编辑模式并进入命令行模式。
您现在可以使用受支持的命令进行更改。这种方法仅适用于正在启动的当前计算机。
例如,您可以使用set命令查看和更改Grub变量。以下示例演示如何从命令行中设置临时变量:
set foo=bar
如果您不小心擦除了一个重要的文件,或者出现了硬盘错误,您可以使用Grub命令行中的救援模式恢复系统。在引导菜单中选择内核,进入命令行模式并输入以下命令:
init=/bin/bash
这将为您提供一个必须输入root密码才能访问的单用户模式。现在,您可以尝试修复系统问题或复制重要文件。
总结
在Linux中使用Grub引导程序需要一些基本的知识和技巧。本文介绍了Grub的概述、配置文件结构、如何添加新菜单条目和如何进入Grub命令行。请记住,在更改Grub配置文件之前创建备份,这样您可以在出现问题时进行还原操作。