菜鸟科技网

如何修改 grub 启动项?

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

如何修改 grub 启动项?-图1
(图片来源网络,侵删)

grub 命令启动项的基础概念

GRUB 是在计算机启动时运行于 BIOS/UEFI 和操作系统之间的第一个软件,负责加载操作系统的内核,其命令行界面(通常称为“GRUB Rescue”或“GRUB Command Line”)在启动菜单未显示或配置文件损坏时尤为重要,用户可通过输入命令直接指定启动设备、内核参数或修复引导问题,grub 命令启动项的核心功能包括:列出可用设备、加载内核文件、初始化内存盘(initrd)、设置启动参数以及选择启动项等。

grub 命令启动项的常用命令及操作场景

基础设备与文件查看命令

  • ls:列出所有可用的设备(硬盘、分区)及文件系统。
    示例:ls (hd0,gpt1)/ 查看第一块硬盘的 GPT 分区 1 的根目录,ls /boot/grub/ 列出 GRUB 配置文件所在目录。
  • insmod:加载指定的模块,支持文件系统模块(如 ext2fat)或硬件驱动模块(如 ahci)。
    示例:insmod ext2 加载 ext2 文件系统模块,若无法识别分区,可能需先加载对应模块。
  • set:查看或设置环境变量,如 root(指定根设备)、prefix(GRUB 文件位置)、kernel(内核路径)等。
    示例:set root=(hd0,gpt1) 设置根设备为第一块硬盘的 GPT 分区 1。

内核与 initrd 加载命令

  • linux:加载 Linux 内核文件,并指定启动参数(如 root=roquiet 等)。
    示例:linux /vmlinuz-5.4.0-42-generic root=/dev/sda1 ro 加载内核文件并设置根分区为 /dev/sda1,以只读模式启动。
  • initrd:加载初始化内存盘,用于驱动硬件或挂载根分区。
    示例:initrd /initrd.img-5.4.0-42-generic 加载与内核匹配的 initrd 文件。
  • boot:执行启动命令,加载内核并启动系统。
    示例:完成 linuxinitrd 命令后,输入 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,用户可通过编辑该文件添加或修改启动项,以下是配置文件中的关键部分示例:

如何修改 grub 启动项?-图2
(图片来源网络,侵删)
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 指定设备,linuxinitrd 定义内核及 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 启动项?-图3
(图片来源网络,侵删)
  • 在 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

注意事项

  1. 设备路径格式:GRUB 中设备路径遵循 (hdX,Y) 格式,X 为硬盘编号(从 0 开始),Y 为分区编号(MBR 分区从 1 开始,GPT 分区从 1 开始),UEFI 系统中可能涉及 (hdX,gptY)(hdX,msdosY)
  2. 文件系统兼容性:若无法识别分区,需先用 insmod 加载对应文件系统模块(如 ext4ntfs)。
  3. 备份配置文件:修改 grub.cfg/etc/default/grub 前建议备份,避免配置错误导致无法启动。
  4. UEFI 与 BIOS 区别:UEFI 系统中 GRUB 文件位于 /boot/efi/EFI/ubuntu/ 或类似路径,需使用 grub-install --target=x86_64-efi --efi-directory=/boot/efi 安装。

相关问答 FAQs

Q1:GRUB 命令行中如何查看当前已设置的变量?
A1:使用 set 命令可查看所有当前环境变量,包括 rootprefixkernel 等关键参数,若需查看特定变量,可结合 grep 过滤,set | grep root 只显示与根设备相关的变量。

Q2:修改 GRUB 配置后,为什么重启启动菜单仍未更新?
A2:修改 /etc/default/grub 或手动编辑 grub.cfg 后,必须运行 sudo update-grub 命令重新生成 GRUB 配置文件,若未执行该命令,系统仍会使用旧的配置文件,若 /boot 分区为独立分区且挂载点不正确,也可能导致配置更新失败,需检查 /boot 分区的挂载状态。

分享:
扫描分享到社交APP
上一篇
下一篇