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 表示上次选择的项)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 用户必备的技能。