/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.cfg
grub.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_PROBER
GRUB_OS_PROBER_SKIP_LIST
GRUBマニュアル)。
そうすることができますupdate-grub
。
二次分布から
/boot/grub/grub.cfg
ファイルはその項目を読み取るだけで実際には実行されないため、何もする必要はありません。デフォルトのGRUBメニューに統合すると、これらの項目は重複するため、オペレーティングシステム検出器を完全に無効にすることができます。