在 U 盘上安装 GRUB:继续出现“找不到 EFI 目录”错误

Ros*_*nda 3 boot grub2 usb uefi

我正在尝试将 grub 安装在 U 盘上以使其可启动。我想让它可启动以制作 USB 多重启动,以便在一个 USB 中携带多个发行版(即 rescatux 和 tails)。我已经这样做了:

sudo mkdir -p /media/MULTIBOOT/boot
Run Code Online (Sandbox Code Playgroud)

进而:

sudo grub-install --target=x86_64-efi --boot-directory=/media/MULTIBOOT/boot /dev/sdc1
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

针对 x86_64-efi 平台安装。grub-install:错误:找不到 EFI 目录。

我有 Ubuntu 14.04 LTS,它是 64 位的。

这是我的 USB 配置: 在此输入图像描述

这是我第一次尝试这个,我在这里有点迷失,我应该使用/dev/sdc1还是/dev/sdc

我已经尝试过(具有类似的结果),这是另一种选择:

sudo grub-install --target=x86_64-efi --boot-directory=/media/victoria/MULTIBOOT/boot /dev/sdc
Run Code Online (Sandbox Code Playgroud)

哪里有问题?

感谢您的帮助!

Rod*_*ith 5

我无法为您的问题提供完整的答案,因为 GRUB 配置和安装的某些方面超出了我的技能水平,并且由于您想要执行的操作有些含糊不清(如 sudodus 在对您的问题的评论中所指定的那样)。也就是说,我可以提出一些可能有帮助的观察和建议:

  • 当您从 Ubuntu 将 GRUB 安装到正常运行的 EFI 系统时,GRUB 将位于EFI 系统分区 (ESP)EFI/ubuntu/grubx64.efi上,并有一个 NVRAM 条目指向该位置。
  • 相比之下,可 EFI 启动的 USB 驱动器通常从EFI/BOOT/bootx64.efiUSB 驱动器的 ESP 上调用的启动加载程序启动。该文件名通常称为后备文件名,如果没有 NVRAM 条目指向有效的引导加载程序,或者用户从内置引导管理器菜单中选择引导介质,EFI 应该将查找该文件名作为最后的手段。因此,要安装到此位置,您必须调整命令grub-install(我什至不能 100% 肯定它支持此命令)或手动复制文件。
  • 使上述情况变得复杂的是,如果计算机使用安全启动,Ubuntu 将安装一个名为Shim ( shimx64.efi) 的程序,并创建一个指向它的 NVRAM 条目,而不是指向grubx64.efi. 同样,要引导外部介质,原始介质shimx64.efi必须命名为EFI/BOOT/bootx64.efi。无论哪种情况,Shim 都会grubx64.efi在与 Shim 相同的目录中启动。
  • 使用安全启动时,Ubuntu 的 GRUB 会在目录中查找一个grub.cfg文件/boot/grub,该文件不太可能是 ESP。但是,当在安全启动处于活动状态下启动时,grubx64.efi会在与. 不过, 会查找并加载,因此效果是相同的,但路径更复杂。无论哪种情况,都依赖于 ESP 和任何分区所保存的内容。有些发行版的设置有所不同;例如,Fedora 将最终文件和所有相关文件放在 ESP 上。grub.cfggrubx64.efigrub.cfg/boot/grub/grub.cfg/boot/grubgrub.cfg
  • /boot/grub/grub.cfg文件是由每当您安装新内核或 GRUB 二进制文件时运行的配置脚本构建(或重新构建)的。这对于单引导系统来说效果很好,但如果您使用另一个 Linux 发行版进行多重引导,事情很快就会变得混乱。特别是,如果发行版 A 的 GRUB 控制引导过程,并且您更新发行版 B 的内核,则 GRUB 不会显示新的发行版 B 内核,直到您update-grub在发行版 A 中运行(或类似的操作)。

在这些因素之间,要使用 GRUB 执行您想要的操作,您很可能必须安装到后备文件名而不是标准文件名;你可能需要也可能不需要将 Shim 挤进画面中;您可能需要调整您的grub.cfg两个发行版设置。有很多事情要做。如果我需要使用 GRUB 完成所有这些工作,我的方法是将两个发行版安装到 USB 驱动器,就好像它是内部硬盘一样,然后将 GRUB(或 Shim)移动/重命名为后备文件名。这样做的好处是您不需要对grub.cfg文件进行胡闹。一个重要的警告是,如果您想使用以不寻常的方式安装的东西(例如通过 UNetbootin 或 Rufus 而不是 Ubuntu 的 Ubiquity 安装程序),这可能会以一种需要某种完全不同的方法的方式改变方程式。看起来您正在尝试使用硬盘上的 Ubuntu 将 GRUB 安装到 USB 驱动器,以便从 USB 驱动器启动。如果您比我更加是 GRUB 专家,那么这种方法可能会起作用,但是有足够多的模糊变量在起作用,您的方法可能会成为复杂的雷区。

另一种方法是使用我的rEFInd 启动管理器。您需要将其安装到后备文件名,但 rEFInd 会在启动时扫描内核,因此当您使用另一个发行版安装 GRUB 或 rEFInd 时,在一个发行版中安装新内核而中断的可能性较小。OTOH,如果您想使用安全启动,则需要跳过额外的步骤(记录在rEFInd 的安全启动页面上)才能使其正常工作,可能在您用来启动 USB 驱动器的每台计算机上。您可能还需要/boot/refind_linux.conf两个发行版创建文件来处理特定于发行版的内核选项。(有关这方面的信息,请参阅rEFInd Linux 文档,尤其是该页面的下半部分。)