这是之后的后续问题
我已经按照这个问题的答案,在从 BIOS 或 UEFI 配置的计算机启动的 USB 闪存驱动器中创建了 Ubuntu 20.04 的加密完整安装。
随着时间的推移,我使用这个 USB 闪存驱动器在仅 BIOS 的计算机中安装了 Ubuntu,并通过安全和其他更新对其进行更新。现在 UEFI 计算机将无法从此 USB 驱动器启动。当我从 GRUB 中选择Ubuntu时,它会显示错误:
error file '/vmlinuz-5.8.0-48-generic' not found.
you need to load the kernel first.
未安装此特定内核,因为它在安全和其他更新期间被较新的内核取代。
如何为这个基于 USB 的 Ubuntu 安装重新获得 UEFI 引导功能?
两个人的故事
grub.cfg
此 USB 闪存驱动器安装
grub.cfg
在两个位置有两个单独的。一个用于仅引导 BIOS 计算机,另一个用于引导 UEFI 计算机。当安装新内核并删除旧内核时,安装过程仅更新用于当前引导的 grub.cfg 文件。结果,这两个grub.cfg
文件不同步。BIOS 启动所需的文件位于:
UEFI 启动所需的文件位于:
注意,因为这是一个加密安装,所以 boot 分区有挂载点
/boot
,ESP 分区有挂载点/boot/efi
。解决方案
用较新的版本替换较旧的 grub.cfg。就我而言,BIOS 较新。所以我使用了命令:
这暂时解决了这个问题。
一个脚本
我编写了一个小脚本
grubsync.sh
,用于复制旧的并将旧的替换grub.cfg
为新的,如果它们根据 USB 引导的模式(BIOS 或 UEFI)不同而不同。我的 USB 完整安装的主机名是
USB123
. 在运行脚本之前更改它。您将需要使用sudo
前缀运行此脚本。到目前为止,每次有内核更新时我都必须运行这个脚本。通过一些调整,我可以在每次启动时使用 crontab 运行它。
希望这可以帮助