用語:ESP =私のFAT32EFIパーティション。
必要なもの:
- ESPに自己完結型のGRUBをインストールし、ディストリビューションルートファイルシステム(
/
)に別のGRUBブートローダーをチェーンロードします。現在、パーティションにGRUBがインストールされていないディストリビューションがいくつかあります。それぞれが独自のext4/
に完全にインストールされます。それらすべてに独自のセカンダリブートローダーを持たせたい。 - プライマリESPGRUBがOSからgrub.cfgを使用して再起動/再ロードすることも許容されます。効果的にそれ自体をチェーンロードします。
私が試したこと:
- 私が見つけた例には、GRUB2からGRUBレガシーを起動することが含まれますが、その逆もありません。 UEFIファイルと.efiファイルを使用します。GNUGRUBドキュメントにはUEFIについても言及されておらず、Arch / Ubuntu / Gentoo wikiは、基本的な(チェーンロードではない)インストールをセットアップするための最小限の情報を提供します。
これまでのところ:
-
grub-install
とgrub-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番目の構成を使用します。
コメント
回答
手動で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にフォールバックできます。
.efi
をチェーンロードしたいので、自分自身に答えるのを延期していました。 grub.cfg。 'grub-mkimage
をmultiboot
またはchainloader
しかし、これまでのところ、'動作するセカンダリ.efi
またはcore.img
。