![GRUB 2“卡”在特定的启动选项上](https://linux22.com/image/1391644/GRUB%202%E2%80%9C%E5%8D%A1%E2%80%9D%E5%9C%A8%E7%89%B9%E5%AE%9A%E7%9A%84%E5%90%AF%E5%8A%A8%E9%80%89%E9%A1%B9%E4%B8%8A.png)
我刚刚使用 btrfs 根目录安装了 openSUSE 13.1 系统,并错误地在 KDE 的重启下拉菜单中选择了 Windows。现在 grub 似乎每次都会自动加载 Windows,而不是像它应该的那样只加载一次。换句话说,grub 确实加载了(并显示一些快速状态消息),但它每次启动时都会直接跳到 Windows 选项。
Grub 确实提到它正在加载配置文件,并且没有显示任何错误,因此我相当确信它没有被覆盖或任何类似的问题。我还将 Windows 安装在单独的磁盘上,以避免我的引导加载程序因 Windows 更新而随机被删除。
在我放弃并重新安装引导程序之前,是否有任何方法可以手动撤消grub2-reboot
对我的配置所做的任何操作(或菜单使用的任何实用程序)?我仍然能够从实时环境中顺利安装磁盘上的分区,并且应该能够 chroot 以执行所需的任何更新。
编辑:通过执行以下操作从活动磁盘通过 chroot 进行修复:
grub2-editenv /boot/grub2/grubenv unset next_entry
答案1
检查脚本源代码后,/usr/sbin/grub2-reboot
我发现启动选择由文件中的“next_entry”变量处理grubenv
。
通过运行(chroot进入系统)可以看到这个问题grub2-editenv list
,结果显示:
saved_entry=openSUSE 13.1
next_entry=Windows 8.1 (loader) ...
在这种情况下,该next_entry
字段在重启后并没有像应该的那样被清除(可能是由于某些 btrfs 不兼容?)
我成功地像这样取消设置它(再次,在 chroot 中):
grub2-editenv /boot/grub2/grubenv unset next_entry
重新启动后,grub 菜单恢复正常!
答案2
如果您可以使用某种类型的 Live CD,则可以使用 grub 配置命令来解决问题。或者,您可以手动配置上述 GRUB 配置文件这里。但是,与 GRUB 不同,GRUB 2 的配置文件不能手动编辑,因此要格外小心。