一、命令简介
grub2‑set‑default 是一个用于设置 GRUB2 引导加载程序默认启动项的 Linux 命令。它允许系统管理员指定系统启动时自动选择的内核或操作系统入口。该命令特别适用于多内核安装或双系统环境,可以确保系统在重启后自动进入预设的启动项。
重要前提:使用此命令前,必须在 /etc/default/grub 配置文件中设置 GRUB_DEFAULT=saved,否则设置将不会生效。
二、语法格式
bash
运行
grub2-set-default [OPTION] MENU_ENTRYMENU_ENTRY必需参数,指定要设置为默认的启动菜单项。可以是以下三种形式之一:
- 数字:菜单项的索引号(从 0 开始计数)。
- 标题:菜单项显示的完整标题字符串。
- 标识符:菜单项的唯一标识符。
三、常用选项及说明
表格
| 选项 | 长格式 | 说明 |
|---|---|---|
| -h | --help | 显示此帮助信息并退出。 |
| -v | --version | 显示 grub2‑set‑default 的版本信息并退出。 |
| 无 | --boot‑directory=DIR | 指定 GRUB 镜像文件所在的目录。默认情况下,命令会在 /boot/grub2 目录下查找,使用此选项可以指定一个替代目录 DIR/grub2。这在某些自定义分区或引导环境中非常有用。 |
四、示例用法
示例 1:查看当前可用的启动菜单项
在设置默认内核前,通常需要先查看 GRUB2 的配置文件以了解所有可用的选项。
bash
运行
awk -F\' '/menuentry / {print $2}' /etc/grub2.cfg输出示例:
plaintext
CentOS Linux (5.4.219-1.el7.elrepo.x86_64) 7 (Core) CentOS Linux (3.10.0-1160.76.1.el7.x86_64) 7 (Core) CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core) CentOS Linux (0-rescue-3221d376917c458992a952d6327f2d6a) 7 (Core)菜单项的索引从 0 开始。因此,上例中:
- 0 对应第一个内核 5.4.219‑1.el7.elrepo.x86_64
- 1 对应第二个内核 3.10.0‑1160.76.1.el7.x86_64 以此类推。
示例 2:使用索引号设置默认启动项
将第一个内核(索引 0)设置为默认启动项。
bash
运行
sudo grub2-set-default 0示例 3:使用菜单标题设置默认启动项
直接使用完整的菜单标题进行设置(标题必须与配置文件中的完全一致,建议用引号包裹)。
bash
运行
sudo grub2-set-default 'CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core)'示例 4:验证设置并更新 GRUB 配置
设置完成后,必须运行 grub2‑mkconfig 来重新生成 GRUB2 的主配置文件,才能使更改生效。
bash
运行
# 对于使用 BIOS 的系统或大多数情况 sudo grub2-mkconfig -o /boot/grub2/grub.cfg # 对于使用 UEFI 的系统,路径可能不同 sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg之后,可以重启系统以应用新的默认启动项。
bash
运行
sudo reboot # 或 sudo init 6示例 5:使用自定义引导目录
如果你的 GRUB2 文件不在默认的 /boot/grub2 目录下,可以使用 --boot‑directory 选项。
bash
运行
sudo grub2-set-default --boot-directory=/mnt/custom_boot 0五、注意事项
GRUB_DEFAULT=saved 是前提:这是最关键的一步。编辑 /etc/default/grub 文件,确保存在 GRUB_DEFAULT=saved 这一行。修改后,需要运行 grub2‑mkconfig 并重启才能激活 “saved” 功能。
索引从 0 开始:GRUB2 菜单项的计数是从 0 开始的,这与许多编程语言的数组索引规则一致。在计算时务必注意。
子菜单的影响:如果 GRUB 菜单包含子菜单(例如 “Advanced options for Ubuntu”),其内部的条目索引会继续累加,或者需要使用特定的语法(如 1>2 表示主菜单第 2 项的子菜单第 3 项)。使用
grub2‑editenv list查看当前保存的 saved_entry 值可以帮助理解其格式。持久化生效:运行 grub2‑set‑default 命令本身只是将选择记录在 GRUB 的环境块文件中(通常是 /boot/grub2/grubenv 或 /boot/efi/EFI/[vendor]/grubenv)。必须随后运行
grub2‑mkconfig -o [正确的配置文件路径]来确保重启后配置被正确加载。配置文件路径:GRUB2 配置文件的路径可能因发行版和引导模式(BIOS/UEFI)而异。常见的路径有 /boot/grub2/grub.cfg、/boot/grub/grub.cfg 或 EFI 系统分区下的路径。请根据你的系统实际情况确定。
错误排查:如果设置未生效,请检查:
- /etc/default/grub 中 GRUB_DEFAULT 的值。
- 是否执行了 grub2‑mkconfig。
- 使用
sudo grub2‑editenv list命令查看 saved_entry 是否已正确设置为目标值。
Linux 学习资料 https://pan.baidu.com/s/1A6qqBk2ViE_Le2cQjSowkQ?pwd=7uz8