微信优化

weixinyouhua

grub2配置不生效怎么办,grub2怎么配置

2026-09-22 03:34:31

grub2 配置的核心是修改 /etc/default/grub 文件并执行 update-grub 命令,掌握这几个关键参数就能管理默认启动项、调整等待时间以及修复引导故障。

先说清楚 grub2 配置到底要改什么

grub2 的配置文件不像老版 grub 那样直接编辑 menu.lst,而是分成了两套体系:一套是用户可以改的 /etc/default/grub,另一套是自动生成的 /boot/grub/grub.cfg。系统每次更新内核或运行 update-grub 时,都会根据前者重新生成后者。 所以你要改的永远只有 /etc/default/grub,千万别手动去编辑 grub.cfg,那玩意一更新就给覆盖了。

以下是最常用的几个参数,基本覆盖了 90% 的配置场景:

  • GRUB_DEFAULT:默认启动项,可以是数字序号,也可以是菜单项名称。
  • GRUB_TIMEOUT:倒计时秒数,改成 0 就是开机直接进系统。
  • GRUB_CMDLINE_LINUX_DEFAULT:追加的内核启动参数,比如设置分辨率、静默启动。
  • GRUB_GFXMODE:图形模式分辨率,改成 1920x1080 可以解决开机画面模糊的问题。
  • GRUB_THEME:指定主题文件路径,配合主题包使用。

修改完文件后,记住一条命令让配置生效:

sudo update-grub

如果你用的是 RHEL 系(CentOS、Rocky Linux 等),命令是 sudo grub2-mkconfig -o /boot/grub2/grub.cfg,这是两个体系的区别,很多新手卡在这一步,以为配置没生效。

grub2 配置默认启动项和开机等待时间

用数字选择启动项:简单直接但容易错

运行 grep menuentry /boot/grub/grub.cfg 能看到当前所有菜单项,从 0 开始编号,比如输出结果里有 Windows 10 在第 4 行,那 GRUB_DEFAULT=4 就能跳转过去。

这种方式的缺点很明显:内核更新后序号会变,比如你现在 Ubuntu 是第 0 项,升级内核后旧内核还在,新内核变成第 0 项,你的数字就指到旧内核上去了,所以数字只适合临时用。

用菜单名选择启动项:稳定但长名字难写

直接用菜单项名称,

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 6.8.0-generic"

这里用 > 连接子菜单路径,名称里包含内核版本,未来内核一升级,这个配置就失效了,每个内核大版本都去改一遍,纯属折腾。

最省心的做法:子菜单里的第一个内核

grub2配置不生效怎么办,grub2怎么配置

行业共识认为,多数用户只是想默认进入当前最新内核,同时保留旧内核作为保险,这时可以写成:

GRUB_DEFAULT="Advanced options for Ubuntu>Advanced options for Ubuntu>Ubuntu, with Linux"

注意这个技巧:用不带版本号的内核名称前缀,grub2 会自动匹配列表里第一个符合条件的项,这样每次内核更新后,它都能自动指向最新内核的子菜单项,不用反复调整。

把 Windows 设为默认启动项

装双系统的用户经常要改这个,先查看菜单项:

grep -i windows /boot/grub/grub.cfg

得到类似 Windows Boot Manager (on /dev/nvme0n1p1) 这样的完整名称,然后写成:

GRUB_DEFAULT="Windows Boot Manager (on /dev/nvme0n1p1)"

注意保留原有空格和括号,也可以直接设置 GRUB_DEFAULT=saved 配合 GRUB_SAVEDEFAULT=true,让 grub2 记住你上次启动的是哪个系统,下次自动选中,这个功能很实用,相当一部分人不知道。

调整倒计时:快启动还是慢思考?

  • 单系统用户:GRUB_TIMEOUT=0,开机直接进系统,不显示菜单。
  • 双系统用户:GRUB_TIMEOUT=5 或者 10,给切换留一点时间。
  • 如果你希望按下某个按键后等待更久,可以用 GRUB_TIMEOUT_STYLE=menu 配合 GRUB_TIMEOUT=30。hidden 模式会在倒计时结束后自动启动,按键才能显示菜单。

grub2 修复引导的常见场景与命令

开机直接进 grub 命令行,看不到菜单

这通常意味着 grub.cfg 丢失或者损坏,最典型的解决办法是在 grub> 命令行里手动引导一次系统,然后进入系统重新生成配置。

操作步骤如下:

  1. 在 grub> 提示符下输入 ls,会列出所有磁盘分区,(hd0,gpt1)、(hd0,gpt2)。
  2. 用 ls (hd0,gpt2)/ 查看分区内容,找到包含 /boot 或 目录的那个分区。
  3. 如果是 UEFI 引导,需要先执行 set root=(hd0,gpt2)(这里换成实际分区),再 insmod normal 和 normal 尝试调出菜单。
  4. 如果不行,手动加载内核和 initrd:
linux /vmlinuz-<版本号> root=/dev/nvme0n1p2
initrd /initrd.img-<版本号>
boot

进去之后立即执行 sudo update-grub 修复。

更新内核后进不去系统

grub2配置不生效怎么办,grub2怎么配置

