在外部硬盘驱动器上启动 Ubuntu 时出现问题

Dar*_*ane 5 bootloader external-hdd uefi system-installation

我的 Ubuntu 安装遇到了这个非常奇怪的问题。我在外部硬盘(Seagate 2 TB usb3)上安装了 Ubuntu,一切看起来都很正常。但是,当我拔下外部硬盘驱动器并重新插入并启动计算机时,我无法从该外部硬盘驱动器启动。你知道我该如何解决这个问题吗?谢谢!

注意:我知道我可以通过启动 bootrepair 实用程序来修复启动,但这不是我每次拔下外部硬盘驱动器时都想做的事情。注2:更换硬盘不是我想做的事情。我之前安装过 CentOS,效果非常好。

Rod*_*ith 3

如果计算机在 EFI 模式下启动,正如您的“UEFI”标签和症状所暗示的那样,那么您应该首先了解问题的原因:外部媒体通常使用EFIEFI/BOOT/bootx64.efi上的默认/后备启动文件名启动x86-64/AMD64 系统上的系统分区 (ESP)。大多数操作系统安装到内部磁盘,使用存储在 NVRAM 中的自定义条目启动。外部媒体也可以使用此类条目启动;但某些 EFI 会删除引导时看不到的条目,因此,如果在系统引导另一个操作系统时拔下外部介质,则外部介质的自定义条目可能会消失。

我想到了三种解决方案:

  • 最直接的解决方案是移动/重命名引导加载程序。Ubuntu 将其引导加载程序安装在 ESPEFI/ubuntu/shimx64.efiEFI/ubuntu/grubx64.efi,ESP 通常安装/boot/efi在 Ubuntu 中。EFI/ubuntu将“在 ESP 上”重命名为EFI/BOOT“在 ESP 上”。然后您必须重命名shimx64.efibootx64.efi. (如果您的系统不使用安全启动,您可以选择重命名grubx64.efibootx64.efi而不是重命名shimx64.efi。)此解决方案的优点是您的外部磁盘应该可以在与原始计算机具有相同体系结构的大多数基于 EFI 的计算机上启动。
  • 将我的rEFInd 启动管理器安装到内部磁盘的 ESP 并将其设置为默认启动程序。您可以在 Ubuntu 中通过从 卸载外部 ESP /boot/efi、将内部 ESP 安装到/boot/efi并安装 Debian 软件包(但不是PPA 版本)来执行此操作。不要编辑。/etc/fstab以这种方式设置后,rEFInd 应该在每次启动时启动,即使您的外部磁盘已拔出;但由于 rEFInd 在每次启动时都会构建启动列表,忽略 NVRAM 条目,因此 Ubuntu 条目仅在插入外部磁盘时才会出现。该解决方案具有每次启动适应性的优点。您甚至可以设置 rEFInd 的默认值,以便在插入外部磁盘时 Ubuntu 成为默认启动选项,但在移除磁盘时 Windows 占据首位。需要注意的是:如果您使用安全启动,则必须跳过一些额外的步骤才能使其正常工作。在安装 rEFInd之前将目录树从外部 ESP复制EFI/ubuntu到内部 ESP ,然后从内部 ESP 中删除,应该可以完成这项工作。EFI/ubuntu
  • 您可以将 GRUB 重新安装到内部硬盘上的 ESP。为此,您需要/boot/efi从 Ubuntu 卸载,将内部磁盘的 ESP 挂载到/boot/efi,然后重新安装 GRUB。/etc/fstab您可能也想更新您的。不过,这种方法可能很棘手;某些 GRUB 配置依赖于 中的 GRUB 配置文件/boot/grub,如果您这样做,/boot则还需要位于内部磁盘上,否则当您拔出该磁盘时 GRUB 将停止工作,这意味着您将无法启动除通过使用计算机的内置启动管理器。我没有关注 Ubuntu 存储 GRUB 配置文件的详细信息,所以我不确定您遇到这个问题的可能性有多大。

就我个人而言,我会选择前两个解决方案之一,因为我grub.cfg现在不太确定 Ubuntu 将其文件存储在哪里。如果您知道文件与 GRUB 存储在同一 ESP 上,或者您愿意/boot在内部磁盘上创建分区,则第三个选项可能是可行的。