我有一台华硕 E402SA,其磁盘布局如下:
- 30GB 内置 MMC
- 250GB 固态硬盘
我在 MMC 上安装了 Windows 10,在 SSD 上安装了 Ubuntu 16.04(均采用 GPT 方案分区)。包含 Windows 和 GRUB 启动文件的 EFI 分区位于 MMC 上。
当我启动 Windows、关闭、再次打开时,一切都正常:出现 GRUB 菜单,我可以选择 Ubuntu 或 Windows。
当我启动 Ubuntu、关闭并打开时,GRUB shell 出现而没有任何错误消息。每次我关闭并再次打开 PC 时都会发生这种情况,直到我再次启动 Windows。
该exit
命令会将菜单带回来,因此这不是 GRUB 找不到配置文件的问题。此外,如果我在 BIOS 启动管理器中选择 GRUB 条目,则不会出现 shell,而是直接进入菜单。
我在网上搜索了一下,没有找到类似的东西。是什么原因导致了这个问题?这可能是一些系统服务(或 systemd 本身)在摆弄 EFI 变量吗?
调试信息
bootinfoscript 输出:http://www.pasteall.org/125146
答案1
您的配置将 GRUB 二进制文件 ( /boot/efi/EFI/ubuntu/grubx64.efi
) 放在 MMC ( /dev/mmcblk0
) 上,并将 GRUB 配置文件 ( /boot/grub/grub.cfg
) 放在 SSD ( /dev/sda
) 上。我的猜测(我再强调一下:猜测) 是 Ubuntu 以某种方式做了一些事情,使 SSD 在系统重启时对固件不可见,但 Windows 并没有这样做。
您可以通过安装 EFI shell 二进制文件来测试这个假设(请参阅这里获得一些二进制文件的指针),配置 GRUB 以提供启动它的选项(参见这里有关从 GRUB 启动通用 EFI 二进制文件的信息),以及在出现问题和不出现问题的情况下启动 EFI shell。如果我的假设是正确的,那么当您进行冷启动时,SSD 应该显示在设备列表中,但当您从 Ubuntu 重新启动时则不会显示。不幸的是,设备列表经常在您阅读之前就从屏幕顶部滚动出来。在 SSD 上放置一个小型 FAT 文件系统会有所帮助,因为您可以检查它是否存在。(如果可见,它将显示为fs0:
、fs1:
或其他文件系统设备。)
如果我是对的,我想到了一些解决方案或解决方法:
- 使用 Ubuntu 时,请关闭并重新启动,而不是重新启动。想必这就是您现在正在做的事情。
- 重新分区您的设备,以便
/boot
在 MMC 上有一个小的(~500-1000 MiB)分区。完成此操作后,您需要重新安装 GRUB。结果是您的grub.cfg
文件将位于 MMC 上,并且一切都应该正常工作。不过,这将需要一些分区调整,如果您不熟悉这些事情,这可能会很可怕。(或者,您可以重新安装 Ubuntu 以从一开始就以这种方式设置它。) - 升级到 Ubuntu 16.10。由于 16.10 使用与 16.04 不同的内核,因此可能更改重启行为以更好地配合您的固件。这是不是保证能正常工作,但这既是一次冒险,也是一次长远的尝试。(一旦 Ubuntu 16.04.2 发布,您就可以尝试一下,因为它将使用与 16.10 相同的内核。)
- 进一步研究关机时(或者启动时)磁盘的处理,希望找到一个内核选项来修改导致问题的系统调用。例如,内核选项
reboot=
(请参阅这里文档)。此方法需要查阅文档文件并试验引导加载程序配置,并且不是保证产生结果。
祝你好运!
答案2
我知道这个已经有 5 年了,但我发现了同样的情况:
- UEFI
- 两个磁盘:NVME + SSD(启动分区在 NVME 上)GPT 分区
- NVME 上安装的 Windows 10
- Ubuntu 20.04 安装在 SSD 上
关键信息是 Rob 提供的:
这可能是一个时间问题——固件需要一些时间来识别 SSD,并且 GRUB 正在尝试在完成此操作之前访问其配置文件。
在 BIOS 中设置延迟解决了这个问题。对于我的 HP 台式机,它被Post HotKey Delay
设置为 5 秒。