我正在尝试在 MBR USB 上安装 ParrotSec Linux。根文件夹安装在 sdc5 上,我在 sdc3 上有一个 ext2 分区,其中包含 grub 配置、vmlinux 和 initrd。我的 USB 上还有另一个小分区,位于 sdc1,格式为 fat32,我正在尝试在其上安装 EFI grub,以便我可以从我的计算机启动它。
目前,我能做的是从另一个只包含 grub 的 usb 启动到 grub cli,然后使用 grub cli 加载 linux 和 initrd 并启动系统。但这需要在我的计算机上插入两个 usb,一个装有系统,另一个装有 grub。
有什么方法可以直接在 ParrotSec USB 驱动器上安装 grub,以便我可以在其上进行 EFI 启动?我不介意重新安装整个系统。
答案1
根据我的经验,让 BIOS 模式和 EFI 模式 GRUB 共存于一个介质上可能很棘手,因为它们可能希望使用相同的配置文件,但对此有不同的需求。可以肯定的是,能可以正常工作,但除非你非常了解 GRUB,或者有了解该知识的人的明确指示,或者非常幸运,否则你最终会陷入混乱。我从你自己的回答中意识到,tourdetour,你已经克服了这个障碍,这很好;但是……
对于这项任务,我一般建议依赖两个不同的引导加载程序,例如 GRUB 用于 BIOS 模式,rEFInd(警告:我维护 rEFInd)用于 EFI 模式引导。它们使用不同的配置文件,因此在这方面不会发生冲突。首先将其设置为 BIOS 模式,但留出一个 FAT 分区作为EFI 系统分区 (ESP),是一个好的开始。然后必须使用备用文件名(,至少对于 x86-64 系统)在 ESP 上安装 EFI 引导加载程序EFI/BOOT/bootx64.efi
。对于 rEFInd,可以使用以下refind-install
脚本完成此操作:
refind-install --usedefault /dev/sdb1
此示例在 上设置了 rEFInd /dev/sdb1
,它应该是 USB 驱动器上未安装的 FAT 分区——根据需要调整该值。如果您想使用 ELILO、gummiboot/systemd-boot 或其他东西,您需要查阅其文档以了解如何安装和配置它。
需要注意的是:如果您计划在支持安全启动的系统上启动,使用 GRUB 2 作为 EFI 模式启动加载程序可能会更容易,至少如果发行版支持安全启动的话。然后,您可以使用其他程序(SYSLINUX、LILO 或 GRUB Legacy)进行 BIOS 模式启动。原因是大多数发行版都提供了完整的路径,从 Shim 到 GRUB 2 再到内核,并支持安全启动。将 GRUB 2 换成其他程序是可能的,但这意味着您需要在启动时将至少一个密钥添加到 MOK 列表中。这在一次性基础上并不是太大的挑战,但如果您将安装从一台机器移动到另一台机器或广泛分发,这可能会很麻烦。
答案2
好像我已经做到了。我使用另一个 Linux 发行版的 grub-install 将 grub 安装到 USB 棒中。这样我就可以从 BIOS 启动我的 USB 棒了。然后,我将另一份 grub 复制到 EFI 文件夹中,这样我就可以从 EFI 启动。我实际上安装了两个 grub,但它可以正常工作...