这类故障多数是 /boot 分区空间写满了,内核更新时旧内核没清掉,新内核写到一半失败,导致 grub2 找不到可引导的内核。

解决思路是腾出空间,然后重新生成 grub.cfg,进入恢复模式或者用 Live USB 启动,挂载根分区后执行:

sudo apt remove --purge linux-image-旧版本号
sudo update-grub

为了避免再犯,建议定期清理旧内核,或者直接设置自动保留最近 2 个版本,Debian/Ubuntu 可以安装 byobu 家族的工具,或者手动配置 apt autoclean 的定时任务。

硬盘克隆或更换分区后引导失败

你用了 dd 或 DiskGenius 把系统盘克隆到新硬盘,结果 grub2 找不到原来的 UUID,这属于路径识别问题,检查 /boot/grub/grub.cfg 里的 search --no-floppy --fs-uuid --set=root 后面跟的 UUID 是否和实际分区一致。

如果发现不一致,用 blkid /dev/sdXY 查出新 UUID,然后更新 /etc/default/grub 里涉及到的根目录配置,或者重装 grub2:

sudo grub-install /dev/sdX
sudo update-grub

业内专家指出,克隆系统后重新安装 grub 到目标磁盘是最稳妥的方案,比手动改 UUID 省心得多。

grub2 主题设置与自定义引导界面

用现成的 grub2 主题,二十分钟换脸

网上有大量开源 grub2 主题,Vimix、Stylish、Fallout 等,下载后是一个解压文件夹,里面包含 theme.txt 和一堆背景图、字体文件,安装步骤很固定:

  1. 把主题文件夹放到 /boot/grub/themes/ 下,权限 755。
  2. 在 /etc/default/grub 里加上一行:
GRUB_THEME="/boot/grub/themes/你的主题目录/theme.txt"
  1. 执行 sudo update-grub。

注意:设置了 GRUB_THEME 后,GRUB_TIMEOUT_STYLE 的 hidden 模式会失效,因为主题自带图形界面,想隐藏菜单得另外调整主题配置里的 desktop-image 和组件显示。

调整 grub2 启动画面分辨率

很多人改了主题还是模糊,原因是 grub2 默认的图形模式分辨率很低,在 /etc/default/grub 里加一行:

GRUB_GFXMODE=1920x1080

然后执行 update-grub,如果配置后没有生效,可能是显卡不支持该分辨率,可以用 GRUB_GFXPAYLOAD_LINUX=keep 让内核沿用 grub 的分辨率,还有一个小细节:GRUB_TERMINAL_OUTPUT=console

grub2配置不生效怎么办,grub2怎么配置

被取消注释了,图形界面会被强制转为字符终端,那么设啥分辨率都没用。

自定义菜单背景图和字体

不装整个主题,单纯换背景也可以,你只需要准备一张 PNG 格式图片,放进 /boot/grub/ 目录,然后在 /etc/default/grub 里添加:

GRUB_BACKGROUND=/_placeholder.png

图片大小建议控制在 1MB 以内,分辨率匹配你的屏幕,如果图片过大或者格式不支持,grub2 会静默忽略,直接使用默认黑底白字界面,字体方面,默认的 unifont 够用,不用去折腾。

给 grub2 配置做一个备份和回滚方案

改动配置文件前,先把当前状态存个档,很多人手滑删错参数,最后只能靠 Live USB 救人,其实一条命令就能防呆:

sudo cp /etc/default/grub /etc/default/grub.bak

如果修改后出现反复重启、菜单乱码等异常,直接恢复备份:

sudo cp /etc/default/grub.bak /etc/default/grub
sudo update-grub

grub.cfg 本身也建议备份一份,因为你可能误执行了 grub2-mkconfig 覆盖掉原本能用的配置,把当前正常启动的 grub.cfg 复制到一个不会被系统自动扫描的目录,/root/grub.cfg.bak,这是最后一道安全网。

grub2 配置的常见问题

问:grub2 和 grub legacy 的命令有哪些不一样?

grub legacy 用 root (hd0,0)、kernel /vmlinuz 这种写法,grub2 用 set root=(hd0,gpt1)、linux /vmlinuz(注意是 linux 而不是 kernel),grub2 还支持模块动态加载,insmod normal、insmod search,老版本里这些功能都是内置的,如果你在网上搜到老教程,看清命令格式再抄。

问:GRUB_TIMEOUT 改成 0 之后怎么再进入 grub 菜单?

开机时按住 Shift 键(UEFI 模式)或者狂按 Esc 键(BIOS 模式),可以强制显示菜单并暂停倒计时,如果你的主板启动太快,看不到按键提示,可以先把 GRUB_TIMEOUT_STYLE=menu 和 GRUB_TIMEOUT=2 保留一两天,确认稳定后再改回 0。

问:如何把 Windows 的启动项移到菜单最前面?

直接编辑 /etc/grub.d/ 目录下的脚本排序,30_os-prober 负责扫描 Windows,10_linux 负责当前 Linux,手动调整可能导致系统更新后失效,更稳妥的办法是用 GRUB_DEFAULT 指定 Windows 名称来达到默认选中效果,而不是强行改菜单顺序。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待