別のパーティションでgrubエントリを集計する方法は?

別のパーティションでgrubエントリを集計する方法は?

/dev/sdaに複数のLinuxカーネルがある「デフォルト」GRUBがあり、/ dev/sdb2にセカンダリLinuxディストリビューションがあるとします。

コンピュータが/dev/sda GRUBから起動します。では、/dev/sdb2でカーネルをどのように起動しますか?

/ dev / sdaのディストリビューションでgrubを更新すると、OS-proberは/ dev / sdb2の内容を検出し、それに応じてGRUBメニューを入力します(/dev/sda)/boot/grub/grub.cfg

ただし、これは新しいカーネルをインストールしたり/dev/sdb2ディストリビューションで起動オプションを変更したときに更新されますが、デフォルトの(/dev/sdb2)/boot/grub/grub.cfggrub.cfgは更新されないため、不便です。

プライマリGRUBにセカンダリGRUBのエントリを読み込んでマージさせるにはどうすればよいですか?

答え1

文書化されていないGRUBコマンドがあります。手動は設定ファイルを正確に解析し、エントリを抽出し、残りの設定を無視しますextract_entries_source。これにより、セカンダリディストリビューションのGRUBメニュー項目に対するすべての変更がデフォルトのGRUBメニューに自動的に統合されます。

基本(「ホスト」)ディストリビューションから

カスタム項目を追加/etc/grub.d/40_custom:

# A dummy entry to mark the separation
menuentry "Extracted from /dev/sdb2" {
        true
}

# the following if for MBR disk, change to part_gpt if necessary
insmod part_msdos
# adapt with appropriate file system module
insmod ext2
# replace aaaa-bbbb-cccc with actual partition UUID
search --fs-uuid aaaa-bbbb-cccc --set slavegrub --no-floppy
extract_entries_source ($slavegrub)/boot/grub/grub.cfg

パーティション(ファイルシステム)のUUIDはを介して取得できますblkid

また、GRUBがOS-proberを使用してメニューを自動的に埋めるのを防ぐ必要があります。これはグローバルに構成されており、次のコマンドを使用して/etc/default/grubグローバルまたは特定のパーティションに対してオプションで無効にできます(参照:GRUB_DISABLE_OS_PROBERGRUB_OS_PROBER_SKIP_LISTGRUBマニュアル)。

そうすることができますupdate-grub

二次分布から

/boot/grub/grub.cfgファイルはその項目を読み取るだけで実際には実行されないため、何もする必要はありません。デフォルトのGRUBメニューに統合すると、これらの項目は重複するため、オペレーティングシステム検出器を完全に無効にすることができます。

関連情報