为什么 Ubuntu 安装继续失败并出现“grub-install /dev/sda failed”错误?

为什么 Ubuntu 安装继续失败并出现“grub-install /dev/sda failed”错误?

目标:我正在尝试将 Ubuntu 安装到戴尔 XPS 8900

问题Unable to install Grub in /dev/sda:如果安装不被 , 中断,我就无法完成 Ubuntu 安装Executing 'grub-install /dev/sda failed.' This is a fatal error.。而且并boot-repair不能解决问题。

安装人员:我使用的是带有 Ubuntu 22.04 LTS 安装程序的闪存驱动器。我尝试过使用之前安装过的闪存驱动器,并尝试在使用启动磁盘创建器应用程序创建的另一个闪存驱动器上进行全新安装。注意:我在 grub 命令中添加了 nomodeset 和 acpi=off 来启动 Ubuntu 安装程序操作系统。

尝试解决

  • 我尝试自己使用一些方法来完成 grub 安装答案在阿斯库本图。我做了前面提到的使固定通过退出安装程序提示符(失败后)并在终端中运行命令。我在这里成功完成了 grub 安装。然而,由于最初的错误发生在安装过程中,因此 Ubuntu 操作系统出现了多个问题。我的服务会失败或无法启动(包括但不限于:networkd-dispatcher.service、NetworkManager.service、fwupd-refresh.service、apparmor.service、caspermd5.services(?)),并且我留下了剩余的内容从安装(例如,名为 Install RELEASE 的应用程序仍在我的应用程序中)。

    • 注意:chrooting into/mnt并运行grub-install /dev/sda结果为unable to allocate pty: No such device
  • [这里的最佳答案](https://askubuntu.com/questions/143678/i-receive-the-error-grub-install-dev-sda-failed-while-attempting-to-install-u)建议单击尝试 Ubuntu,然后使用安装 Ubuntu 24.04 LTS 应用程序,但这对我不起作用。

  • [这里的最佳答案](https://askubuntu.com/questions/459620/unable-to-install-grub-in-dev-sda-when-installing-grub)表明 grub-install 安装到了错误的设备,这对我来说不是这样。

  • 我现在很绝望,所以我将 BIOS 更新到了最新的更新。那没有做任何事情。

  • 我尝试在运行尝试安装应用程序之前运行 grub-install。

    • 注:运行sudo grub-install --root-directory /mnt /dev/sda结果为grub-instal: error: failed to register the EFI boot entry: Operation not permitted.
    • 另外,我担心即使我可以在运行 Ubuntu 安装程序之前成功运行 grub-install,Ubuntu 安装程序仍然会失败,因为 Ubuntu 安装程序可能会在没有选项的情况下运行 grub-install。
  • boot-repair说NVram被锁定了。我看见清除 NVRAM 的建议经过重置 CMOS。重置 CMOS 后,我在安装过程中仍然收到相同的错误消息。

问题:为什么 Ubuntu 22.04 LTS 安装继续失败并出现“grub-install /dev/sda failed”错误?

的结果boot-info

的结果boot-repair

答案1

我偶然发现了同样的问题 - 无法安装 20.04LTS 和 22.04LTS。

我最终解决了这个问题:在 Ubuntu 安装程序失败后,重新启动到 USB live Ubuntu 并重新运行启动修复。效果非常好。

更具体地说:

  • 我有 2 个 Nvidia 3090 显卡。

  • 在 GRUB 菜单中选择“安装 Ubuntu”后,出现黑屏。所以我必须e按 GRUB 菜单添加acpi=offnomodeset或者选择“安全图形”对我来说没有帮助)才能进入 USB live Ubuntu 进行安装。

  • 然后我遇到了这个“无法将 GRUB 安装到 NVMe”,并运行引导修复结果为“NVRAM 已锁定”

    我假设在之前的安装过程中,我的 SSD 以某种方式添加了锁,因此启动修复无法进行任何更改,而是我得到“NVRAM 已锁定”。如果你跑cd /target,你就会直接进入其中。

  • 重新启动后,运行cd /target,您将收到一条not a directory错误消息。然后运行启动修复。问题解决了。

我还尝试按照 AskUbuntu 帖子手动安装 GRUB。但我的母语不是英语,所以我想我搞砸了哪个是哪个,我应该安装哪个驱动器。无法真正弄清楚“设备/硬件/驱动器”这个词是指 USB 记忆棒还是 SSD。

答案2

NVram Locked听起来写入 UEFI NVRAM 变量可能存在一些问题,这些变量可以在 Linux 中通过/sys/firmware/efivars或使用该efibootmgr工具进行访问。

/mnt/chrootdir如果您按照问题答案中的建议通过将其安装在下面并chroot插入来访问失败的安装询问您链接的 Ubuntu 问题,我建议使用mount --rbind而不是mount --bind同时使用/dev/sys,因为两者都包含单独的子文件系统,这对于grub-install功能来说可能很重要:

  • 如果/dev/pts在 chroot 环境中不可用,则会导致unable to allocate pty: No such device错误
  • 如果/sys/firmware/efi/efivars在 chroot 环境中不可用,则会导致尝试写入 UEFI NVRAM 变量失败...这正是您的主要问题。

但如果这没有帮助,你可能想阅读Roderick W. Smith 的这个优秀网页,它解释了其他操作系统或有缺陷的 UEFI 固件实现可能导致的某些问题,并提供了解决这些问题的方法。

在您的sda1磁盘上,显然有一个efi/ubuntu/grub.cfg文件,其内容如下:

search.fs_uuid 2D07-0F0A root hd0,gpt1 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

这似乎不正确:它通过文件系统 UUID 查找 ESP 分区 ( sda1),然后假设它应该是包含/boot/grub...的 Linux 根文件系统,但事实并非如此,sda1UEFI ESP 也是如此,而不是 Linux 根文件系统。

该文件应包含以下内容:

search.fs_uuid 25f0e88-f20a-4350-9df0-ee8c57ecc455 root hd0,gpt2
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

您可能也想将其复制efi/ubuntu/grub.cfgefi/BOOT/grub.cfg(也在sda1),以允许 GRUB 找到有效的配置,即使以efi/BOOT/BOOTx64.efi.

此配置文件将导致grubx64.efiESP 通过文件系统 UUID 查找真正的 Ubuntu 根分区 ( sda2),然后从那里加载任何必要的 GRUB 模块,并从/boot/grub/grub.cfgESP 上加载真正的 GRUB 配置sda2

您可能还需要复制efi/ubuntu/grubx64.efiefi/BOOT/grubx64.efion sda1,以确保 UEFI 后备/可移动媒体启动路径上也提供完整的启动文件集。

这部分引导修复输出实际上是由以下内容产生的efibootmgr -v

BootCurrent: 0003
Timeout: 1 seconds
BootOrder: 0003,0004
Boot0003* UEFI: TOSHIBA TransMemory 1.00    PciRoot(0x0)/Pci(0x14,0x0)/USB(1,0)/HD(2,GPT,9240a165-d190-4ab6-8a12-46dc207b42ee,0x71e8a0,0x2130)..BO
Boot0004* UEFI: ST2000DM001-1ER164  HD(1,GPT,22c1dbaf-a26e-4408-a6f9-d1fc06b0d615,0x800,0x100000)/File(EFI\boot\bootx64.efi)..BO

它表示虽然您当前已从 USB 启动,但您的系统固件已准备好从(使用文件回退/可移动媒体启动路径sda1由 PARTUUID 标识)启动(ESP 上的文件系统为,因此它2c1dbaf-a26e-4408-a6f9-d1fc06b0d615EFI/boot/bootx64.efivfat应该不区分大小写...但某些 UEFI 固件实现不区分大小写)。因此,如果您可以对 ESP 执行上述更改,系统可能能够从sda1.

如果您可以让常规 Ubuntu 系统在 UEFI 模式下运行,您可以重试sudo grub-install /dev/sda重写引导加载程序并自动重写 Ubuntu 的 NVRAM 引导变量。或者,您可以使用以下efibootmgr命令尝试自行精确修复引导变量问题:

sudo efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\ubuntu\\grubx64.efi -L Ubuntu 

(此命令要求 被/dev/sda1挂载为/boot/efiefivarfs文件系统被挂载于/sys/firmware/efi/efivars。这两个条件都应该由正常的 Ubuntu 引导过程自动处理。)

如果仍然因“NVram Locked”或类似情况而失败,则您的 UEFI 实现可能有错误,但至少它允许您使用后备/可移动媒体路径启动到 Ubuntu。

相关内容