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/sda1
Mounted on /mnt/efi
은 내 EFI 파티션이고 /dev/sda2
Mounted on은 /mnt/grub
Grub 파일용 파티션입니다.
그러나 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.cfg
ESP에서 로드하기 위해 절대 경로를 사용하는 것 같습니다. 어쩌면 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.cfg
FAT 파일 시스템은 연결을 지원하지 않으므로 복사본을 업데이트해야 합니다. 하지만 내 모습은 다음과 같기 때문에 별로 달라진 것 같지 않습니다.
search.fs_uuid $root_fs_uuid root mduuid/$array_uuid
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
답변2
어제 비슷한 문제를 해결한 후 귀하에게도 도움이 될 수 있는 해결책을 찾았습니다. 내 것은 /boot
ext4에 있고 내 것도 grub.cfg
당신의 것과 동일하며 EFI 바이너리를 /boot/grub/grub.cfg
.
이 문제를 해결하기 위해 grub-install을 사용하는 대신 추가된 "configfile" 리디렉션 /boot/grub/grub.cfg
에 수동으로 복사했습니다./boot/efi/EFI/ubuntu/
grub.cfg
grub EFI 바이너리가 ext4의 파일을 읽을 수 없을 가능성이 있습니까 ? 아니면 Neil Stockbridge가 제안한 것처럼 경로 문제일까요?
편집: 이 변경을 하기 전에 제가 본 내용을 공유하는 것도 도움이 될 수 있습니다. Grub 셸이 로드 중이고 명령을 사용하여 Ubuntu 22.04를 부팅할 수 있지만 Grub 메뉴가 표시되지 않습니다.