我是 Linux 新手。最近刚重新安装了 Ubuntu,每次启动时,我都会进入 grub shell。我到处找过,浪费了很多时间,却怎么也找不到问题所在。
分区表的布局如下: /dev/sda1 - 实际操作系统 /dev/sda2 - EFI /dev/sda3 - 交换
通过运行:
set root=(hd0,gpt1)
linux /vmlinuz_something root=/dev/sda1 ro
initrd /initrd.img
boot
我启动操作系统,然后运行 update-grub。它似乎已成功找到内核并更新了条目,但仍启动到 grub。因此,我进一步研究了这个问题,并遇到了一些情况,表明它可能与 GRUB 在启动尝试失败后处理启动的方式有关。
根据我所理解的内容,我决定尝试将其添加到我的 /etc/default/grub 中:
GRUB_TIMEOUT=0
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
我再次运行 update-grub,问题仍然存在。还尝试了其他值作为猜测,但不出所料,没有奏效。我很抱歉提起这个令人筋疲力尽的话题,但我找到的解决方案对我来说不起作用。有什么想法可以解决这个问题吗?
答案1
我怀疑您安装了两个 GRUB —— 可能一个用于一个发行版,另一个用于另一个发行版;或者一个用于 BIOS 模式,一个用于 EFI 模式。无论哪种情况,如果您正在更新一个 GRUB 的配置文件,但另一个 GRUB 正在执行,您就会看到类似您所看到的症状。
如果你有两个 EFI 模式 GRUB 安装,你应该在你的sudo efibootmgr -v
输出和/或你的EFI 系统分区 (ESP),通常在 Ubuntu 中安装/boot/efi
。尝试以下命令:
sudo efibootmgr -v
sudo find /boot/efi -iname "*.efi"
第一个命令显示已在固件中注册的引导加载程序,包括它们的路径。如果您看到对shim.efi
、shimx64.efi
、grub.efi
或 的多个引用grubx64.efi
(即,此集合中有多个),则可能是问题所在。第二个命令查找 ESP 上的所有引导程序(假设它安装在 上/boot/efi
)。同样,多个引导程序可能是一个问题 —— 但在这种情况下,一个 Shim 可以与一个 GRUB 共存;只是多个 GRUB 二进制文件可能是一个问题。
如果你有一个 BIOS 模式和一个 EFI 模式 GRUB,那么可能更难检测。最简单的方法是运行启动信息脚本,它可以识别 BIOS 模式和 EFI 模式的引导加载程序,但需要一些经验来解释。
您可能希望将RESULTS.txt
启动信息脚本生成的文件以及我提到的这两个命令的输出发布到pastebin 网站,并将 URL 发布在这里以供我们解释。
还有一件事:如果您同时拥有 BIOS 模式和 EFI 模式 GRUB,并且 BIOS 模式 GRUB 出现故障,您可以通过进入固件并禁用兼容性支持模块 (CSM)(也称为“旧式启动支持”或类似的说法)来绕过它。我认为此操作可能有三分之一的机会解决您的问题,但值得一试,特别是如果您记得按照说明启用 CSM。即使此操作本身不能解决问题,一旦更好地了解原因,它也可能有助于解决问题。