grub2를 사용하여 syslinux 체인 로딩

grub2를 사용하여 syslinux 체인 로딩

필요한 것에 따라 레거시 BIOS 또는 eufi를 부팅하기 위해 syslinux/isolinux 하이브리드 CD iso를 만들었습니다. 레거시 바이오스 부분은 잘 작동하며 수년 동안 작동해 왔습니다. 저는 최신(6.0.3) 버전의 syslinux를 사용하고 있습니다. 나는 테스트처럼 eufi 부분을 부팅하기 위해 rhel7 bood CD에서 얻은 rhel7 efiboot.img를 사용했습니다. UEFI BIOS가 있는 VM에서 이 CD iso를 부팅할 수 있습니다.

이것은 나를 grub2 쉘로 이동시킵니다. 이는 아직 사용 가능한 grub.cfg를 생성하지 않았기 때문에 예상되는 동작입니다(이미지 파일과 함께 제공된 기본 쉘일 뿐입니다). 그래서 최소한 이 CD를 UEFI 모드로 부팅할 수는 있습니다.

저는 syslinux를 체인로드할 수 있는지(그리고 어떻게) 알아보고 레거시 BIOS에 사용하는 메뉴를 로드할 수 있는지 확인하기 위해 grub2 쉘을 통해 syslinux.efi를 체인로드하려고 합니다.

나는 grub2 명령의 다양한 조합을 사용해 보았지만 무엇을 시도하든 항상 이 오류가 발생했습니다. 이 오류를 검색해도 유용한 정보가 많이 제공되지 않습니다.

grub> set root='(cd0)'
grub> chainloader /syslinux/efi/syslinux.efi
grub> boot
Failed to locate root device to prep for file operations & ADV initialization
error: unknown error
grub>

이것이 grub2 또는 syslinux.efi 파일의 문제인지 아니면 완전히 다른 문제인지 궁금합니다.

제가 사용하고 있는 efiboot.img는 uefi에서 작동하는 것으로 알려진 CD에서 가져온 것이기 때문에 문제가 될 것이라고는 생각하지 않습니다.

"chainloader" 명령은 파일을 grub2가 로드하는 데 잠재적으로 사용할 수 있는 것으로 간주한다는 점에 유의하세요. 다른 파일을 사용하거나 존재하지 않는 파일을 사용하면 다음 오류가 발생합니다.

grub> chainloader /isolinux/efi/libmenu.c32
error: cannot load image.
grub> chainloader /isolinux/efi/doesnotexist
error: file 'isolinux/efi/doesnotexist' not found.

2019년 8월 9일 수정

나는 이것이 실제로 syslinux의 현재(6.03) 릴리스에서는 불가능하다고 생각합니다. 해결 방법으로 내가 한 일은 rhel7 부팅 이미지를 사용하고 EFI 디렉터리를 복사한 후 이를 기반으로 레거시 BIOS 모드뿐만 아니라 uefi 모드에서도 부팅되는 부팅 가능한 하이브리드 CD를 만드는 것입니다. 부팅 메뉴를 만들려면 EFI/BOOT/grub.cfg 파일을 필요에 맞게 조정하면 됩니다. 나는 이것이 실제로 gummiboot/systemd-boot를 사용한다고 생각합니다. UEFI 네트워크 부팅을 구성하는 데에도 동일한 방법을 사용했습니다.

관련 정보