マルチブートLinux LiveUSBでGRUBにモジュールを見つけさせる方法は?

マルチブートLinux LiveUSBでGRUBにモジュールを見つけさせる方法は?

背景

(タイトルにスキップ=problem LiveUSB、ISO、GRUB2などの専門家の場合)

マルチブート/マルチISO Linux LiveUSBを設定しています。詳細ここ、複数のホスト(たとえば、起動する必要があると判断したすべてのPC)で使用しようとしています。プロセスは簡単に見えます。

  1. 設定してください開発ホスト:つまり、LiveUSBを使用して起動するボックスではなく、LiveUSBを作成するために使用するボックスです。
  2. USBドライブのインポート/作成
    1. 起動したいすべてのISOに十分大きいサイズ
    2. 起動可能
    3. 持つGRUB2 インストール済み
  3. 目的のISOを指定した場所に簡単に配置します。
  4. 編集する/boot/grub/grub.cfg
    1. グローバル変数@top(つまり、menuentrys上)を設定します。root
    2. menuentry各ISOに対して1つ以上を作成します。

主な問題は、各ISOに対してmenuentry正しく起動するファイルを1つ以上生成することです。これは簡単に見える:

  1. ISOインストール:
    1. ISOの構造を確認してください。対応するgrub.cfg、、、 (またはGRUB構成、初期RAMdiskイメージinitrd*vmlinuzおよびカーネルイメージと呼ばれるすべて)へのパスを取得します。
    2. grub.cfgISOからmenuentry
  2. それぞれ作ろうmenuentry
    1. ISOブートパスの設定
    2. loopbackISOを使用したデバイスの作成
    3. ISOに提供されているパスの代わりにループバックデバイスのパスを使用してくださいgrub.cfg
      1. initrd /casper/initrd.lz->initrd (loop)/casper/initrd.lz
      2. linux /live/vmlinuz->linux (loop)/live/vmlinuz
  3. LiveUSBをテストしてください:
    1. 開発ホストにまだインストールされている間:grub-script-check精神健康のために:-)
    2. umount開発ホストで
    3. 各テストホストに対して、次の操作を行います。
      1. 電源が切れたテストホストに接続する
      2. 電源オン!

質問

多くのISOは、grub.cfg「実際に」起動する前にビデオを設定しようとしています。すべて少しずつ異なる動作をするため、各ISOのビデオコードを対応するmenuentryISOに挿入します。しかし、これまで私が使用したISOはgrub.cfgおおよそ次のようになります。

if loadfont /path/to/font/file ; then
  set gfxmode=auto
  insmod efi_gop
  insmod efi_uga
  insmod gfxterm
  terminal_output gfxterm
fi
# usually followed by more menu and background tweaking

良いニュースは私ですできる起動時にフォントファイルのパスを決定します。言い換えれば、loadfont幸せです。悪いニュースは、一度if近所に来たとき、

  • モジュールの1つだけがロードされます。
  • Casper(UbuntuベースのMint、LMDE1など)またはDebian Live(Clonezilla、LMDE2など)を使用しているISOにも同じ問題があります。

GRUBに検索させる方法みんな基準寸法?

サンプルコード

Clonezillaのin-ISOは以下/boot/grub/grub.cfgにのみ配信されます/EFI/boot/grub.cfg

# This file is for compatibility to Ubuntu Linux's uEFI secure boot. 
# The real config file for grub is /EFI/boot/grub.cfg.
configfile /EFI/boot/grub.cfg

私のLiveUSB /boot/grub/grub.cfg(すべてのISOの外側)には、次のコードが含まれています。

# isofile_abspath==path to the ISO from the root of my LiveUSB.
set isofile_abspath='/ISOs/clonezilla-live-2.4.2-10-amd64.iso'
set root=(hd0,1)
loopback loop ($root)$isofile_abspath
...
set clonezilla_prefix='(loop)/EFI/boot'
...
set loadfont_fp="$clonezilla_prefix/unicode.pf2"
echo -e "About to 'loadfont $loadfont_fp' ..."
if loadfont "$loadfont_fp" ; then
  set gfxmode=auto
  echo -e 'about to `insmod efi_gop` ...'
  insmod efi_gop
  echo -e 'about to `insmod efi_uga` ...'
  insmod efi_uga
  echo -e 'about to `insmod gfxterm` ...'
  insmod gfxterm
  echo -e 'about to `terminal_output gfxterm` ...'
  terminal_output gfxterm
fi
echo -e 'Done loadfont.'

開始結果:

About to 'loadfont (loop)/EFI/boot/unicode.pf2' ...
about to `insmod efi_gop` ...
error: file not found.
about to `insmod efi_uga` ...
error: file not found.
about to `insmod gfxterm` ...
about to `terminal_output gfxterm` ...
error: no suitable mode found
Done loadfont.

ベストアンサー1

おすすめ記事