将 Grub 安装到已安装 Linux 发行版的 USB 驱动器

将 Grub 安装到已安装 Linux 发行版的 USB 驱动器

我正在尝试制作一个 USB 驱动器,里面安装了两个 Linux 发行版。我的想法是随身携带 USB 驱动器,并在我当时所在的地方可用的计算机中启动发行版。我知道这可能是一个不好的做法,但只是想尝试一下。

我尝试根据以下内容将 Kali Linux 发行版安装到我的 USB 驱动器上这个视频,其中 VirtualBox VM 用于将操作系统安装到 USB 驱动器中。

当我第一次尝试时,我没有在 EFI 模式下启动虚拟机,因此操作系统以传统模式安装(启动指令写入 MBR)。只要我在支持传统启动的电脑上启动,一切都正常,但是当我尝试从 Microsoft Surface(不支持传统启动)启动时,我显然无法从外部驱动器启动。

因此,我尝试在虚拟机上激活 EFI 模式的情况下重新安装 Kali,但这次我也不走运,未能在我的 Surface 上启动发行版。情况与我尝试从以传统模式安装发行版的 Surface 启动时的情况相同:Surface 根本无法识别可启动 USB 驱动器。

谷歌搜索我发现了一堆将 GRUB 安装/重新安装到 USB/外部驱动器的解决方案,但是当我尝试它们时,似乎它们只有在我在 USB 驱动器上安装 GRUB 的同一设备上启动时才能工作。举个例子,当我使用 VirtualBox VM 将 GRUB 安装到我的 USB 设备中时,我只能从该 VirtualBox VM 将我的 Kali 发行版引导到 USB 设备。

我想我在这里遗漏了一些东西......有人可以帮助我澄清并也许解决吗?

我附上描述我的 USB 驱动器分区的屏幕截图以及在 Kali Linux 的 EFI 模式下安装后 USB 驱动器上 ESP 分区的内容,以防它们可以提供帮助:

分区

ESP分区内容

- - 更新 - -

我设法在两台能够 EFI 启动的电脑上启动我的系统。我刚刚将 ESP 中的 Kali 引导加载程序从 /EFI/Kali 移至后备路径 /EFI/BOOT,并将引导加载程序从“grubx64.efi”重命名为后备名称“bootx64.efi”。我不知道为什么启动过程无法启动 /EFI/Kali/grubx64.efi 有人有任何线索吗?

现在我只需让所有内容都可以在传统模式下启动(也称为使用 BIOS),这可能吗?似乎可以在 UEFI 和传统模式下启动 USB 驱动器,但是有没有一种方法可以设置所有内容,而不会弄乱我实际的 EFI 可启动配置中的任何工作?

答案1

经过大量测试和从@oldfred有用的见解开始进行更深入的调查后,我想我解决了这个问题。在这个答案中,我只想简要描述我如何实现这一目标以及我的调查结果。

我设法在我的每台电脑上启动我的双启动(Kali + AVLinux)系统,或者只启动BIOS仅能启动电喷启动启动或两者兼而有之。

执行此操作的主要要求是在 BIOS 模式和 EFI 模式下安装 grub。这可以通过使用以下方式来准备设备/磁盘来完成:GPT分区表,然后创建一个BIOS_启动分区以及设备开头的 EFI 系统分区。它们很容易创建,因为网上有大量关于创建这两种类型的分区的材料。 (例如BIOS_boot分区,EFI分区)。

我附上我的设备分区的屏幕截图,希望能更清楚地说明:

用于双启动 BIOS+EFI 的我的设备分区

我现在将主题分为电喷启动部分和BIOS启动部分

电喷引导

正如我在问题中所说,我还安装了(对于 EFI 引导模式:即引导我的 VirtualBox VM 启用 EFI*)我的双引导系统的第一个发行版(Kali Linux),只需使用 VirtualBox VM 的安装程序,其.iso文件加载为VM 光驱的内容。

安装一切顺利,除了我无法在任何机器上启动我的系统(也许除了我用于安装的同一台虚拟机,但我不完全确定)。

原因是grub-installKali 安装程序运行时将 grub 放置在我的 EFI 分区的路径中/EFI/Kali/grubx64.efi,同时,正如 @oldfred 建议的那样:

外部设备仅从 /EFI/Boot/bootx64.efi UEFI 启动。

这就是为什么我设法引导系统,将位于 EFI 分区中的引导加载程序从/EFI/Kali/grubx64.efi路径移动+重命名到/EFI/BOOT/bootx64.efi路径。

另外,进一步的调查表明,我们可以摆脱重新安装 grub 的问题(fe 按照中所示的方法)问题)并--removable在命令调用中添加参数grub-install

因此,指南上的命令将变为:

grub-install --removable /dev/sdX

这会将引导加载程序放入/EFI/BOOT/BOOTX64.EFI路径中,从而解决问题。

* 这与在支持 EFI 启动的 PC 上运行安装程序几乎相同

BIOS(传统)引导

创建 BIOS_boot 分区后,我们必须通过 package* 安装用于 BIOS 引导模式的 grub(也称为将其安装在 MBR 中)grub-pc。该过程与为 EFI 引导模式安装 grub 的过程几乎相同,除非我们不挂载 EFI 目录:

sudo mount /dev/sdXX /mnt/boot/efi

我们i386-pc在 grub-install 命令中指定目标平台:

grub-install --target=i386-pc /dev/sdX

* 实际上,除非我读到该grub-pc软件包用于在 MBR 中安装 grub(因此适用于 BIOS 引导模式)并且该grub-efi软件包用于在 EFI 分区中安装 grub(因此适用于 EFI 引导模式),否则我对此不是 100% 确定,因为我设法将 grub 安装在 EFI 分区中,并安装了 grub-pc 软件包

相关内容