GRUB界面详解
·
一、GRUB 基础概念
1.1 什么是 GRUB?
GRUB 是 Linux 系统最常用的启动引导程序,负责:
| 阶段 | 功能 | 存储位置 |
|---|---|---|
| Stage 1 | BIOS/UEFI 加载 GRUB 核心 | MBR(主引导记录)或 EFI 分区 |
| Stage 1.5 | 文件系统驱动,加载 Stage 2 | /boot/grub 附近 |
| Stage 2 | 完整功能:菜单、命令行、加载内核 | /boot/grub/ |
1.2 GRUB 版本对比
| 特性 | GRUB Legacy (GRUB 0.97) | GRUB 2 (推荐) |
|---|---|---|
| 配置文件 | /boot/grub/menu.lst |
/boot/grub/grub.cfg(自动生成) |
| 配置源 | 直接编辑 | /etc/default/grub + /etc/grub.d/ |
| 脚本支持 | 有限 | 完整 Bash-like 语法 |
| UEFI 支持 | ❌ | ✅ |
| 模块化 | 弱 | 强(按需加载驱动) |
现代发行版(Ubuntu 20.04+、RHEL 8+、Debian 11+)全部使用 GRUB 2。
二、GRUB 界面详解
2.1 启动菜单界面
┌─────────────────────────────────────────────────────────┐
│ GNU GRUB version 2.06 │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ * Ubuntu │ │
│ │ Advanced options for Ubuntu │ │
│ │ Windows Boot Manager (on /dev/nvme0n1p1) │ │
│ │ UEFI Firmware Settings │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ Use the ↑ and ↓ keys to select which entry is │
│ highlighted. Press enter to boot the selected OS, │
│ 'e' to edit the commands before booting or 'c' for │
│ a command-line. │
│ │
│ The highlighted entry will be executed automatically │
│ in 10s. │
│ │
└─────────────────────────────────────────────────────────┘
按键功能:
| 按键 | 功能 |
|---|---|
↑ / ↓ |
选择启动项 |
Enter |
启动选中项 |
e |
编辑当前启动项(临时修改,不保存) |
c |
进入命令行模式(GRUB Shell) |
Esc |
返回上一级菜单 |
F10 / Ctrl+X |
编辑后启动(在编辑界面) |
2.2 编辑界面(按 e 进入)
┌─────────────────────────────────────────────────────────┐
│ setparams 'Ubuntu' │
│ │
│ recordfail │
│ load_video │
│ gfxmode $linux_gfx_mode │
│ insmod gzio │
│ if [ x$grub_platform = xxen ]; then insmod xzio; fi │
│ insmod part_gpt │
│ insmod ext2 │
│ search --no-floppy --fs-uuid --set=root 1234-5678 │
│ linux /vmlinuz-5.15.0-76-generic root=UUID=xxx ro │
│ initrd /initrd.img-5.15.0-76-generic │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Ctrl+X or F10: boot Ctrl+C or F2: command │ │
│ │ ESC: discard edits │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
关键行解析:
| 行 | 作用 |
|---|---|
linux /vmlinuz-... |
指定内核镜像路径和启动参数 |
root=UUID=xxx |
根文件系统位置 |
ro |
以只读方式挂载根(后续 initramfs 会 remount rw) |
initrd /initrd.img-... |
指定初始化内存盘 |
quiet splash |
静默启动+显示动画(删除可看到详细启动日志) |
2.3 命令行模式(按 c 进入)
grub> ls # 列出所有设备和分区
grub> ls (hd0,gpt1)/ # 查看 (hd0,gpt1) 分区的根目录
grub> ls (hd0,gpt1)/boot/ # 查看 /boot 目录
grub> set root=(hd0,gpt2) # 设置根分区
grub> linux /vmlinuz-5.15.0-76-generic root=/dev/nvme0n1p2 ro
grub> initrd /initrd.img-5.15.0-76-generic
grub> boot # 启动
常用命令:
| 命令 | 功能 |
|---|---|
ls |
列出设备、分区、文件 |
set root=(hdX,gptY) |
设置根分区 |
linux /path/to/vmlinuz ... |
加载内核 |
initrd /path/to/initrd |
加载初始化内存盘 |
boot |
启动系统 |
cat /etc/fstab |
查看文件内容 |
help |
查看帮助 |
reboot |
重启 |
halt |
关机 |
三、GRUB 配置定制
3.1 配置文件结构
/etc/grub.d/ # 配置脚本目录(按数字顺序执行)
├── 00_header # 头部信息、环境设置
├── 05_debian_theme # 主题/背景图(Ubuntu)
├── 10_linux # Linux 内核启动项(自动生成)
├── 20_linux_xen # Xen 虚拟化支持
├── 30_os-prober # 探测其他操作系统(Windows)
├── 30_uefi-firmware # UEFI 固件设置入口
├── 40_custom # 用户自定义项(推荐在此添加)
└── 41_custom # 自定义项备份
/etc/default/grub # 主配置文件(修改后需 update-grub)
/boot/grub/grub.cfg # 生成的最终配置(不要直接编辑!)
3.2 常用配置修改
修改 /etc/default/grub
sudo nano /etc/default/grub
# 关键配置项:
GRUB_DEFAULT=0 # 默认启动项(0=第一个)
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.0-76-generic" # 指定内核
GRUB_TIMEOUT=10 # 菜单显示时间(秒),-1=无限等待
GRUB_TIMEOUT_STYLE=menu # menu/countdown/hidden
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" # 默认启动参数
GRUB_CMDLINE_LINUX="" # 附加到所有启动项的参数
# 显示/隐藏菜单
GRUB_HIDDEN_TIMEOUT=0 # 隐藏菜单,直接启动
GRUB_HIDDEN_TIMEOUT_QUIET=true
# 图形界面
GRUB_GFXMODE=1920x1080 # 分辨率
GRUB_GFXPAYLOAD_LINUX=keep # 保持图形模式
# 主题
GRUB_THEME="/boot/grub/themes/starfield/theme.txt"
# 密码保护(生产环境推荐)
GRUB_PASSWORD="grub.pbkdf2.sha512.10000.xxx"
应用配置
# Debian/Ubuntu
sudo update-grub
# 或完整命令
sudo grub-mkconfig -o /boot/grub/grub.cfg
# RHEL/CentOS/Fedora
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# UEFI 系统
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
3.3 添加自定义启动项
编辑 /etc/grub.d/40_custom:
#!/bin/sh
exec tail -n +3 $0
# 启动 Windows(手动指定)
menuentry "Windows 10" {
insmod part_gpt
insmod fat
insmod chain
search --fs-uuid --set=root 1234-5678
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
# 启动 ISO 镜像(Live CD)
menuentry "Ubuntu Live ISO" {
set isofile="/iso/ubuntu-22.04.iso"
loopback loop (hd0,1)$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet
initrd (loop)/casper/initrd
}
# 内存测试
menuentry "Memory Test (Memtest86+)" {
linux16 /boot/memtest86+.bin
}
然后执行 sudo update-grub。
3.4 启动菜单美化
# 安装主题
sudo add-apt-repository ppa:daniruiz/flat-remix
sudo apt install flat-remix-grub
# 或手动安装
sudo git clone https://github.com/vinceliuice/grub2-themes.git /tmp/grub2-themes
cd /tmp/grub2-themes
sudo ./install.sh -t vimix -s 1080p
# 修改配置启用
sudo nano /etc/default/grub
GRUB_THEME="/boot/grub/themes/vimix/theme.txt"
sudo update-grub
四、GRUB 故障修复
4.1 常见故障场景
| 现象 | 原因 | 修复方法 |
|---|---|---|
error: file not found |
内核文件被删除或移动 | GRUB 命令行手动指定正确路径 |
error: unknown filesystem |
GRUB 不支持该文件系统 | 安装对应 fs 模块,或重建 GRUB |
grub> 提示符(无菜单) |
grub.cfg 损坏或丢失 |
命令行手动启动,或 Live CD 修复 |
grub rescue> 提示符 |
Stage 1.5/2 损坏 | 使用 Live CD 完整重装 GRUB |
| 直接进入 Windows,无 Linux | UEFI 启动顺序被覆盖 | 调整 UEFI 启动项,或修复 GRUB |
| 启动后黑屏 | 显卡驱动问题 | 编辑启动参数添加 nomodeset |
4.2 紧急修复:GRUB 命令行启动系统
当 GRUB 菜单损坏,只剩 grub> 提示符时:
# 步骤 1:找到根分区
grub> ls
(hd0) (hd0,gpt1) (hd0,gpt2) (hd0,gpt3)
grub> ls (hd0,gpt2)/
# 看到 vmlinuz 和 initrd.img = 找到根分区
# 步骤 2:设置变量
grub> set root=(hd0,gpt2)
grub> set prefix=(hd0,gpt2)/boot/grub
# 步骤 3:加载内核(根据实际版本调整)
grub> linux /vmlinuz-5.15.0-76-generic root=/dev/nvme0n1p2 ro
# 或先用 UUID(更可靠)
grub> linux /vmlinuz-5.15.0-76-generic root=UUID=xxxxx ro
# 步骤 4:加载初始化内存盘
grub> initrd /initrd.img-5.15.0-76-generic
# 步骤 5:启动
grub> boot
进入系统后,立即修复 GRUB:
sudo update-grub
sudo grub-install /dev/nvme0n1 # 安装到磁盘,不是分区!
4.3 Live CD 完整修复
# 1. 从 Ubuntu Live USB 启动,选择 "Try Ubuntu"
# 2. 打开终端,查看磁盘
sudo fdisk -l
# 找到 Linux 根分区,如 /dev/nvme0n1p2
# 3. 挂载根分区
sudo mount /dev/nvme0n1p2 /mnt
# 4. 挂载其他必要文件系统
sudo mount /dev/nvme0n1p1 /mnt/boot/efi # UEFI 系统
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
# 5. chroot 进入系统
sudo chroot /mnt
# 6. 重新安装 GRUB
grub-install /dev/nvme0n1
update-grub
# 7. 退出并重启
exit
sudo reboot
4.4 重置 root 密码
# 在 GRUB 菜单按 'e' 编辑启动项
# 找到 linux 开头的那行,在行末添加:
init=/bin/bash
# 按 Ctrl+X 或 F10 启动
# 进入 root shell(无密码!)
# 根分区是只读的,重新挂载
mount -o remount,rw /
# 修改密码
passwd root
# 重启
exec /sbin/init
五、UEFI 与 Legacy BIOS 差异
| 特性 | Legacy BIOS | UEFI |
|---|---|---|
| 分区表 | MBR | GPT |
| 启动文件位置 | MBR 前 446 字节 | EFI 系统分区(ESP) |
| GRUB 安装目标 | /dev/sda(磁盘) |
/dev/sda1(ESP 分区) |
| 安装命令 | grub-install /dev/sda |
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu |
| 配置文件路径 | /boot/grub/grub.cfg |
/boot/efi/EFI/ubuntu/grub.cfg |
| 安全启动 | 不支持 | 支持(可能需关闭或 shim) |
UEFI 专用修复:
# 重新安装 UEFI 版本的 GRUB
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck
# 更新 NVRAM 启动项
sudo efibootmgr -v # 查看当前项
sudo update-grub
六、GRUB 安全加固
6.1 设置启动密码
# 生成密码哈希
grub-mkpasswd-pbkdf2
# 输入密码,复制生成的哈希
sudo nano /etc/grub.d/40_custom
set superusers="admin"
password_pbkdf2 admin grub.pbkdf2.sha512.10000.xxxxxx
# 限制普通用户编辑
sudo nano /etc/grub.d/10_linux
# 在 menuentry 块中添加 --users '' 表示需要密码
menuentry 'Ubuntu' --users '' {
...
}
sudo update-grub
6.2 禁用恢复模式
sudo nano /etc/default/grub
GRUB_DISABLE_RECOVERY="true"
sudo update-grub
本文为同步搬运内容,原创首发于个人独立博客网站:https://www.zheng-chang-ren.xyz
平台更新优先级说明:所有技术笔记、实验教程、踩坑总结均会优先发布、长期维护于个人独立博客;CSDN 仅作为辅助分发渠道。
若想查阅全部完整文集、获取最新首发内容,建议收藏并优先访问我的个人博客网站。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)