GRUB引导程序详解
GRUB(Grand Unified Bootloader)是Linux系统中广泛使用的开源引导加载程序,负责在计算机启动时加载操作系统。以下是其核心要点:
1. 核心功能
- 多系统启动:支持同时管理多个操作系统(如Windows、Linux发行版),用户可通过菜单选择启动目标。
- 灵活配置:可自定义启动项、内核参数、超时时间等。
- 跨平台兼容:兼容BIOS和UEFI固件,支持多种文件系统(如ext4、NTFS、FAT32)。
2. 工作原理
启动阶段
- Stage 1(MBR/EFI分区)
- BIOS/UEFI加载GRUB的初始代码(位于硬盘的MBR或EFI系统分区)。
- 代码简单,仅用于定位下一阶段。
- Stage 1.5(文件系统驱动)
- 加载文件系统驱动(如ext4、NTFS),使GRUB能读取后续配置。
- Stage 2(核心功能)
- 加载完整GRUB环境,解析
/boot/grub/grub.cfg
配置文件,显示启动菜单。
- 加载完整GRUB环境,解析
- 加载操作系统
- 用户选择启动项后,GRUB加载对应内核(
vmlinuz
)和初始内存盘(initramfs
),将控制权移交内核。
- 用户选择启动项后,GRUB加载对应内核(
3. 配置文件
- 主配置文件:
/boot/grub/grub.cfg
- 警告:直接编辑此文件可能导致系统无法启动,建议通过以下方式修改:
- 编辑
/etc/default/grub
(调整全局参数,如超时时间、默认启动项)。 - 运行
sudo update-grub
(重新生成grub.cfg
)。
- 编辑
- 警告:直接编辑此文件可能导致系统无法启动,建议通过以下方式修改:
- 自定义菜单项:在
/etc/grub.d/
目录下添加脚本,或使用/boot/grub/custom.cfg
。
4. 常见问题解决
问题1:GRUB菜单不显示
- 原因:配置错误、超时时间过短或显卡驱动问题。
- 解决:
- 重启时按
Shift
(BIOS)或Esc
(UEFI)强制显示菜单。 - 编辑
/etc/default/grub
,设置GRUB_TIMEOUT=10
并更新配置。
- 重启时按
问题2:系统无法启动(GRUB Rescue模式)
- 场景:GRUB配置损坏或分区表错误。
- 解决:
- 使用Live USB启动,挂载系统分区:
sudo mount /dev/sdXn /mnt # 替换为实际分区 sudo grub-install --boot-directory=/mnt/boot /dev/sdX
- 更新GRUB配置:
sudo chroot /mnt update-grub
- 使用Live USB启动,挂载系统分区:
问题3:Windows启动项丢失
- 原因:GRUB未检测到Windows分区。
- 解决:
- 运行
sudo os-prober
检测其他系统。 - 更新GRUB配置:
sudo update-grub
- 运行
5. 安全设置
- 密码保护:防止未授权修改启动项。
- 生成加密密码:
grub-mkpasswd-pbkdf2
- 编辑
/etc/grub.d/40_custom
,添加:set superusers="username" password_pbkdf2 username 加密后的密码
- 更新配置:
sudo update-grub
- 生成加密密码:
6. GRUB2 vs 传统GRUB
- GRUB2(当前主流):
- 模块化设计,支持动态加载驱动。
- 更强大的脚本功能(如条件判断、变量)。
- 传统GRUB(Legacy):
- 已淘汰,仅在老旧系统使用。
总结
GRUB是Linux生态的关键组件,通过灵活配置实现多系统管理和故障恢复。遇到问题时,优先检查配置文件和启动分区,必要时使用Live环境修复。