Linux-GRUB全面指南
一、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 表示上次选择的项) | saved |
GRUB_SAVEDEFAULT | 是否保存上次选择的启动项(需 GRUB_DEFAULT=saved ) | true |
GRUB_TIMEOUT_STYLE | 菜单显示方式:hidden (隐藏)/menu (显示)/countdown (倒计时) | menu |
GRUB_TIMEOUT | 菜单等待时间(秒),0 表示直接启动默认项 | 10 |
GRUB_CMDLINE_LINUX | 传递给内核的通用参数(所有启动项生效) | "quiet splash" |
GRUB_CMDLINE_LINUX_DEFAULT | 仅默认启动项的内核参数(可调试用,如 nomodeset ) | "text" |
GRUB_THEME | 主题文件路径 | /boot/grub/themes/my_theme/theme.txt |
GRUB_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 $0menuentry "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 用户必备的技能。