我有 CentOS 7 和 Win10 双启动系统。我的安装完全是普通的(先是 CentOS,然后是 Win10),一切顺利。一切都很好,除了 grub 似乎没有保存我从引导加载菜单中的“最后”选择。
我翻遍了所有的 grub 配置文件(例如/boot/efi/EFI/centos/grub.cfg
),所有代码似乎都在记录最后的选择。
我的/etc/default/grub
节目:
GRUB_TIMEOUT=5
...
GRUB_DEFAULT=saved
...
GRUB_SAVEDEFAULT=true
有什么明显的我遗漏或需要做的事情来实现这一点吗?
我/etc/efi/EFI/centos/grubenv
从来没有记录过最新的选择。它总是有:
saved_entry=CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
##########[...snip...padding to 1k]
我无法从 Windows 启动中看到该文件,但我确实通过“救援 Centos 条目”进行了测试。
我手动将值设置grubenv
为Windows Boot Manager (on /dev/sda2)
(Windows 条目),效果很好。但是,重新启动 CentOS 无法更改它。
看来我缺少一些东西来启用这种“保存最后的选择”行为。有任何想法吗?
答案1
或者,您可以简单地为要设置为默认值的操作系统指定 GRUB_DEFAULT 编号。转到位于以下位置的 grub 配置文件/boot/grub2/grub.cfg并搜索关键字菜单项。这将在启动屏幕上显示操作系统列表。
假设首先是 CentOS 条目,然后是 Windows 条目,如果您希望默认操作系统作为 CentOS 启动,只需编辑 GRUB_DEFAULT 的值/etc/默认/grub如下
GRUB_DEFAULT=0
如果您希望 Windows 10 默认启动,请设置
GRUB_DEFAULT=1
保存并重新启动。您应该将所选操作系统设为默认操作系统。
答案2
该/etc/default/grub
文件用于生成grub.cfg
实际控制 grub 行为的最终文件。编辑 grub 文件后,您必须运行
sudo update-grub
生成一个新的/boot/grub/grub.cfg
(通常位置)。
答案3
意识到这个问题已经快一年了,我可以确认以下工作:
$ su
Password:
# vim /boot/grub/grub.conf
在该文件中,我有以下内容:
default=saved
timeout=5
...
title CentOS (2.6.32-642.13.1.el6.x86_64)
root ...
...
savedefault
initrd ...
title CentOS (<old kernel>...)
...
savedefault
title Windows (10)
...
savedefault
我认为您可能在每个启动项中缺少savedefault
关键字(?) - 尽管看起来您可能在 CentOS 7 上,而我在 CentOS 6 上。IIRC,CentOS 6 使用 GRUB(GRUB v1.97),而CentOS 7 使用 GRUB2 (GRUB 2.01)。
我确信未来的用户/搜索者会感激任何能够确认/否认这解决了他们的问题的人。
答案4
根据这个错误问题在于 grubenv 的链接指向 /boot/grub2/grubenv,但 /boot 未安装在 grub 菜单环境中。上面的错误来自 fedora,但我认为 centos 也是如此。我在运行 CentOS 7 和 grub2 时遇到此问题。
系统启动得很好,但只有在按下一个键后,才会出现 grubenv 不存在的消息。上面的错误也包括修复。符号链接
/boot/grub2/grubenv -> ../efi/EFI/centos/grubenv
应该修复这个问题。
- 编辑 * 确认这解决了运行 linux 内核 4.20.0.1 的 CentOS 7.1 上的问题。
如何?
sudo rm /boot/grub2/grubenv
sudo ln -s ../efi/EFI/centos/grubenv /boot/grub2/grubenv
如果不需要 grub2-efi,请确保也将其删除,因为它似乎会导致此问题。
sudo yum remove grub2-efi