UEFI Grub이 구성 파일을 찾을 수 없습니다.

UEFI Grub이 구성 파일을 찾을 수 없습니다.

Grub을 사용하여 Windows와 다른 두 개의 Linux 왜곡 프로그램을 부팅해야 합니다. 따라서 다음 명령을 사용하여 UEFI 파티션에 Grub을 설치하고 전용 파티션을 사용하여 Grub에서 사용하는 파일을 저장했습니다.

sudo grub-install --efi-directory=/mnt/efi --root-directory=/mnt/grub --bootloader-id=Grub --uefi-secure-boot --target=x86_64-efi /dev/sda

/dev/sda1Mounted on /mnt/efi은 내 EFI 파티션이고 /dev/sda2Mounted on은 /mnt/grubGrub 파일용 파티션입니다.

그러나 Grub을 시작한 후에는 내가 배치한 grub.cfg 파일을 찾을 수 없고 /mnt/grub기본 Grub 셸이 표시되는 것 같습니다. 또는 를 입력하여 configfile /efi/Grub/grub.cfg시스템을 수동으로 복원할 수 있습니다 configfile (hd0,gpt2)/grub/grub.cfg.

여기 내 파일 중 일부가 있습니다

$ sudo tree /mnt/efi/EFI
/mnt/efi/EFI
├── Grub
│   ├── BOOTX64.CSV
│   ├── fbx64.efi
│   ├── grub.cfg
│   ├── grubx64.efi
│   ├── mmx64.efi
│   └── shimx64.efi
└── Microsoft
    |...


$ sudo tree /mnt/grub/grub
/mnt/grub/grub
├── fonts
│   └── unicode.pf2
├── grub.cfg
├── grubenv
└── x86_64-efi
    |...

$ sudo cat /mnt/efi/EFI/Grub/grub.cfg
search.fs_uuid 3110d895-a376-484a-8dba-e0475b9a977c root hd0,gpt2
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

$ sudo fdisk -l /dev/sda
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disklabel type: gpt

Device          Start        End   Sectors   Size Type
/dev/sda1        2048     526335    524288   256M EFI System
/dev/sda2      526336     657407    131072    64M Linux filesystem
/dev/sda3      657408     690175     32768    16M Microsoft reserved
/dev/sda4      690176  563607551 562917376 268.4G Microsoft basic data
/dev/sda5   563607552  697825279 134217728    64G Linux filesystem
/dev/sda6   697825280  966260735 268435456   128G Linux filesystem
/dev/sda7   966260736  983037951  16777216     8G Linux swap
/dev/sda8   983037952 1117254748 134216797    64G Linux filesystem
/dev/sda9  1117255680 1385691135 268435456   128G Linux filesystem
/dev/sda10 1385691136 1402468350  16777215     8G Linux swap

제가 작은 실수를 한 것 같지만 이것에 너무 많은 시간을 소비했습니다.

답변1

GRUB은 grub.cfgESP에서 로드하기 위해 절대 경로를 사용하는 것 같습니다. 어쩌면 GRUB이 어떤 디렉터리에서 로드되었는지 알 수 없을 수도 있습니다.

Debian의 경우 경로는 입니다 /EFI/debian/grub.cfg.

.efi이 명령을 사용하면 특정 실행 파일이 사용할 수 있는 경로를 찾을 수 있습니다 .

strings /boot/efi/EFI/devuan/grubx64.efi | less '+/EFI\/'

.efi분명히 위와는 다른 실행 파일 경로를 사용해야 할 수도 있습니다 .

이것관련 버그인 것 같습니다.

grub.cfg예상 경로로 복사하는 것이 작동하는 것 같습니다.

cd /boot/efi/EFI/
mkdir debian
cp devuan/grub.cfg debian/

물론 명령과 경로는 다를 수 있습니다. 변경이 발생 하면 grub.cfgFAT 파일 시스템은 연결을 지원하지 않으므로 복사본을 업데이트해야 합니다. 하지만 내 모습은 다음과 같기 때문에 별로 달라진 것 같지 않습니다.

search.fs_uuid $root_fs_uuid root mduuid/$array_uuid 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

답변2

어제 비슷한 문제를 해결한 후 귀하에게도 도움이 될 수 있는 해결책을 찾았습니다. 내 것은 /bootext4에 있고 내 것도 grub.cfg당신의 것과 동일하며 EFI 바이너리를 /boot/grub/grub.cfg.

이 문제를 해결하기 위해 grub-install을 사용하는 대신 추가된 "configfile" 리디렉션 /boot/grub/grub.cfg에 수동으로 복사했습니다./boot/efi/EFI/ubuntu/

grub.cfggrub EFI 바이너리가 ext4의 파일을 읽을 수 없을 가능성이 있습니까 ? 아니면 Neil Stockbridge가 제안한 것처럼 경로 문제일까요?

편집: 이 변경을 하기 전에 제가 본 내용을 공유하는 것도 도움이 될 수 있습니다. Grub 셸이 로드 중이고 명령을 사용하여 Ubuntu 22.04를 부팅할 수 있지만 Grub 메뉴가 표시되지 않습니다.

관련 정보