複数のパーティションを含むイメージファイルからチェーンロードを実行するには?

複数のパーティションを含むイメージファイルからチェーンロードを実行するには?

ディスクイメージがあります。

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

ls2つのパーティションが正しく表示され、次のものが(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:ループバックコマンドの後、検索コマンドでパーティションを見つけることができます。たとえば、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アプリケーションのすべてのパスはハードコーディングされており、絶対パスでなければならないからです。

関連情報