UEFI 只识别 /dev/sda,但不识别 /dev/sda2,因为它是可引导的

UEFI 只识别 /dev/sda,但不识别 /dev/sda2,因为它是可引导的

我有两个可启动分区,/dev/sda并且/dev/sda2.但是,当我重新启动 PC 时,UEFI 引导系统仅识别该/dev/sda分区。

我该如何解决?我将 boot 和 esp 标志设置为/dev/sda2,其中包含 Manjaro ISO。/dev/sda包含 Solus ISO。我使用的是 UEFI 引导系统,而不是 Legacy 引导。我怎样才能将其设置为识别/dev/sda2而不是/dev/sda

这是一张图片,如果它能更好地表达我要输入的内容。

分区布局

答案1

UEFI 规范要求固件支持 FAT32 进行 EFI 系统分区,但也允许支持其他文件系统类型。例如,Apple 设备在固件级别支持 HFS+,显然至少有一些华硕主板除了 FAT32 之外还支持 NTFS 和 ISO9660。

看来您最初已将 Solus ISO 写入/dev/sda,这是一个全磁盘设备,因此映像必须包含其自己的分区表,从而有效地/dev/sda1为您创建。这就是isohybrid准备好的 ISO 映像的作用 - 如果没有这种特殊的准备,ISO 在写入类似 HDD 的存储设备时将根本无法启动。

从技术上讲,该isohybrid命令利用 iso9660 格式的灵活性为映像添加分区表前缀(MBR 或 GPT 样式),然后进行排列,以便除了作为整体有效的 ISO 映像外,还可以将其解析为原始磁盘映像,其中包括分区表和(通常)包含 ISO9660 文件系统的单个分区。

如果 Manjaro ISO 也已isohybrid准备好,它还包含自己的分区表。如果您创建了/dev/sda2ISO 并将其写入其中,那么分区内现在就有一个分区表 - 这绝对是不正常的。 Linux 可以处理它(至少在losetup和/或kpartx命令的帮助下),但如果系统固件无法理解它,我一点也不会感到惊讶。

(据我所知,允许 ISO 映像也被视为功能性 HDD 映像的安排没有正式名称 - 但这isohybrid似乎是第一个实现它的工具。)

您当前的分区方案sda总共可以用三种方式解释:

  1. “超级软盘”配置:将有效的 ISO9660 文件系统 (Solus) 写入整个磁盘设备sda,在文件系统结束后有一些未定义的垃圾(实际上是 Manjaro ISO)
  2. 明显有效的 GPT 分区表,表明存在两个分区:一个 ISO9660 文件系统 (Solus) 和第二个 ISO9660 文件系统 (Manjaro)。
  3. 超级奇怪的选项:GPT 分区表指示存在两个分区:ISO9660 文件系统 (Solus) 和包含其他分区表,定义一个带有 ISO9660 文件系统的分区 (Manjaro)

看来您的系统固件将在 #2 之前测试情况 #1,因此更喜欢解释 #1。不幸的是,您可能无法采取任何措施来覆盖它。如果您的固件允许您访问 UEFI shell,您可以使用其map命令来查看固件如何查看您的磁盘...但不一定允许您修改它。

据我所知,没有固件或操作系统会自动接受解释 #3,但使用 Linux,如果您需要做这样的事情,您可以很容易地用来kpartx -a /dev/sda2解析第二个分区表并生成一个设备来访问它。/dev/mapper/sda2p1

(在处理使用分区设备上的 VM 系统映像设置的 Xen VM 时,您可能会发现这样的嵌套分区结构:虽然 VM 的系统磁盘映像位于分区上,但 VM 将其视为整个磁盘,因此操作系统安装程序将对其进行分区。现在,如果您必须修改在早期启动时挂起的虚拟机中的某些文件以使其再次成功启动,您将需要能够像我这样处理二阶分区。上周就做了类似的事情!)

相关内容