Linux系统中,GRUB(Grand Unified Bootloader)是广泛使用的引导加载程序,负责在系统启动时加载内核和初始化内存盘(initrd),并允许用户选择启动的操作系统或启动模式,正确配置GRUB对于系统启动的稳定性和灵活性至关重要,以下将详细介绍Linux环境下GRUB的配置步骤和注意事项。
GRUB配置基础
GRUB的配置主要涉及核心配置文件grub.cfg
,该文件通常位于/boot/grub/
或/boot/grub2/
目录下(不同发行版路径可能略有差异),直接手动编辑grub.cfg
虽然可行,但容易因语法错误导致启动失败,推荐通过grub-mkconfig
工具自动生成配置文件,再手动调整特定参数。
配置步骤详解
备份原始配置文件
修改前务必备份原始grub.cfg
,避免配置错误导致无法启动。
sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.bak
生成基础配置文件
使用grub-mkconfig
工具扫描系统中的内核和启动项,生成新的grub.cfg
,不同发行版的命令略有不同:
- Ubuntu/Debian:
sudo update-grub
(内部调用grub-mkconfig -o /boot/grub/grub.cfg
) - CentOS/RHEL:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- Arch Linux:
sudo grub-mkconfig -o /boot/grub/grub.cfg
该命令会自动检测已安装的Linux内核、Windows等其他操作系统,并生成对应的启动菜单项。
手动调整核心参数
自动生成的配置可能需要个性化调整,可通过编辑/etc/default/grub
文件实现(此文件是grub-mkconfig
的配置源,修改后需重新运行grub-mkconfig
生效),常见参数包括:
GRUB_DEFAULT
:设置默认启动项,可设为0
(第一个菜单项)、saved
(上次选择的项)或具体菜单项名称(如”Ubuntu, Linux 5.15.0-52-generic”)。GRUB_TIMEOUT
:菜单显示超时时间(秒),设为-1
表示等待用户手动选择,0
则直接启动默认项。GRUB_CMDLINE_LINUX_DEFAULT
:默认内核启动参数,如quiet splash
(简化启动信息)、nomodeset
(禁用显卡驱动,解决黑屏问题)等。GRUB_DISABLE_OS_PROBER
:是否禁用自动检测其他操作系统,设为true
时仅显示Linux内核项。
示例:编辑/etc/default/grub
,修改默认启动项和超时时间:
sudo nano /etc/default/grub # 修改以下两行 GRUB_DEFAULT=saved GRUB_TIMEOUT=10 GRUB_CMDLINE_LINUX_DEFAULT="quiet nomodeset"
保存后执行sudo update-grub
(或对应发行版的命令)使配置生效。
添加自定义启动项
若需添加非自动检测的启动项(如救援模式、其他内核版本或操作系统),可直接在grub.cfg
中添加menuentry
块,添加一个救援模式启动项:
sudo nano /boot/grub/grub.cfg # 在文件末尾添加以下内容 menuentry "Rescue Mode" { insmod ext2 set root='(hd0,msdos1)' # 根据实际分区调整,如/dev/sda1 linux /boot/vmlinuz-5.15.0-52-generic rescue initrd /boot/initrd.img-5.15.0-52-generic }
注意:root
参数需指向/boot
分区所在的设备(可通过lsblk
或fdisk -l
查看分区信息),linux
和initrd
路径需与实际文件一致。
安装GRUB到引导设备
配置完成后,需将GRUB安装到硬盘的引导记录(MBR或GPT分区表),确保下次启动时能正确加载,命令格式为grub-install [设备]
,
# 安装到/dev/sda(第一块硬盘) sudo grub-install /dev/sda
若使用UEFI启动,需指定ESP分区(如/dev/sda2
),并添加--target=x86_64-efi
参数:
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB
不同发行版GRUB配置差异
发行版 | 配置文件路径 | 生成配置命令 | 安装命令 |
---|---|---|---|
Ubuntu/Debian | /boot/grub/grub.cfg | sudo update-grub |
sudo grub-install /dev/sda |
CentOS/RHEL | /boot/grub2/grub.cfg | sudo grub2-mkconfig -o /boot/grub2/grub.cfg |
sudo grub2-install /dev/sda |
Arch Linux | /boot/grub/grub.cfg | sudo grub-mkconfig -o /boot/grub/grub.cfg |
sudo grub-install /dev/sda |
常见问题处理
若配置后无法启动,可通过Live CD/USB进入系统,挂载原分区后重新执行grub-install
和grub-mkconfig
修复,使用Ubuntu Live USB:
- 挂载根分区:
sudo mount /dev/sda1 /mnt
(假设在/dev/sda1) - 挂载/boot分区(若独立):
sudo mount /dev/sda2 /mnt/boot
- chroot到系统:
sudo chroot /mnt
- 重新安装GRUB:
grub-install /dev/sda
- 生成配置:
update-grub
FAQs
Q1:修改GRUB配置后启动菜单未更新,怎么办?
A1:需手动运行grub-mkconfig
(或对应发行版的命令,如update-grub
)重新生成grub.cfg
文件,若仅修改/etc/default/grub
,未执行此步骤,配置不会生效。
Q2:如何恢复GRUB为默认配置?
A2:首先备份当前配置,然后删除/boot/grub/grub.cfg
(或/boot/grub2/grub.cfg
),重新运行grub-mkconfig
生成默认配置;或直接恢复备份的grub.cfg.bak
文件,再执行grub-install
安装。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/34964.html