UEFI 부팅을 사용하여 하나의 디스크에 Debian과 CentOS를 설치하려고 합니다. 데비안이 부팅되면 아래 그림과 같은 오류가 발생합니다:
어떻게 설정하려고 했는지 설명하기 위해 파티션으로 무엇을 했는지 보여드리겠습니다. 아래는 원래 Debian 파티션의 사진입니다(CentOS "/" 마운트 지점을 위해 끝에 여유 공간을 남겨두었습니다).
실행하고 설치하니 잘 되더군요. 그런 다음 USB 드라이브를 연결하여 CentOS를 부팅하고 설치했습니다. 파티션 화면에 도달하면 다음과 같이 보입니다(수정하기 전).
그런 다음 CentOS /용 20GiB 파티션을 만들었습니다. 또한 Debian Partitions 섹션에서 /boot/efi에 대한 "마운트 지점(이미지 맨 오른쪽 참조)"을 갖도록 /boot/efi 파티션을 수정했습니다. 그러면 CentOS 파티션 섹션에 자체적으로 복사되는 것처럼 보입니다. 결과는 다음과 같습니다.
부팅한 후 CentOS용 옵션과 Debian용 옵션 두 가지가 표시됩니다. CentOS를 선택하면 잘 작동합니다. Debian을 선택하면 이 문서의 첫 번째 링크에 표시된 오류가 발생합니다. 내 질문은 왜?
내 EFI 디렉토리는 다음과 같습니다.
[root@localhost EFI]# cd /boot/efi/EFI
[root@localhost EFI]# ls
BOOT centos debian
[root@localhost EFI]# ls centos debian
centos:
BOOT.CSV fonts fwupia32.efi grub.cfg grubx64.efi MokManager.efi shimx64-centos.efi
BOOTX64.CSV fw fwupx64.efi grubenv mmx64.efi shim.efi shimx64.efi
debian:
grubx64.efi
내 /boot/efi/EFI/centos/grub.cfg는 다음과 같습니다.
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
set pager=1
if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
terminal_output console
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=5
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/00_tuned ###
set tuned_params=""
set tuned_initrd=""
### END /etc/grub.d/00_tuned ###
### BEGIN /etc/grub.d/01_users ###
if [ -f ${prefix}/user.cfg ]; then
source ${prefix}/user.cfg
if [ -n "${GRUB2_PASSWORD}" ]; then
set superusers="root"
export superusers
password_pbkdf2 root ${GRUB2_PASSWORD}
fi
fi
### END /etc/grub.d/01_users ###
### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-4b9ca680-8e47-494f-8a98-991aab9d51e6' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod xfs
set root='hd0,gpt3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 4b9ca680-8e47-494f-8a98-991aab9d51e6
else
search --no-floppy --fs-uuid --set=root 4b9ca680-8e47-494f-8a98-991aab9d51e6
fi
linuxefi /boot/vmlinuz-3.10.0-957.el7.x86_64 root=UUID=4b9ca680-8e47-494f-8a98-991aab9d51e6 ro crashkernel=auto rhgb quiet
initrdefi /boot/initramfs-3.10.0-957.el7.x86_64.img
}
menuentry 'CentOS Linux (0-rescue-6afd59629baf4fd295f2313dd51b9e9e) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-6afd59629baf4fd295f2313dd51b9e9e-advanced-4b9ca680-8e47-494f-8a98-991aab9d51e6' {
load_video
insmod gzio
insmod part_gpt
insmod xfs
set root='hd0,gpt3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 4b9ca680-8e47-494f-8a98-991aab9d51e6
else
search --no-floppy --fs-uuid --set=root 4b9ca680-8e47-494f-8a98-991aab9d51e6
fi
linuxefi /boot/vmlinuz-0-rescue-6afd59629baf4fd295f2313dd51b9e9e root=UUID=4b9ca680-8e47-494f-8a98-991aab9d51e6 ro crashkernel=auto rhgb quiet
initrdefi /boot/initramfs-0-rescue-6afd59629baf4fd295f2313dd51b9e9e.img
}
if [ "x$default" = 'CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)' ]; then default='Advanced options for CentOS Linux>CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)'; fi;
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Debian GNU/Linux (9.8) (on /dev/sda2)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-9a0b0533-9320-45f1-9b3d-0860da8822be' {
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 9a0b0533-9320-45f1-9b3d-0860da8822be
else
search --no-floppy --fs-uuid --set=root 9a0b0533-9320-45f1-9b3d-0860da8822be
fi
linux /boot/vmlinuz-4.9.0-8-amd64 root=UUID=9a0b0533-9320-45f1-9b3d-0860da8822be ro quiet
initrd /boot/initrd.img-4.9.0-8-amd64
}
submenu 'Advanced options for Debian GNU/Linux (9.8) (on /dev/sda2)' $menuentry_id_option 'osprober-gnulinux-advanced-9a0b0533-9320-45f1-9b3d-0860da8822be' {
menuentry 'Debian GNU/Linux (on /dev/sda2)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.9.0-8-amd64--9a0b0533-9320-45f1-9b3d-0860da8822be' {
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 9a0b0533-9320-45f1-9b3d-0860da8822be
else
search --no-floppy --fs-uuid --set=root 9a0b0533-9320-45f1-9b3d-0860da8822be
fi
linux /boot/vmlinuz-4.9.0-8-amd64 root=UUID=9a0b0533-9320-45f1-9b3d-0860da8822be ro quiet
initrd /boot/initrd.img-4.9.0-8-amd64
}
menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64 (on /dev/sda2)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.9.0-8-amd64--9a0b0533-9320-45f1-9b3d-0860da8822be' {
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 9a0b0533-9320-45f1-9b3d-0860da8822be
else
search --no-floppy --fs-uuid --set=root 9a0b0533-9320-45f1-9b3d-0860da8822be
fi
linux /boot/vmlinuz-4.9.0-8-amd64 root=UUID=9a0b0533-9320-45f1-9b3d-0860da8822be ro quiet
initrd /boot/initrd.img-4.9.0-8-amd64
}
menuentry 'Debian GNU/Linux, with Linux 4.9.0-8-amd64 (recovery mode) (on /dev/sda2)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.9.0-8-amd64-root=UUID=9a0b0533-9320-45f1-9b3d-0860da8822be ro single-9a0b0533-9320-45f1-9b3d-0860da8822be' {
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 9a0b0533-9320-45f1-9b3d-0860da8822be
else
search --no-floppy --fs-uuid --set=root 9a0b0533-9320-45f1-9b3d-0860da8822be
fi
linux /boot/vmlinuz-4.9.0-8-amd64 root=UUID=9a0b0533-9320-45f1-9b3d-0860da8822be ro single
initrd /boot/initrd.img-4.9.0-8-amd64
}
}
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
고쳐 쓰다- 작동하는 솔루션을 얻었지만 거기에 도달한 방식이 만족스럽지 않습니다(누군가 내 시스템이 왜 이런 식으로 종료되었는지 말해줬으면 좋겠습니다). /boot/efi/EFI/centos/grub.cfg 파일에서 수동으로 편집했습니다. 데비안 메뉴 항목(또는 하위 메뉴 항목) 아래에 "linux" 또는 initrd"로 시작하여 각각 "linuxefi" 및 "initrdefi" 줄이 있습니다. 이 grub을 수동으로 편집해야 하는 이유를 모르겠습니다. 해야 합니다. 해야 합니다. 이 문제가 발생하려면 운영 체제의 설치/설정 단계에서 매우 잘못된 문제가 발생해야 합니다.
답변1
CentOS용 스크립트는 CentOS GRUB이 Secure Boot 호환 / 키워드를 사용하고 레거시 / 지원을 무시한다는 /etc/grub.d/30_os-prober
점을 고려하지 않는 것 같습니다. (또는 GRUB 모듈로 지원이 제공될 수도 있지만 보안 부팅에서는 GRUB 모듈이 지원하지 않는 UEFI 표준 실행 파일/라이브러리 형식을 사용하기 위해 모든 실행 코드를 로드해야 합니다.)linuxefi
initrdefi
linux
initrd
반면에 데비안은 강력한 pro-free 소프트웨어(따라서 보안 부팅 방지) 입장 때문에 전통적인 linux
/ 키워드를 사용합니다.initrd
CentOS는 os-prober
필요한 변경을 하지 않고 Debian의 GRUB 구성 파일에서 구성 라인을 있는 그대로 복사한 것 같습니다. os-prober
아직 누군가가 이를 보고하지 않은 경우 CentOS에서 이 문제에 대한 버그 보고서를 제출할 수 있습니다.