web-dev-qa-db-ja.com

GRUB2がモジュールをロードしていません

カスタムGRUB2構成で独自のMultiboot-USBスティックを作成しようとしています。私は基本的に https://wiki.archlinux.org/index.php/Multiboot_USB_drive の指示に従って、EFIモードでUSBスティックにGRUB2をインストールしました。

  • 1つのEFIパーティション(100MB)とEXT4パーティションを持つフォーマットスティック
  • パーティションをある場所にマウントする
  • grub-install --target=x86_64-efi --recheck --removable --efi-directory=/EFI_MOUNTPOINT --boot-directory=/DATA_MOUNTPOINT/bootの実行

だから私はgrub.cfgを含むEFIパーティションを持っています

search.fs_uuid <uuid> root hdX,gptY 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

/ boot/grubを含むフォルダが1つだけのブートパーティション

  • フォント(フォルダー)
  • ロケール(フォルダー)
  • x86_64-efi(フォルダー)
  • grubenv(ファイル)

これは、いくつかのmenuentryを含む独自のgrub.cfgを/ boot/grubに書き込むことができ、そのエントリから起動できる限り機能しています。しかし、モジュールをロードできません。コマンドラインに入ると、たとえばタイピング

insmod ntfs

絶対に何もしません。エラーメッセージなどはありません。モジュールがロードされないだけです(lsmodで確認)。私も絶対アドレスを試しました

insmod (hdX,gptY)/boot/grub/x86_64-efi/ntfs.mod

同じ結果になります。たとえば、.modファイルを標準出力にキャットできるため、パスは正しいです。

私が実際にできることは、モジュールを削除することです。例えば。

rmmod btrfs
rmmod btrfs

2行目にエラーメッセージが表示されるため、モジュールbtrfsが削除されます。これは、lsmod出力によって確認されます。ただし、入力(btrfsがすでに削除されている場合)

insmod btrfs (or absolute addressing like above)
rmmod btrfs

2行目にエラーメッセージが表示されるため、最初の行は明らかに効果がありませんでした。

何がうまくいかないのか分かりますか? mod-folderをEFI-partitionにコピーしようとしましたが、うまくいきませんでした...

前もって感謝します

1
gruber235

私はいくつかの異なる「マルチブートUSB」オプションを試しました。動的であるため、これが好きです。ISOファイルを追加するだけで、新しいISOファイルが検索され、メニューに追加されます。 GRUBメニューを構成していません。LinuxMintDebianEdition3で問題が発生しましたが、これで動作します。彼のスクリプトをいつでも見て、どのように動作するかを確認できます。

幸運を。

ここにサイトがあります:

https://github.com/mpolitzer/grub-iso-multiboot

2
MJC

わかりました。これはセキュアブートが原因であることがわかりました。 https://forums.opensuse.org/showthread.php/531587-is-GRUB-deliberately-broken-in-openSUSE によると

セキュアブートが有効になっている場合、grub2-efiはセキュアブート違反を防ぐために「insmod」を内部的に無効にします。また、「grub2」はEFIパーティションの「grub.efi」からロードされており、通常必要なモジュールがすでにプリロードされています。さらに、セキュアブートが有効になっている場合、「linux」は許可されません。「linuxefi」(署名をチェックする)を使用する必要があります。

そしてgrub-install--helpは

--no-uefi-secure-boot:システムが現在使用を開始している場合でも、UEFIセキュアブートで使用可能なイメージをインストールしません。このオプションはEFIでのみ使用できます。

したがって、現在のマシンがセキュアブートで起動されている場合、grub-installはそのバージョンのGRUBをインストールし、モジュールを挿入できません。私の場合は不思議なことにGRUB =モジュール「linux」がロードされましたが、モジュール「linuxefi」はロードされていません。とにかく、更新されたセットアップは次のとおりです。

  • 1つのEFIパーティション(100MB)とEXT4パーティション(GRUBに関係のないすべてのデータパーティションとして)を持つフォーマットスティック
  • EFIパーティションをマウントする
  • grub-install --target=x86_64-efi --recheck --removable --no-uefi-secure-boot --efi-directory=/EFI_MOUNTPOINT --boot-directory=/EFI_MOUNTPOINT/bootを実行します

自分のマシンでセキュアブートを無効にできませんが、.efiファイルをセキュアとしてマークします。そのセットアップを使用する(および/EFI/BOOT/BOOTX64.EFIをコンピューターEFIでセキュアとしてマークする)ことは私にとってはうまくいき、GRUBは完全に機能するようになりました。私のオリジナルのように--boot-directory=/DATA_MOUNTPOINT/bootを使用するセットアップによりGRUBがクラッシュし、レスキューモードに入りました。

最近のセキュアブートがどれほど一般的であるかを考えると、この動作がGRUB2マニュアル全体のどこにも記載されていないのを見るのはかなり面倒です。

1
gruber235

この場合のために特別に設計された Super UEFIinSecureBoot Disk を使用できます。セキュアブートモードでモジュールをロードするだけでなく、ファイル検証機能を乗っ取って任意の信頼できないEFIファイルをロードする変更されたブートローダーが含まれています。

0
ValdikSS