用語:ESP =私のFAT32EFIパーティション。

必要なもの:

  • ESPに自己完結型のGRUBをインストールし、ディストリビューションルートファイルシステム(/)に別のGRUBブートローダーをチェーンロードします。現在、パーティションにGRUBがインストールされていないディストリビューションがいくつかあります。それぞれが独自のext4 /に完全にインストールされます。それらすべてに独自のセカンダリブートローダーを持たせたい。
  • プライマリESPGRUBがOSからgrub.cfgを使用して再起動/再ロードすることも許容されます。効果的にそれ自体をチェーンロードします。

私が試したこと:

  • 私が見つけた例には、GRUB2からGRUBレガシーを起動することが含まれますが、その逆もありません。 UEFIファイルと.efiファイルを使用します。GNUGRUBドキュメントにはUEFIについても言及されておらず、Arch / Ubuntu / Gentoo wikiは、基本的な(チェーンロードではない)インストールをセットアップするための最小限の情報を提供します。

これまでのところ:

  • grub-installgrub-mkconfig。テストブートは機能します。これは、/boot/grubフォルダーが空であり、ブート中/ブート後にESPをマウントする必要がないことを意味します。
  • 私は2番目のgrubを/boot/efi//boot/grub/にインストールしようとしましたが、EFIパーツがインストールされません。grub-installは、ターゲットがEFIパーティションではないと文句を言います。しかし、すでにプライマリGRUBがインストールされているので、セカンダリGRUBがext4 rootfsにあるかどうかは問題ではありませんか?Grubはext4を読み取ることができます。--forceオプションも試しました。

したがって、/boot/EFI

をインストールしても問題がないことをインストーラーに納得させる方法を見つける必要があるようです。

プライマリGRUBのインストール方法に興味がある人は、grub-installで適切なオプションを使用するだけで済みます。私のESPに関して。

回答

別の方法があります。GRUBに別のエントリをロードするように指示するメニューエントリを作成できます。別のLinuxディストリビューションからのものなどのセカンダリgrub.cfg。

たとえば、GRUB2をMBRにインストールしたGentoo Linuxから始めました(マシンはEFIには古すぎます)。

次にNixOSをインストールしました。これは、grub.cfgを独自の / boot (Gentooの / boot とは別)に生成するように構成しましたが、 GRUBをインストールせずに

明確にするために、grub-installはGentooから実行されましたがNixOSからではありません。

次に、NixOSを起動できるようにするために、これをGentooの /etc/grub.d/40_custom に追加しました。

#!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the "exec tail" line above. menuentry "NixOS" --class gnu-linux --class gnu --class os $menuentry_id_option "nixos-0aca58bc-8fdb-4a07-aa2f-56406bcf19b7" { set root="hd0,msdos4" configfile /nixos/root/boot/grub/grub.cfg } 

キーはconfigfile /nixos/root/boot/grub/grub.cfg行です。 GRUBに別のgrub.cfgをロードするように指示します。次に、Gentooからgrub-mkconfigを実行して変更を適用しました。

ここで、起動して NixOS を選択すると、GRUBインターフェイス全体が次のように更新されます。 OSを起動できるNixOSgrub.cfgを反映します。チェーンロードとは異なり、この構成ではGRUBの単一インストールを利用します。単に2番目の構成を使用します。

コメント

  • わかりました。これは、ポイント3で言及したものです。"チェーンロード自体"。検索中にこのメソッドを見つけましたが、'独自のメソッドを指す別の.efiをチェーンロードしたいので、自分自身に答えるのを延期していました。 grub.cfg。 ' grub-mkimagemultibootまたはchainloaderしかし、これまでのところ、'動作するセカンダリ.efiまたはcore.img

回答

手動でivid =をインストールする方法を見つけました各/の “2065198183”>

。プライマリ設定からセカンダリGRUBチェーンローダーを参照するのは簡単です:

menuentry "GRUB chainloader" { #Load grub on partition 7 of a gpt formatted drive. #It will reference its own modules and config. chainloader (hd0,gpt7)/path/to/bootloader/on/myOS/core.efi } 

このセカンダリを作成するには.efi使用しましたgrub-mkimage grub-installでは、FAT以外のファイルシステムに書き込めなかったためです。構文は非常に扱いにくく、エラーは発生しません。間違ったパスを使用している場合は、引数を注意深く確認してください。

grub-mkimage -o /path/to/mounted/targetOS/efidir/core.efi --format=x86_64-efi "--prefix=(hd0,gpt7)/boot/grub" ext2 part_gpt 

GPTまたはext2ファイルシステムモジュールを省略しようとしましたが、機能しませんでした。 2つのモジュールが私のシステムの絶対最小要件でした(ext2はext2 / 3/4で機能します)。

プレフィックスディレクトリは、セカンダリブートローダーがモジュールフォルダと設定ファイルを探す場所です。 x86_64-efi/フォルダー(/usr/lib/grub)からコピー)とを含むOSごとに/boot/grub/を作成しました。 grub.cfg OSプローブを無効にして(または手動で)grub-mkconfigを使用して変更できます編集してください)。

私はもともとGRUBなしで各OSをインストールしました。この方法により、最初のOSまたはGRUBを備えたLiveCDを使用して、すべてのオペレーティングシステムにセカンダリGRUBブートローダーをインストールできました。 ESPがマウントされないため、汚染のリスクがなく、各OSのブート構成を個別に変更できます。

コメント

  • 必要に応じて(hd0、gpt7)の代わりにUUIDを使用しますか?その場合、grub-mkimageコマンドラインはどのように表示されますか?

回答

実行しようとしていますi386-pc grubの場合も同様で、core.imgファイルのチェーンローダーが機能せず「エラー:無効な署名」が表示されます

しかし、grubcore.imgファイルはマルチブートに準拠していることを知りました。そのため、core.imgを次のように起動できました:

multiboot (hd0,7)/core.img boot 

新しいgrub、そのモジュール、および初期構成を正常に取得できました。

あなたのchainloaderコマンドが非efigrubのefiで失敗すると思います。そのため、この失敗を検出して、bootコマンドの前にcore.imgでmultibootにフォールバックできます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です