![GRUB2 부팅 메뉴에 체인로드 바이너리 항목을 어떻게 추가합니까?](https://linux55.com/image/220452/GRUB2%20%EB%B6%80%ED%8C%85%20%EB%A9%94%EB%89%B4%EC%97%90%20%EC%B2%B4%EC%9D%B8%EB%A1%9C%EB%93%9C%20%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC%20%ED%95%AD%EB%AA%A9%EC%9D%84%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%B6%94%EA%B0%80%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
UEFI를 지원하지 않는 Ubuntu 22.04 LTS를 사용하고 있습니다 memtest86+ v5
.
Ubuntu 22.04 LTS에 설치하려고 하는데 memtest86+ v6
해당 바이너리를 다운로드했습니다.여기.
memtest64.efi
EFI 파티션으로 이동 하고 다음을 추가했습니다./etc/grub.d/40_custom
menuentry 'Memtest86+ v6' {
insmod part_gpt
insmod fat
set root='hd0,gpt1'
chainloader (\$root)/EFI/memtest64.efi
}
그리고 그는 도망쳤다 update-grub
. 항목은 부팅 메뉴에 표시되지만 입력하면 다음과 같습니다.
Error: No Server is Specified
GRUB 콘솔에서 hd0,gpt1
EFI 파티션임을 확인했습니다.
또는 GRUB이 /boot 폴더에서 Memtest86+를 부팅하도록 하고 싶지만 GRUB를 통해 이를 찾는 방법을 모르겠습니다 /boot
.
******@Ubuntu-Portable:~$ sudo lsblk -o +fstype
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS FSTYPE
sda 8:0 0 953.9G 0 disk
├─sda1 8:1 0 476M 0 part /boot/efi vfat
├─sda2 8:2 0 250G 0 part / ext4
└─sda3 8:3 0 703.4G 0 part /media/****/**** exfat
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 128G 0 disk
├─nvme0n1p1 259:1 0 200M 0 part vfat
├─nvme0n1p2 259:2 0 128M 0 part
└─nvme0n1p3 259:3 0 127.7G 0 part ntfs
고쳐 쓰다:이것은 작동하지만 여전히 efi 파티션 대신 /boot에서 부팅하는 방법을 모릅니다.
menuentry 'Memtest86+ v6' {
insmod part_gpt
insmod fat
insmod chain
set root=(hd0,gpt1)
chainloader /EFI/memtest64.efi
}
일을 깔끔하게 유지하기 위해 모든 일은 실내에서 처리하고 싶습니다./etc/grub.d/40_custom
답변1
memtest64.efi
EFI /boot
시스템 파티션 대신 EFI 시스템 파티션을 배치하려는 경우 다음과 같은 방법을 사용할 수 있습니다.
menuentry 'Memtest86+ v6' {
insmod part_gpt
insmod ext2
insmod chain
set root=(hd0,gpt2)
chainloader /boot/memtest64.efi
}
그러나 귀하의 의견에서 지적했듯이 이는 가정되는 저장 장치에 따라 다릅니다 (hd0)
.
i386-pc
GRUB의 BIOS() 아키텍처 버전에서는 저장 장치 식별자가 일반적으로 (hd0)
BIOS INT 13h 디스크 번호에 직접 매핑되기 때문에 이는 BIOS 스타일을 부팅할 때 좋은 가정이었습니다 . 즉, (hd0)
디스크 0x80을 의미합니다.
BIOS에서 부팅 디스크를 지정하는 안정적이고 호환 가능한 유일한 방법은 필요한 부팅 디스크가 디스크 0x80( (hd0)
GRUB에도 동일)이 되도록 BIOS 디스크 목록을 다시 정렬하는 것입니다. 따라서 부팅 디스크를 선택할 때 대부분의 BIOS는 이 방법. 부팅 디스크입니다. BIOS 시스템에서는 GRUB가 어떤 디스크에서 부팅되었는지 100% 확신할 수 있는 보편적인 방법은 없지만 (hd0)
거의 항상 맞는 매우 좋은 추측입니다.
UEFI를 사용하면 더 이상 신뢰할 수 없습니다.일부 UEFI 구현은가능한제가 개인적으로 소유한 UEFI 시스템도 같은 일을 합니다.아니요, 그리고 내가 시스템 관리자로 보는 시스템은 일반적으로 이 작업을 수행하지 않는 것 같습니다.
따라서 대신 GRUB 명령을 set root=(hd0,<partition ID>)
사용해야 합니다 .search
알려진 경로(경로 이름부터 시작)에서만 파일을 검색할 수 있습니다.파일이 위치한 파일 시스템의 루트 디렉터리, Linux 루트 파일 시스템일 수도 있고 아닐 수도 있음):
search --no-floppy --file --set root /boot/memtest64.efi
grub[2]-mkconfig
또는 현재 대부분의 최신 버전이 기본적으로 수행하는 것처럼 문제의 파일 시스템의 UUID를 찾아서 검색할 수 있습니다 .
search --no-floppy --fs-uuid --set root 12345678-9abc-def0-1234-56789abcdef0
이 명령은 --no-floppy
GRUB에게 플로피 드라이브 검색 시도를 건너뛰도록 지시하고 명령이 검색 기준을 충족하는 파일 시스템을 가리키도록 변수를 설정하도록 --set root
합니다 .search
root
간단히 말해서, lsblk -o +uuid
해당 디렉토리가 포함된 파일 시스템의 UUID를 찾은 후 다음과 같은 코드 조각을 memtest64.efi
작성하세요 .40_custom
menuentry 'Memtest86+ v6' {
insmod part_gpt
insmod ext2
insmod chain
search --no-floppy --fs-uuid --set root <insert filesystem UUID here>
chainloader /boot/memtest64.efi
}
답변2
이는 EFI/GPT 시스템의 기본 GRUB 파일입니다.
if loadfont unicode ; then
set gfxmode=1024x768,800x600,auto
set gfxpayload=800x600,1024x768
terminal_output gfxterm
fi
set default=0
set timeout=-1
insmod linux
insmod part_gpt
insmod fat
search --no-floppy --set=root --label "ESP"
menuentry "Start Memtest86+, use built-in support for USB keyboards" {
linux /EFI/memtest86+/memtest keyboard=both
}
menuentry "Start Memtest86+, use BIOS legacy emulation for USB keyboards" {
linux /EFI/memtest86+/memtest keyboard=legacy
}
menuentry "Start Memtest86+, disable SMP and memory identification" {
linux /EFI/memtest86+/memtest nosmp nosm nobench
}