web-dev-qa-db-ja.com

iso内でEFI実行可能ファイルを呼び出して、uEFIを介してisoファイルを起動します。

複数のisoファイルを起動するために使用できるUSBスティックを作成したいと思います。 uEFIを通じてこれを実行したいと考えています。

USBスティックは次のようになります。

/EFI
  /bootx64.efi
  /something.conf
/isos
  /foo.iso
  /bar.iso
  ...

ここで、/isosは、uEFIブート可能isoファイルの束を保持しています。私が理解していることから、これらのisosには、uEFIブーローダーが通常実行する/EFI/BOOT<some Arch>.efiファイルがあります。

ドライブの/EFI/bootx64.efiは、efiブーローダーを特定するためのもので、/EFI/something.confはその構成ファイルです。

私が必要としているのは、isoファイルの1つで何らかの方法で/EFI/BOOT<some Arch>.efiを呼び出すことができるuEFI実行可能ファイルです。これが理論的に可能かどうかはわかりません。

GRUB2でも同様のことができることは知っていますが、Linuxイメージ、そのオプション、およびinitrdファイルを指定する必要があります。これは、ISOごとに異なり、まったく機能しない場合があります。私の希望は、/EFI/BOOT<some Arch>.efiを呼び出すことにより、これらを指定する必要がなく、1つのレシピで任意のISOイメージを起動できることです。

私の質問です:isoファイル内にあるEFI実行可能ファイルを呼び出すことができるuEFIブートローダーはありますか?

6
Boris Bera

これはすべてのISOで機能するわけではありませんが、syslinuxから [〜#〜] memdisk [〜#〜] を使用して、ISOをRAMDISKイメージとしてメモリにコピーできます。 BIOS呼び出しはRAMDISKを認識し、LinuxもRAMDISKを認識します。これを行うには、syslinux.efiと関連ファイルをEFI/syslinuxのようなEFIシステムパーティション(ESP)のどこかにコピーする必要があります。次に、/EFI/syslinux/syslinux.cfgで、ISOファイルの一連のmemdiskメモリオプションを MEMDISKページ の例の行に沿って作成します。

1
user3188445

はいといいえ。起動前環境grub、iPXEなど)で起動できますが、これを行うと本当に複雑になります。ほとんどのライブディスクには、あなたが話しているファイルがありません。ほとんどのiso-hybridディスクが行うことは、ここの他の回答で説明されているようなものです-実際の実行可能ファイルがRAMディスクのループデバイスにあるイメージファイルをマウントし、その後そのカーネルを呼び出します。その複雑さのすべてのポイントは、BIOSシステムとの互換性であると思われます。それがあなたの懸念事項ではない場合は、各ISOからいくつかのファイルをプルして、直接ブートする方が良いでしょう。 EFIシステムの場合-その場合、ファームウェアはブートローダーです。

だからあなたが欲しいのはFATフォーマットのUSBスティックです。問題のisosをマウントし、x86を見つける.sfsルートイメージファイル、それらのinitramfsとカーネルを見つけます(おそらくisoマウント内に別のイメージをループマウントする必要があります)-そしてそれはそれについてです。 LinuxカーネルはEFIで実行可能です。ファームウェアでカーネルを実行できるため、ブートローダーは必要ありません。カーネルの最初のルートファイルシステムは、initramfsイメージからマウントされます。次は.sfsアーカイブです。それがどのように機能するかです。

ここでは漠然としていますが、Arch Linuxインストールメディア here で同様のことを行う詳細なウォークスルーがあります。

(プロセスは一般的に分布によってほとんど変わりません)

1
mikeserv

ISOから直接起動する場合、Linuxカーネルがロードされると、ISO内からsquashfsを取得する必要があります。これを行うには、LinuxカーネルとスクリプトでISOをループデバイスとしてマウントする必要があります。これを行うには、ISOファイルのパスとファイル名を知っている必要があります。フルパスは通常、カーネルパラメータで指定されます。 iso-scan/filename=/images/ubuntux64.iso

一部のUbuntu ISOには/boot/grub/loopback.cfgファイルが含まれており、grub2変数にはISOファイルの完全パスが事前に設定されている必要があります。

したがって、これらのISOファイルを使用して、それらを起動する一般的な方法があります。ISOファイルの完全パスを使用してgrub2変数を設定し、loopback.cfgファイルを実行するだけです。

そのため、grub2.cfgフォルダ内のすべてのISOファイルをリストし、ユーザーがそれらの1つを選択して起動できるようにする/imagesファイルを作成することが可能です。唯一の問題は、/ boot/grub/loopback.cfgファイルを含める必要があり、Ubuntu以外のISOにはほとんど含まれていないことです。

より多くのディストリビューション開発者のみがISO内にloopback.cfgファイルを含める場合、必要なものが可能になります!

http://www.rmprepusb.com/tutorials/136_uefi_ubunt が役立つ場合があります。また http://rmprepusb.blogspot.co.uk/2017/02/make-generic-grub2-boot-menu-using.html

1
SSi