UEFIでgrub2メニュー項目を一覧表示する方法

UEFIでgrub2メニュー項目を一覧表示する方法

Linuxのgrub2メニュー項目のリストを取得したい(centos 8 / fedora 32)UEFIをオンにして使用してくださいgrub2-set-default

UEFI以外の環境では、このコマンドを使用してメニューリストをインポートできます。

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

grub.cfgがuefiとは異なるパスにあることを知っています。

#non uefi cfg
/etc/grub2.cfg -> /boot/grub2/grub.cfg
#uefi cfg
/etc/grub2-efi.cfg  -> ../boot/efi/EFI/centos/grub.cfg

/etc/grub2-efi.cfg ただし、UEFI以外の環境ではすべてのメニュー項目をインポートできない場合。

[root@vm-centos centos]# grep ^menuentry /etc/grub2-efi.cfg
menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {

私は何をすべきですか?

答え1

RHEL / CentOS 8では、GRUBはblscfgで始まる新しいモジュールを使用します/boot/loader/entries/.confアイテムごとに1つのファイルが必要です。

詳細については、次を参照してください。 https://fedoraproject.org/wiki/Changes/BootLoaderSpecByDefault

これはUEFIとは関係ありませんが、MBRベースのクラシックGRUBでも使用されます。実際、この/boot/loader/entries/ディレクトリとそのファイルは、s390xやaarch64など、GRUBをまったく使用しないアーキテクチャにも存在します。

/boot/loader/entries/*.confブートエントリは数字ではなく名前で識別されます。名前は、デフォルトではパスとサフィックスを持たない個々のファイルの名前です.conf

awk以下はRHEL / Centos 8の行と非常によく似ています。

for i in /boot/loader/entries/*.conf
do 
    entryname=$(basename $i .conf)
    entrytitle=$(grep title $i | cut -f 2-)
    echo "$entryname : $entrytitle"
done

デフォルト項目は、(従来のBIOS / MBRシステムの場合)または(UEFIシステムの場合)設定で識別されますsaved_entry=。デフォルトのインストールでは、両方のファイルがBIOS / MBRとUEFIの起動可能システムに同じ内容で存在しますが、起動時にデフォルト以外の項目を選択した場合、GRUBはファイルの1つのみを変更します。/boot/grub2/grubenv/boot/efi/EFI/redhat/grubenv

このコードスニペットは、現在選択されているブートエントリを識別するために使用できます。

if [ -d /sys/firmware/efi ]
then
    envfile=/boot/efi/EFI/redhat/grubenv
else
    envfile=/boot/grub2/grubenv
fi
bootdefault=$(awk -F '=' '/^saved_entry/{print $2;}' $envfile)
echo "Default boot entry name: $bootdefault"

関連情報