너덜너덜한 애벌레를 전환하세요.

너덜너덜한 애벌레를 전환하세요.

내 하드 드라이브는 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을 다시 설치할 수 있습니다:

  1. 라이브 USB/CD를 사용하여 Linux 부팅
  2. Linux 루트 파티션에 chroot합니다(/dev/sda2라고 가정합니다).
  3. /dev/sda1을 /boot/efi에 마운트합니다.

  4. sudo grub 설치 실행

이것을 시도하면 어떻게 될까요?

(참고: 먼저 중요한 데이터를 백업했는지 확인하는 것이 좋습니다)

관련 정보