내 하드 드라이브는 GPT를 사용합니다. 부팅 모드를 UEFI 전용으로 설정했습니다. 내 파티션은 다음과 같습니다
/dev/sda
/dev/sda1 Grub 300MiB FAT32
/dev/sda2 Linux 97.66GiB ext4
/dev/sda3 Windows 97.66GiB NTFS
/dev/sda4 Microsoft_Reserved 16MiB unknown
/dev/sda5 Data 726.13GiB NTFS
/dev/sda6 Swap 9.76GiB linux-swap
Sparky Linux를 설치하는 동안 이미 grub을 설정했습니다 /boot/efi
. 모든 것이 잘 작동합니다. 부팅 우선 순위에서 첫 번째로 설정하면 grub 메뉴에서 Linux, 복구, Windows 10 및 BIOS 중에서 선택할 수 있습니다./dev/sda1
/dev/sda2
이제 Sparky Linux를 Solus Linux로 교체했습니다. 하지만 문제는 grub이 더 이상 작동하지 않는다는 것입니다. grub 파티션에서 부팅할 때 다음 오류가 발생합니다:
error: file `/boot/grub/x64_86-efi/normal.mod` not found.
Entering rescue mode
grub rescue>
Linux를 부팅하고 실행한 후 다음을 sudo update-grub
얻었습니다.
$ sudo update-grub
Generating grub configuration file ...
Found background: /usr/share/backgrounds/splash.tga
WARNING: Failed to connect to lvmetad. Falling back to device scanning.
Found Windows Boot Manager on /dev/sda1@/EFI/Microsoft/Boot/bootmgfw.efi
done
그러나 이것으로는 문제가 해결되지 않는 것 같습니다. 내 HDD에는 현재 Linux, Windows, Grub의 3가지 부트 로더가 있는 것 같습니다. 최소한 BIOS의 부팅 우선 순위 메뉴에 나와 있는 내용입니다.
편집하다: Grub을 다시 설치해 보았는데 이제 할 수 있습니다.둘grub 부트로더 중 어느 것도 작동하지 않습니다.
출력 lsblk
:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 931.5G 0 disk
├─sda1 8:1 0 300M 0 part
├─sda2 8:2 0 97.7G 0 part /
├─sda3 8:3 0 97.7G 0 part
├─sda5 8:5 0 16M 0 part
├─sda6 8:6 0 726.1G 0 part
└─sda7 8:7 0 9.8G 0 part [SWAP]
sr0 11:0 1 1024M 0 rom
문제를 해결하려면 어떻게 해야 할지 모르겠습니다. 부팅 시 OS를 선택할 수 있기를 원합니다.
답변1
이 linux.com 링크grub-rescue를 통해 손상된 grub을 복구하는 방법을 설명합니다.
기본적으로 당신이 필요
ls (hd0,1)/
ls (hd0,2)/
그런 다음 /boot/grub 디렉토리와 vmlinuz 및 initrd.img 파일을 찾을 때까지 계속합니다. 링크에서는 이러한 파일이 /boot/vmlinuz-xyzblah에 있을 것으로 예상하지만 /에서 현재 커널과 initrd만 가리키는 링크로 표시될 수도 있습니다. 그렇지 않은 경우에는 /boot/를 보고 그에 따라 다음을 수정하십시오.
lsblk /boot/grub으로 판단하면 아마도 (hd0,1)에 있고 나머지 Linux OS는 (hd0,2)에 있을 것입니다.
운영 체제에 맞는 파티션을 찾으면 다음 명령을 사용하여 확인할 수 있습니다.
cat (hd0,2)/etc/fstab
만약 이러한 가정이 맞다면
set prefix=(hd0,1)/boot/grub #tells grub where it can find insmod etc
set root=(hd0,2) #tells grub where to find /
insmod normal #loads normal module
normal #executes normal
insmod linux #loads the linux module
linux /vmlinuz root=/dev/sda2 #executes linux, loads the kernel and tells it where to find /
initrd /initrd.img #loads the initrd
boot
root=/dev/sdx 명령을 참고하세요. 이 옵션을 생략하거나 잘못된 파티션을 지정하면 커널 패닉이 발생합니다. 그렇다면 그렇다면리스그리고 다시 시작하세요.
위의 방법이 작동하지 않으면 첫 번째 줄을 다음으로 다시 변경해 보십시오.
set prefix=(hd0,2)/boot/grub
진입 후 grub을 다시 설치할 수 있습니다.
나는 grub을 복구할 때 grub-customizer를 사용하는 것을 좋아합니다. grub-customizer를 사용하면 Linux에서 grub의 부팅 옵션과 설정을 보고 재부팅하기 전에 문제를 해결할 수 있기 때문입니다.
답변2
다음을 수행하여 GRUB을 다시 설치할 수 있습니다:
- 라이브 USB/CD를 사용하여 Linux 부팅
- Linux 루트 파티션에 chroot합니다(/dev/sda2라고 가정합니다).
/dev/sda1을 /boot/efi에 마운트합니다.
sudo grub 설치 실행
이것을 시도하면 어떻게 될까요?
(참고: 먼저 중요한 데이터를 백업했는지 확인하는 것이 좋습니다)