linux启动引导GRUB2(Grand Unified Bootloader version 2)

一、 GRUB2 的主要特点

相比于早期的 GRUB Legacy,GRUB2 进行了彻底的重构,具有以下显著特点:

  • 模块化设计:GRUB2 的核心非常小,大部分功能(如文件系统支持、逻辑卷支持等)都以模块(.mod 文件)形式存在,按需加载。
  • 支持多种文件系统:原生支持 ext4、xfs、btrfs、ZFS、NTFS、FAT 等,甚至可以直接从 LVM 或 RAID 分区启动。
  • 图形化界面支持:支持高分辨率屏幕和背景图片,通过 VBE(VESA BIOS Extensions)或 EFI 图形协议实现更好的视觉效果。
  • 脚本语言支持:配置文件支持条件判断(if/else)、循环和函数,逻辑处理能力远超前代。
  • 多架构支持:兼容传统的 BIOS(i386-pc)以及现代的 UEFI 架构。
  • 强大的救援模式:即使配置文件损坏,也可以通过命令行手动加载内核并启动系统

二、 GRUB2 配置文件结构

在 GRUB2 中,用户不应该直接编辑 /boot/grub/grub.cfg,因为该文件是自动生成的,手动修改会在内核更新后被覆盖。正确的配置逻辑如下:

  1. **/etc/default/grub**:这是主要的用户配置文件,用于设置默认启动项、超时时间、内核参数等。
  2. **/etc/grub.d/**:这是一个目录,包含若干脚本(如 00_header10_linux40_custom)。这些脚本决定了如何扫描系统并生成菜单项。
  3. **grub-mkconfig**:该命令会读取上述文件和脚本,合并后生成最终的 /boot/grub/grub.cfg

三、 常见配置应用示例

1. 修改默认启动项和等待时间

编辑 /etc/default/grub

1
2
3
4
GRUB_DEFAULT=0          # 默认启动第一项(也可以设置为具体的名称)
GRUB_TIMEOUT=5 # 菜单等待时间为 5 秒
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" # 内核启动参数,quiet 表示不显示详细启动日志

2. 更新配置生效

修改完设置后,必须运行更新命令(不同发行版命令略有不同):

  • Ubuntu/Debian: sudo update-grub
  • CentOS/Fedora/RHEL: sudo grub2-mkconfig -o /boot/grub2/grub.cfg(EFI模式路径可能不同)

3. 自定义启动项

如果你想手动添加一个 ISO 镜像启动或另一个系统,可以编辑 /etc/grub.d/40_custom

1
2
3
4
menuentry "My Custom OS" {
set root='hd0,msdos1'
chainloader +1
}

四、 常用维护命令

命令 用途
grub-install /dev/sda 将 GRUB 安装到指定硬盘的 MBR 或 EFI 分区
grub-reboot "Entry Name" 设置下次启动时临时进入的项目(仅一次有效)
grub-mkpasswd-pbkdf2 为 GRUB 菜单设置加密密码,增强安全性

五、 故障处理:进入 grub rescue 怎么办?

如果启动时看到 grub rescue> 提示符,说明 GRUB 找不到它的模块或配置文件。

  1. 使用 ls 查看分区。
  2. 使用 set 查看当前路径设置。
  3. 通过以下逻辑手动引导:

set root=(hd0,msdos1)
set prefix=(hd0,msdos1)/boot/grub
insmod normal
normal

温馨提示:在操作 GRUB 配置之前,建议先备份 /etc/default/grub,以免配置失误导致系统无法进入图形界面。