용어 : ESP = my FAT32 EFI 파티션.

원하는 작업 :

  • 내 ESP에 내 배포 루트 파일 시스템 (/)에 또 다른 GRUB 부트 로더를 체인로드하는 자체 포함 GRUB 설치가 있어야합니다. 현재 내 파티션에 GRUB가 설치되지 않은 여러 배포판이 있습니다. 각각은 자체 ext4 /에 완전히 설치됩니다. 나는 그들 모두가 자신의 보조 부트 로더를 갖기를 원합니다.
  • 또한 기본 ESP GRUB가 OS에서 grub.cfg로 다시 시작 / 재로드하는 것도 허용됩니다. 효과적인 체인 로딩.

내가 시도한 것 :

  • 내가 찾은 예에는 GRUB2에서 GRUB 레거시 부팅이 포함되며 그 반대도 마찬가지지만 그렇지 않습니다. UEFI 및 .efi 파일을 사용하십시오. GNU GRUB 문서에는 UEFI가 언급되어 있지 않으며 Arch / Ubuntu / Gentoo wiki는 기본 (비 체인 로딩) 설치를 설정하는 데 필요한 최소한의 정보를 제공합니다.

지금까지 :

  • grub-installgrub-mkconfig. 테스트 부팅이 작동합니다. 즉, /boot/grub 폴더가 비어 있으며 부팅 중 / 후에 ESP를 마운트 할 필요가 없습니다.
  • 두 번째 GRUB을 /boot/efi//boot/grub/에 설치하려고 시도했지만 EFI 부분이 설치되지 않습니다. grub-install 대상이 EFI 파티션이 아니라고 불평합니다. 하지만 이미 기본 GRUB가 설치되어 있기 때문에 “보조 GRUB가 ext4 rootfs에있는 것이 문제가되지 않습니까? Grub은 ext4를 읽을 수 있습니다. --force 옵션도 시도했습니다.

따라서 /boot/EFI

를 설치해도된다고 설치 프로그램을 설득하는 방법을 찾아야 할 것 같습니다.

누군가 내가 기본 GRUB를 어떻게 설치했는지 궁금하다면 grub-install에서 올바른 옵션을 사용하기 만하면됩니다. 내 ESP를 고려합니다.

답변

다른 방법이 있습니다. GRUB에 다른 항목을로드하도록 지시하는 메뉴 항목을 만들 수 있습니다. 다른 Linux 배포판과 같은 보조 grub.cfg.

예를 들어, MBR에 GRUB2를 설치 한 Gentoo Linux로 시작했습니다 (머신이 EFI에 비해 너무 오래되었습니다).

그런 다음 NixOS를 설치했습니다. grub.cfg를 “자체 / boot (Gentoo의 / boot 와는 별개)에서 생성하도록 구성했지만 GRUB를 설치하지 않고

명확하게 설명하기 위해 grub-install는 Gentoo에서 실행되었지만 NixOS가 아닙니다.

다음으로 NixOS를 부팅 할 수 있도록 Gentoo의 /etc/grub.d/40_custom 에 이것을 추가했습니다 :

#!/bin/sh exec tail -n +3 $0 # 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. menuentry "NixOS" --class gnu-linux --class gnu --class os $menuentry_id_option "nixos-0aca58bc-8fdb-4a07-aa2f-56406bcf19b7" { set root="hd0,msdos4" configfile /nixos/root/boot/grub/grub.cfg } 

키는 configfile /nixos/root/boot/grub/grub.cfg 줄입니다. GRUB에 다른 grub.cfg를로드하도록 지시합니다. 그런 다음 Gentoo에서 grub-mkconfig를 실행하여 변경 사항을 적용했습니다.

이제 부팅하고 NixOS 를 선택하면 전체 GRUB 인터페이스가 새로 고쳐집니다. OS를 부팅 할 수있는 NixOS grub.cfg를 반영합니다. 체인 로딩과 달리이 구성은 GRUB의 단일 설치를 사용합니다. 두 번째 구성 만 사용합니다.

댓글

  • 이해합니다. 이것이 제가 포인트 3에서 언급 한 내용입니다. " 자체 체인 로딩 ". 검색하는 동안이 방법을 찾았지만 ' 자신을 가리키는 다른 .efi을 (를) 체인로드하는 것을 선호하기 때문에 응답을 보류했습니다. grub.cfg. ' grub-mkimage에서 multiboot 또는 chainloader 지금까지 ' 작동하는 보조 .efi 또는 core.img.

답변

iv id =를 수동으로 설치하는 방법을 찾았습니다. 내 / “각각에 대해”2065198183 “>

. 기본 구성에서 보조 GRUB 체인 로더를 참조하는 것은 간단합니다.

menuentry "GRUB chainloader" { #Load grub on partition 7 of a gpt formatted drive. #It will reference its own modules and config. chainloader (hd0,gpt7)/path/to/bootloader/on/myOS/core.efi } 

이 보조 .efi를 만들려면 grub-mkimage grub-install는 FAT가 아닌 파일 시스템에 쓸 수 없었기 때문입니다. 구문이 매우 까다 롭고 오류가 발생하지 않습니다. 잘못된 경로를 사용하는 경우 인수를 신중하게 확인하십시오.

grub-mkimage -o /path/to/mounted/targetOS/efidir/core.efi --format=x86_64-efi "--prefix=(hd0,gpt7)/boot/grub" ext2 part_gpt 

GPT 또는 ext2 파일 시스템 모듈을 제외하려고했지만 작동하지 않았습니다. 두 개의 모듈이 내 시스템에 대한 절대적인 최소 요구 사항이었습니다 (ext2는 ext2 / 3 / 4에서 작동 함).

접두사 디렉토리는 보조 부트 로더가 모듈 폴더와 구성 파일을 찾는 곳입니다. x86_64-efi/ 폴더를 포함하는 각 OS에 대해 /boot/grub/를 만들었습니다 (/usr/lib/grub)grub.cfg OS 검사를 비활성화 한 상태에서 grub-mkconfig를 사용하여 수정할 수 있습니다 (또는 수동으로 편집).

원래 GRUB없이 각 OS를 설치했습니다. 이 방법을 사용하면 첫 번째 OS 또는 GRUB가 포함 된 LiveCD를 사용하는 모든 운영 체제에 보조 GRUB 부트 로더를 설치할 수있었습니다. 각 OS의 부팅 구성을 독립적으로 변경할 수 있으며 ESP가 마운트되지 않으므로 오염 위험이 없습니다.

설명

  • 원하는 경우 어떻게해야합니까? (hd0, gpt7) 대신 UUID를 사용 하시겠습니까? 이 경우 grub-mkimage 명령 줄은 어떻게 표시됩니까?

답변

i386-pc grub의 경우와 비슷하고 core.img 파일의 체인 로더가 작동하지 않아 “오류 : 잘못된 서명”이 발생합니다.

하지만 grub core.img 파일이 멀티 부트와 호환된다는 것을 알게되었습니다. 그래서 core.img를 다음과 같이 부팅 할 수있었습니다.

multiboot (hd0,7)/core.img boot 

그리고 성공적으로 새로운 GRUB, 모듈 및 초기 구성을 가져 왔습니다.

당신의 chainloader 명령이 non-efi grub에 대한 efi에서 실패한다고 가정합니다. 그래서이 failrue를 감지하고 boot 명령 전에 core.img에서 멀티 부트로 폴백 할 수 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다