如何从包含多个分区的图像文件进行链式加载?

如何从包含多个分区的图像文件进行链式加载?

我有一个磁盘映像:

Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End    Size   File system  Name                  Flags
 1      1049kB  262MB  261MB  fat16        MemTest86             legacy_boot, msftdata
 2      263MB   524MB  261MB  fat16        EFI System Partition  boot, esp

在 grub 控制台中我做了:

loopback loop (some partition)/memtest.img

ls正确显示2个分区(loop,gpt2)(loop,gpt1) ls (loop,gpt2)/efi/boot/显示:

Benchmark  blacklist.cfg  BOOTIA32.efi  BOOTX64.efi  mt86.png  unifont.bin

但是,如果我执行以下操作,则会出现错误not a valid root device

root=(loop,gpt2)
chainloader (loop,gpt2)/efi/boot/BOOTX64.efi

我还需要做什么才能正确链加载引导加载程序?

更新1:在loopback命令之后,search命令可以找到分区。例如 ls (loop,gpt2) 显示 UUID E64D-A5AA。search -u E64D-A5AA展示loop,gpt2

答案1

除非链加载的 efi 和内核支持某种挂载磁盘映像的方式,否则此操作是不可能的。

grub环回启动过程是这样的:

  1. grub 挂载包含磁盘映像的真实硬件分区
  2. grub 环回磁盘映像
  3. grub 在该映像中运行 efi 应用程序。此时,grub 将所有控制权交给了 efi 应用程序。 efi 不知道在哪里可以找到包含磁盘映像的硬件分区。即使它具有此功能,它也不知道如何安装磁盘映像。因此,从这个阶段开始,一切都无法继续。

在现代的 livecd 中,有一些内核选项允许您告诉它在哪里找到图像并且它们可以挂载图像。但是 grub 必须直接运行内核,而不是应该启动内核的 efi 应用程序。因为efi应用程序中的每个路径都是硬编码的并且需要是绝对路径。

相关内容