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
항목당 하나의 파일이 있어야 합니다.
자세한 내용은 다음을 참조하세요. 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에서는 파일 중 하나만 수정합니다./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"