grub 命令启动项是 Linux 系统中引导加载程序 GRUB(Grand Unified Bootloader)的核心功能之一,它允许用户在系统启动时通过命令行界面手动配置启动参数、选择启动项或进行故障排查,GRUB 作为多系统引导工具,不仅支持 Linux,还兼容 Windows、FreeBSD 等操作系统,其强大的命令行功能为高级用户提供了灵活的系统控制能力,以下将从 grub 命令启动项的基础概念、常用命令、配置方法、故障应用及注意事项等方面展开详细说明。

grub 命令启动项的基础概念
GRUB 是在计算机启动时运行于 BIOS/UEFI 和操作系统之间的第一个软件,负责加载操作系统的内核,其命令行界面(通常称为“GRUB Rescue”或“GRUB Command Line”)在启动菜单未显示或配置文件损坏时尤为重要,用户可通过输入命令直接指定启动设备、内核参数或修复引导问题,grub 命令启动项的核心功能包括:列出可用设备、加载内核文件、初始化内存盘(initrd)、设置启动参数以及选择启动项等。
grub 命令启动项的常用命令及操作场景
基础设备与文件查看命令
ls:列出所有可用的设备(硬盘、分区)及文件系统。
示例:ls (hd0,gpt1)/查看第一块硬盘的 GPT 分区 1 的根目录,ls /boot/grub/列出 GRUB 配置文件所在目录。insmod:加载指定的模块,支持文件系统模块(如ext2、fat)或硬件驱动模块(如ahci)。
示例:insmod ext2加载 ext2 文件系统模块,若无法识别分区,可能需先加载对应模块。set:查看或设置环境变量,如root(指定根设备)、prefix(GRUB 文件位置)、kernel(内核路径)等。
示例:set root=(hd0,gpt1)设置根设备为第一块硬盘的 GPT 分区 1。
内核与 initrd 加载命令
linux:加载 Linux 内核文件,并指定启动参数(如root=、ro、quiet等)。
示例:linux /vmlinuz-5.4.0-42-generic root=/dev/sda1 ro加载内核文件并设置根分区为/dev/sda1,以只读模式启动。initrd:加载初始化内存盘,用于驱动硬件或挂载根分区。
示例:initrd /initrd.img-5.4.0-42-generic加载与内核匹配的 initrd 文件。boot:执行启动命令,加载内核并启动系统。
示例:完成linux和initrd命令后,输入boot启动系统。
启动项选择与配置命令
menuentry:在配置文件中定义启动项,但命令行界面中可通过configfile加载配置文件间接使用。
示例:configfile /boot/grub/grub.cfg加载 GRUB 主配置文件,显示启动菜单。chainloader:加载其他引导加载程序(如 Windows 的引导管理器)。
示例:chainloader +1加载当前分区的第一个扇区(适用于 MBR 分区),或chainloader /EFI/Microsoft/Boot/bootmgfw.efi加载 UEFI 分区下的 Windows 引导文件。
故障修复相关命令
search:自动查找设备或文件,支持按文件名、UUID 等条件搜索。
示例:search --file --set=root /boot/grub/grub.cfg搜索grub.cfg文件并设置其为根设备。error:手动触发错误信息,用于调试启动问题。reset:重置 GRUB 环境,清除临时设置的变量。
grub 命令启动项的配置方法
临时配置(命令行直接操作)
在 GRUB 命令行界面中,可通过上述命令手动指定启动路径,适用于紧急修复场景,若 GRUB 配置文件丢失,可依次执行:
insmod ext2 # 加载文件系统模块 set root=(hd0,gpt1) # 指定根分区 linux /vmlinuz-xxx root=/dev/sda1 ro # 加载内核 initrd /initrd.img-xxx # 加载 initrd boot # 启动系统
启动成功后,需重新生成 GRUB 配置文件(如 update-grub)以避免下次重启重复操作。
永久配置(修改 grub.cfg 文件)
GRUB 的主配置文件通常位于 /boot/grub/grub.cfg,用户可通过编辑该文件添加或修改启动项,以下是配置文件中的关键部分示例:

