용어 : 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-install
및grub-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의 단일 설치를 사용합니다. 두 번째 구성 만 사용합니다.
댓글
답변
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에서 멀티 부트로 폴백 할 수 있습니다.
.efi
을 (를) 체인로드하는 것을 선호하기 때문에 응답을 보류했습니다. grub.cfg. 'grub-mkimage
에서multiboot
또는chainloader
지금까지 ' 작동하는 보조.efi
또는core.img
.