补充说明
grub-mkconfig 读取 /etc/default/grub 与 /etc/grub.d/ 下的脚本,探测已安装的内核,生成完整的 grub.cfg。它本身不写文件,默认把结果输出到标准输出,因此通常配合 -o 使用。
生成流程大致是:/etc/grub.d/00_header 生成头部,10_linux 枚举内核,30_os-prober(若启用)探测其他系统,40_custom 容纳自定义条目。要修改内核参数或超时时间,应编辑 /etc/default/grub 中的 GRUB_CMDLINE_LINUX、GRUB_TIMEOUT 等变量,而不是直接改 grub.cfg。
不同发行版有包装命令:Debian/Ubuntu 用 update-grub,RHEL 系用 grub2-mkconfig -o /boot/grub2/grub.cfg。EFI 与 BIOS 的 grub.cfg 路径不同,执行前先确认目标路径存在。
语法
grub-mkconfig [选项]
选项
-o 文件/--output=文件:把生成的配置写入指定文件-h/--help:显示帮助-V/--version:显示版本
实例
# 预览生成的配置,不写入文件
sudo grub-mkconfig | less
# Debian/Ubuntu:重新生成配置
sudo grub-mkconfig -o /boot/grub/grub.cfg
# 等价的包装命令
sudo update-grub
# RHEL/CentOS:路径不同
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# 修改默认内核参数后重新生成
sudoedit /etc/default/grub
# GRUB_CMDLINE_LINUX="quiet splash"
sudo grub-mkconfig -o /boot/grub/grub.cfg
# 添加自定义菜单项
sudoedit /etc/grub.d/40_custom
sudo grub-mkconfig -o /boot/grub/grub.cfg
/etc/grub.d/ 下的脚本必须具有可执行权限,否则会被跳过。启用 os-prober 探测其他操作系统时,Debian 12 起需要把 GRUB_DISABLE_OS_PROBER=false 写入 /etc/default/grub。