「Linux」用Grub启动系统的技巧

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配置文件之前创建备份,这样您可以在出现问题时进行还原操作。

操作系统标签