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"