온라인에는 수많은 grub2/EFI 스레드가 있지만 grub2가 EFI 부팅에서 구성 파일을 찾는 방법을 파악하기가 어렵습니다. grub2의 구성 파일은 입니다 /boot/grub/grub.cfg
. 그러나 부팅 문제가 발생하면 grub2가 오류 메시지 없이 명령 프롬프트(비상 쉘이라고도 함)에 나타날 수 있습니다. 따라서 문제를 해결하기 전에 grub2가 구성 파일을 찾으려고 시도하는 방법을 정확히 이해하는 것이 가장 좋습니다.
답변1
가장 먼저 이해해야 할 것은 정해진 방법이 없다는 것입니다. grub2는 설치 중에 다르게 구성될 수 있으며 이름은 grub.cfg
하드코딩되지 않습니다. 두 번째 교훈은 단일 구성 파일이 없다는 것입니다. 예를 들어 이 기사를 작성할 당시 내 Ubuntu 시스템은 실제로 이름이 grub.cfg
.
기본적으로 grub2는 시작 시 두 가지 중요한 작업을 수행합니다.
- 접두사 변수를 grub2 설치 중에 내장된 값으로 설정하십시오.
$prefix/grub.cfg
구성 파일이 있으면 계속
(자세한 내용은 다음을 참조하세요.GNU GRUB 매뉴얼.)
"존재하는 경우" 조건은 최악입니다. 파일이 존재하지 않는 경우(예: $prefix
올바른 위치를 가리키지 않기 때문에) 수행하려는 작업에 대한 오류 메시지가 없으며 명령을 실행하기만 하면 됩니다. 빠르게.
비상 쉘에 들어가면 가장 먼저 확인해야 할 것은 접두사 변수의 값(set 명령 사용)과 디렉터리 내용(ls 및 cat 명령 사용)입니다.
(기본 동작은 내장된 구성 파일에 의해 무시될 수 있지만 실제로 이런 일이 발생하는 것을 본 적이 없습니다.)
Ubuntu는 접두사를 grubx64.efi
보안 부팅에 사용되는 위치로 설정합니다. shimx64.efi
따라서 첫 번째 구성 파일 grub.cfg는 이러한 EFI 바이너리가 있는 동일한 디렉터리에서 로드됩니다. Linux 관점에서 경로는
/boot/efi/EFI/ubuntu
grub2 관점에서 볼 수 있습니다 (hd0,gpt1)/efi/ubuntu
(드라이브 및 파티션 번호는 ESP(예: EFI 시스템 파티션)의 위치에 따라 다를 수 있음). grub2의 파일 이름은 크기에 민감한 쓰기가 아닌 것 같습니다. Linux에 표시되는 EFI는 grub2가 보여주는 것과 같습니다 efi
.)
첫 번째 grub.cfg
파일에는 3개의 문만 포함되어 있습니다.
- UUID로 루트 파일 시스템이 포함된 파티션을 찾습니다(별도의 부팅 파일 시스템을 사용하는 시스템에서는 대신 부팅 파일 시스템을 찾습니다).
- 접두사를 새 값으로 설정합니다
$root/boot/grub
($root
이전 단계에서 결정된 값을 사용합니다. 이는 별도의 부팅 파티션이 있는 시스템에 대한 값입니다$root/grub
). - 실행
configfile
시작 위치$prefix/grub.cfg
후자는 /boot/grub/grub.cfg
우리가 일반적으로 Linux 위치라고 부르는 곳입니다.