更新 shim 后如何修复损坏的启动?

更新 shim 后如何修复损坏的启动?

我有一台 MacBook Pro(15 英寸,2008 年末),直到昨天还在运行 Kubuntu 20.04。

系统提示我有一个软件更新可用。据我所知,更新的软件包是 shim、shim-(某某)以及可能还有一个。我等待软件更新程序和单独的 grub 更新程序完成并提示我重新启动,然后我才重新启动。现在,当我尝试启动时,我得到一个黑屏,上面写着:

无法设置 MokListRT:参数无效
无法创建 MokListRT:参数无效
导入 MOK 状态失败:import_mok_state() 失败
: 无效的参数
由于安全模式已禁用,因此继续启动_

但启动无法继续。

我今天花了很多时间到处寻找可能的解决方案。我认为最有希望的方案是这条关于 Ubuntu grub2 软件包错误的评论。评论说要删除“shim/shim-signed/mokutil”,我认为评论者的意思是删除所有这三个包。它们似乎与 UEFI 安全启动有关,而我的旧款 MacBook Pro 不支持此功能。我不知道为什么我的系统会首先有这些包,然后提示我更新它们。

但我无法启动 Kubuntu 来删除它们。启动过程甚至没有显示 grub 菜单,我通常会在提示输入加密密钥之前短暂地看到它。我假设磁盘加密不是这里的问题,因为这个过程似乎没有进行到那一步。

我还有一个 OS X 分区,我可以通过按住 键option进入 Mac 引导加载程序来启动它(并且它不会显示我的 Kubuntu 分区作为选项)。在 OS X 中,我下载了最新的 Kubuntu .iso 文件,验证了它的 SHA256 哈希值,并仔细按照 Ubuntu 中的说明进行操作在 macOS 上创建可启动的 USB 记忆棒教程。

当我重新启动时,按住option键进入 Mac 引导加载程序并选择我创建的这个可启动的 USB 棒,我确实得到了 grub 菜单。当我选择默认的 Kubuntu 或安全图形模式选项时,我得到了:

[1.142769]Initramfs 解包失败:解码失败
[ 61.214455] rcu:INFO:rcp_sched 检测到 CPU/任务停顿:
[ 61.214508] rcu:o1-...!:(0 滴答此 GP)空闲=894/0/0x0 softirq=355/355 fqs=0
[ 61.215558] rcu: rcp_sched kthread 需要 15002 个 jiffies!g=835 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402 ->cpu=1
[61.215620] rcu: RCU 宽限期线程堆栈转储:

最后四行每隔几分钟重复一次,直到我关闭电源。

所以我无法启动我的常规 Kubuntu 分区,也无法启动 USB 记忆棒。

我如何重新启动我的 Kubuntu 系统?

答案1

在仔细撰写和发布我的问题的过程中,我脑海中一定出现了一些东西,让我真正看到了昨天在搜索结果中多次出现的内容:

0015522:装有较旧 uefi fw 的机器无法使用较新的 shim 启动(例如 Apple 2008 iMac) - CentOS 错误跟踪器

具体来说,我做的其实是他的解决方法 #2,只是我必须对其进行修改才能启动到我的 OS X 分区,然后以 root 身份创建 /Volumes/efi,使用 diskutil 识别 EFI 分区,挂载它并 cd 到 /Volumes/efi/EFI/ubuntu。而不是像他写的那样将 grub64x.efi 复制到 shimx64.efi 上,我首先将 shimx64.efi 移动到我的桌面目录以便临时保存,以防我想恢复我所做的更改。然后我将 grub64x.efi 复制到 shimx64.efi。然后 umount 给了我某种错误,但建议我尝试 diskutil unmount,我照做了,而且成功了。然后我重新启动并得到了通常的(对我来说)grub 菜单、加密密码提示,最后回到 Kubuntu,现在我已经删除了 shim 和 shim 签名的软件包。

看来删除 shim 包并没有删除它放在 /boot/efi/EFI/ubuntu/ 和 /boot/efi/EFI/Boot-backup/ 中的文件。我暂时保留它们。

我还将发表评论我在问题中链接到的 Ubuntu 错误。我称其为 grub2 软件包错误,但现在我看到其状态在 grub2 中已更改为无效,同时在 shim 中状态为不完整,在 shim-signed 中状态为已确认。已经有很多评论,但似乎仍然存在很多混乱,而且似乎没有人将其与 CentOS 错误报告者发现的修复联系起来。所以我将发布我对 Ubuntu 错误的经验,他们肯定会为其他人修复它。

相关内容