menuentry "Ubuntu Linux" {
set root=(hd0,gpt1)
linux /boot/vmlinuz-5.4.0-42-generic root=/dev/sda1 ro quiet
initrd /boot/initrd.img-5.4.0-42-generic
}
menuentry "Windows 10" {
insmod fat
set root=(hd0,gpt2)
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
menuentry 定义启动项名称,set root 指定设备,linux 和 initrd 定义内核及 initrd 路径,chainloader 用于加载其他系统。
通过 /etc/default/grub 调整默认参数
/etc/default/grub 是 GRUB 的全局配置文件,用于设置默认启动项、超时时间、内核参数等,修改后需运行 update-grub 生效,常用参数包括:
GRUB_DEFAULT=0:默认启动第一个菜单项(或指定名称如 "Ubuntu Linux")。GRUB_TIMEOUT=10:启动菜单显示超时时间(秒)。GRUB_CMDLINE_LINUX_DEFAULT="quiet splash":默认内核参数。GRUB_DISABLE_OS_PROBER=false:允许自动探测其他操作系统(需os-prober支持)。
grub 命令启动项的故障应用场景
GRUB 引导菜单不显示
若启动后直接进入 GRUB 命令行,可能是配置文件损坏或 MBR/EFI 分区引导信息丢失,可通过以下步骤修复:
- 使用
ls查找包含/boot/grub/grub.cfg的分区,确认设备路径。 - 手动加载内核和 initrd 并启动系统。
- 进入系统后,执行
sudo update-grub重新生成配置文件,或使用grub-install重新安装 GRUB 到 MBR/EFI 分区。
Windows 与 Linux 双系统引导失败
若 Windows 更新后导致 GRUB 无法识别 Windows 分区,可:

- 在 GRUB 命令行中使用
insmod fat加载文件系统模块(若为 FAT32 分区)。 - 通过
chainloader加载 Windows 的 EFI 引导文件(路径通常为/EFI/Microsoft/Boot/bootmgfw.efi)。 - 或在 Linux 中运行
sudo os-prober自动探测 Windows 分区,并更新grub.cfg。
内核参数错误导致无法启动
若因内核参数错误(如 root= 分区路径错误)导致启动失败,可在 GRUB 命令行中重新指定正确参数:
set root=(hd0,gpt2) # 修正根分区 linux /vmlinuz-xxx root=/dev/sdb2 ro # 修正 root 参数 initrd /initrd.img-xxx boot
注意事项
- 设备路径格式:GRUB 中设备路径遵循
(hdX,Y)格式,X为硬盘编号(从 0 开始),Y为分区编号(MBR 分区从 1 开始,GPT 分区从 1 开始),UEFI 系统中可能涉及(hdX,gptY)或(hdX,msdosY)。 - 文件系统兼容性:若无法识别分区,需先用
insmod加载对应文件系统模块(如ext4、ntfs)。 - 备份配置文件:修改
grub.cfg或/etc/default/grub前建议备份,避免配置错误导致无法启动。 - UEFI 与 BIOS 区别:UEFI 系统中 GRUB 文件位于
/boot/efi/EFI/ubuntu/或类似路径,需使用grub-install --target=x86_64-efi --efi-directory=/boot/efi安装。
相关问答 FAQs
Q1:GRUB 命令行中如何查看当前已设置的变量?
A1:使用 set 命令可查看所有当前环境变量,包括 root、prefix、kernel 等关键参数,若需查看特定变量,可结合 grep 过滤,set | grep root 只显示与根设备相关的变量。
Q2:修改 GRUB 配置后,为什么重启启动菜单仍未更新?
A2:修改 /etc/default/grub 或手动编辑 grub.cfg 后,必须运行 sudo update-grub 命令重新生成 GRUB 配置文件,若未执行该命令,系统仍会使用旧的配置文件,若 /boot 分区为独立分区且挂载点不正确,也可能导致配置更新失败,需检查 /boot 分区的挂载状态。
