我正在尝试在 USB 记忆棒上安装 grub 以使其可启动。我想让它可以启动以进行 USB 多重启动,在一个 USB 中携带多个发行版(即 rescatux 和 tails)。我已经这样做了:
sudo mkdir -p /media/MULTIBOOT/boot
接着:
sudo grub-install --target=x86_64-efi --boot-directory=/media/MULTIBOOT/boot /dev/sdc1
我得到这个错误:
为 x86_64-efi 平台安装。grub-install:错误:找不到 EFI 目录。
我有 Ubuntu 14.04 LTS,它是 64 位的。
这是我第一次尝试这个,我在这里有点迷路,我应该使用/dev/sdc1
还是/dev/sdc
?
我已经尝试过(结果相似),这是另一种选择:
sudo grub-install --target=x86_64-efi --boot-directory=/media/victoria/MULTIBOOT/boot /dev/sdc
问题出在哪里?
谢谢你的帮助!
我无法为您的问题提供完整的答案,因为 GRUB 配置和安装的某些方面超出了我的技能水平,并且因为您想要做什么有一些歧义(正如 sudodus 在他对您的问题的评论中所指定的那样)。也就是说,我可以提出一些可能有用的意见和建议:
EFI/ubuntu/grubx64.efi
位于EFI 系统分区 (ESP) 上,并且 NVRAM 条目指向该位置。EFI/BOOT/bootx64.efi
USB 驱动器的 ESP 上调用的引导加载程序引导。此文件名通常称为备用文件名,如果没有 NVRAM 条目指向有效的引导加载程序,或者用户从内置引导管理器菜单中选择引导介质,EFI 应该寻找该文件名作为最后的手段。因此,要安装到此位置,您必须调整grub-install
命令(我什至不是 100% 肯定它支持此命令)或手动复制文件。shimx64.efi
) 的程序,并创建一个指向它的 NVRAM 条目,而不是指向grubx64.efi
. 同样,要启动外部媒体,shimx64.efi
必须将原始媒体命名为EFI/BOOT/bootx64.efi
. 无论哪种情况,Shim 都会grubx64.efi
在与 Shim 相同的目录中启动。grub.cfg
会在目录中查找一个文件,该文件/boot/grub
不太可能是 ESP。但是,在启用安全启动的情况下启动时,grubx64.efi
会grub.cfg
在与grubx64.efi
. 那grub.cfg
,虽然,寻找和加载/boot/grub/grub.cfg
,所以效果是一样的,但路径更复杂。在任何一种情况下,都依赖于 ESP 和任何分区/boot/grub
。一些发行版的设置不同;例如,Fedora 将最终grub.cfg
文件和所有相关文件放在 ESP 上。/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 文档,尤其是该页面的下半部分。)