一、GRUB 是什么?
GRUB 是 Linux 及其他类 Unix 系统中最常用的 启动引导程序,负责在计算机启动时加载操作系统内核,并移交控制权。它是系统启动的第一环,直接影响能否正常进入操作系统。
核心作用
硬件初始化:在操作系统接管前,初始化硬件(如磁盘、文件系统)。多重引导支持:允许选择启动多个操作系统(如 Linux、Windows)或同一系统的不同内核版本。内核加载:加载 Linux 内核(vmlinuz)和初始化内存盘(initramfs)。
二、GRUB 的核心组件与工作流程
1. 组件结构
GRUB 镜像:存储在磁盘的 MBR(BIOS) 或 EFI 分区(UEFI),用于启动引导程序。配置文件:
/boot/grub/grub.cfg:主配置文件(自动生成,不可直接编辑)。/etc/default/grub:用户自定义配置(如超时时间、默认启动项)。/etc/grub.d/:生成菜单的脚本目录(可自定义启动项)。 主题资源:位于 /boot/grub/themes/,包含图片、字体和样式文件。
2. 启动流程
BIOS/UEFI 阶段:硬件自检后,加载 GRUB 引导程序。GRUB 阶段:
读取 /boot/grub/grub.cfg,显示启动菜单。根据用户选择或默认配置,加载内核和 initramfs。 内核阶段:内核初始化,挂载根文件系统,启动系统服务(如 systemd)。
三、GRUB 关键配置详解
1. 主配置文件 /etc/default/grub
通过修改此文件控制 GRUB 行为,常用参数如下:
参数作用示例值GRUB_DEFAULT默认启动项(数字或 saved 表示上次选择的项)savedGRUB_SAVEDEFAULT是否保存上次选择的启动项(需 GRUB_DEFAULT=saved)trueGRUB_TIMEOUT_STYLE菜单显示方式:hidden(隐藏)/menu(显示)/countdown(倒计时)menuGRUB_TIMEOUT菜单等待时间(秒),0 表示直接启动默认项10GRUB_CMDLINE_LINUX传递给内核的通用参数(所有启动项生效)"quiet splash"GRUB_CMDLINE_LINUX_DEFAULT仅默认启动项的内核参数(可调试用,如 nomodeset)"text"GRUB_THEME主题文件路径/boot/grub/themes/my_theme/theme.txtGRUB_DISABLE_OS_PROBER是否禁用其他操作系统检测(false 启用)false
2. 生成配置文件的命令
sudo update-grub # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL/CentOS/Fedora
3. 自定义启动项
在 /etc/grub.d/ 目录中添加自定义脚本(如 40_custom):
#!/bin/sh
exec tail -n +3 $0
menuentry "My Custom OS" {
set root=(hd0,1)
chainloader +1
}
赋予执行权限并更新配置:
sudo chmod +x /etc/grub.d/40_custom
sudo update-grub
四、GRUB 主题定制(以 Ubuntu 22.04 为例)
1. 主题结构
my_theme/
├── theme.txt # 主题配置文件
├── background.png # 背景图片(PNG 格式)
├── icons/ # 菜单项图标
└── fonts/ # 字体文件(.pf2 格式)
2. 关键配置项(theme.txt)
# 基础信息
title: My Theme
resolution: 1920x1080
# 背景与字体
background_image: "background.png"
item_color: "#FFFFFF"
selected_item_color: "#FF0000"
terminal-font: "fonts/ubuntu.pf2"
# 布局调整
+ boot_menu {
left = 20%
top = 30%
width = 60%
height = 40%
}
3. 安装与启用
# 复制主题文件
sudo mkdir -p /boot/grub/themes/my_theme
sudo cp -r ~/Downloads/my_theme/* /boot/grub/themes/my_theme/
# 修改 GRUB 配置
sudo nano /etc/default/grub
# 添加或修改:
GRUB_THEME="/boot/grub/themes/my_theme/theme.txt"
# 更新配置并重启
sudo update-grub
sudo reboot
五、常见问题与解决方案
1. GRUB 菜单不显示
原因:GRUB_TIMEOUT_STYLE=hidden 或 GRUB_TIMEOUT=0。解决:GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
2. 无法检测其他操作系统(如 Windows)
原因:os-prober 未启用。解决:sudo apt install os-prober
sudo nano /etc/default/grub # 设置 GRUB_DISABLE_OS_PROBER=false
sudo update-grub
3. 主题未生效
排查步骤:
确认主题路径和权限:sudo ls -l /boot/grub/themes/my_theme/
sudo chmod -R 755 /boot/grub/themes/my_theme/
检查 grub.cfg 是否包含主题:sudo grep "set theme" /boot/grub/grub.cfg
UEFI 系统需将主题复制到 EFI 分区:sudo cp -r /boot/grub/themes/my_theme /boot/efi/EFI/ubuntu/themes/
4. 启动时卡在 initramfs
原因:initramfs 未包含必要驱动或配置。解决:sudo update-initramfs -u # 更新 initramfs
sudo update-grub
六、高级技巧
1. 设置默认启动项
# 列出所有启动项
grep menuentry /boot/grub/grub.cfg
# 设置第 2 个启动项为默认(索引从 0 开始)
sudo sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=1/' /etc/default/grub
sudo update-grub
2. 修复 GRUB 引导
若 GRUB 损坏(如被 Windows 覆盖):
# 使用 Live USB 启动后操作
sudo mount /dev/sda1 /mnt # 挂载根分区
sudo mount /dev/sda2 /mnt/boot/efi # 挂载 EFI 分区(UEFI)
sudo grub-install --root-directory=/mnt /dev/sda
sudo update-grub
3. 使用 Grub Customizer(图形工具)
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt update
sudo apt install grub-customizer
七、总结
GRUB 是 Linux 系统启动的核心组件,掌握其配置方法可解决多系统引导、启动故障修复、界面美化等问题。关键点包括:
理解配置文件 /etc/default/grub 和生成机制。熟悉主题定制流程(路径、权限、分辨率适配)。掌握常用修复命令(update-grub、grub-install)。
通过灵活调整 GRUB,您不仅能优化启动体验,还能在系统故障时快速恢复,是 Linux 用户必备的技能。