用語:ESP = FAT32 EFIパーティション。
したい:
/
) 。現在、パーティションにGRUB=がインストールされていないディストリビューションがいくつかあります。それぞれが独自のext4 /
に完全にインストールされています。すべてのディストリビューションに独自のセカンダリブートローダーが必要です。私が試したこと:
これまでのところ:
grub-install
およびgrub-mkconfig
を使用してインストールしました。テストブートは機能します。これは、/boot/grub
フォルダが空で、ESPは、起動中/起動後にマウントする必要はありません。/boot/efi/
と/boot/grub/
に2つ目のgrubをインストールしようとしましたが、EFI部分がインストールされず、grub-install
はターゲットがEFIパーティションではないと不平を言っています。しかし、私はすでにプライマリGRUB=がインストールされているので、セカンダリGRUBがext4 rootfsにあるかどうかは問題ではありませんか?Grubはext4を読み取ることができます。 --force
オプションも試してみました。したがって、grubx64.efi
の下に/boot/EFI
をインストールしてもよいことをインストーラに納得させるいくつかの方法を見つける必要があるようです...
私がプライマリGRUBをどのようにインストールしたかについて誰かが興味があるなら、それは私のESPに関してgrub-install
で正しいオプションを使用することの問題でした。
.efi
に手動で/
を手動でインストールする方法を見つけました。プライマリ設定からセカンダリ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で動作します)。
プレフィックスディレクトリは、セカンダリブートローダーがモジュールフォルダと設定ファイルを探す場所です。そのため、/boot/grub/
フォルダを含む各OSのx86_64-efi/
を手動で作成しました(/usr/lib/grub)
およびgrub.cfg
からコピーしました。OS-でgrub-mkconfig
を使用して変更できますプローブを無効にします(または手動で編集します)。
私は最初に各OSをGRUBなしでインストールしました。この方法では、最初のOSまたはGRUBを使用したLiveCDを使用して、すべてのオペレーティングシステムにセカンダリGRUBブートローダーをインストールできました。各OSのブート構成を個別に変更できます。ESPはマウントされないため、汚染のリスクはありません。
別の方法もあります。GRUBに、別のLinuxディストリビューションなどの別のgrub.cfgをロードするように指示するメニューエントリを作成できます。
たとえば、Gentoo Linuxから始めて、GRUB2をMBRにインストールしました(マシンはEFIには古すぎます)。
次に、独自のgrub.cfgを生成するように構成したNixOSをインストールしました/ 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をロードするように指示します。次にgrub-mkconfig
Gentooから変更を適用します。
ここで、起動してNixOSを選択すると、GRUBインターフェース全体が更新され、NixOS grub.cfgが反映されます。 OSを起動できます。チェーンロードとは異なり、この構成ではGRUBの単一のインストールを利用し、2番目の構成を使用します。
私はi386-pc grubに対して同様のことを行おうとしていますが、core.imgファイルのチェーンローダーが機能せず、「エラー:無効な署名」が表示されます
しかし、grub core.imgファイルがマルチブートに準拠していることを知っていたので、次のようにcore.imgを起動できました。
multiboot (hd0,7)/core.img
boot
そして、新しいGRUBを正常に取得します。それは、モジュールと初期構成です。
私はあなたのチェーンローダーコマンドが非efi grubのefiで失敗するので、この失敗を検出して、bootコマンドの前にcore.imgでマルチブートにフォールバックできると思います。