새 시스템을 가져온 후 NVME 드라이브를 기존 시스템에서 새 시스템으로 옮겼고 두 시스템 모두 UEFI를 사용하여 부팅하도록 설정되었습니다. EFI 설정은 시스템마다 다르므로 문제가 발생할 것으로 예상하고 준비했습니다. 라이브 USB에서 부팅하고 설치 및 루트를 지정한 다음 지침에 따라 GRUB를 다시 설치했습니다(웹 어디에서나 사용 가능 및 아래 반복). 재부팅 후 GRUB 명령 프롬프트가 표시되지만 이 문제를 해결하는 방법을 모르겠습니다. 무엇을 하든 Linux UEFI 부팅 옵션(아래 표시)을 선택하면 grub 프롬프트가 표시됩니다. Windows UEFI 부팅 옵션(이중 부팅 시스템)을 선택하면 제대로 로드됩니다.
configfile (hd0,gpt6)/@/boot/grub/grub.cfg
boot GRUB 메뉴를 입력하여 항상 GRUB 프롬프트에서 Linux 설치를 부팅할 수 있으므로 문제 없이 모든 항목을 부팅할 수 있습니다(BTRFS를 루트 파티션으로 사용하고 /
하위 볼륨에 있습니다 . @
이는 Ubuntu 설치의 표준입니다).
현재 설정은 다음과 같습니다.
# efibootmgr --verbose
BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0001,0005,0000,0002
Boot0000* UEFI Samsung SSD 970 EVO Plus 1TB S6P7NF0T423021F 1 HD(1,GPT,37b6d616-6865-44b1-a382-9987345e2cfa,0x800,0x32000)/File(\EFI\Boot\BootX64.efi)N.....YM....R,Y.
Boot0001* Neon HD(1,GPT,37b6d616-6865-44b1-a382-9987345e2cfa,0x800,0x32000)/File(\EFI\Neon\shimx64.efi)
Boot0002* UEFI HTTPs Boot PciRoot(0x0)/Pci(0x1f,0x6)/MAC(000000000000,0)/IPv4(0.0.0.00.0.0.0,0,0)/Uri()N.....YM....R,Y.
Boot0005* Windows Boot Manager HD(1,GPT,37b6d616-6865-44b1-a382-9987345e2cfa,0x800,0x32000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}....................
# ll /boot/efi/EFI/
total 6
drwx------ 6 root root 1024 Jul 26 12:38 ./
drwx------ 4 root root 1024 Jan 1 1970 ../
drwx------ 2 root root 1024 Aug 28 2022 Boot/
drwx------ 5 root root 1024 Jul 26 12:38 Dell/
drwx------ 4 root root 1024 Aug 28 2022 Microsoft/
drwx------ 2 root root 1024 Jul 24 20:01 Neon/
# cat /boot/efi/EFI/Neon/grub.cfg
search.fs_uuid 2886a665-f535-496e-a543-13c62983b0da root
set prefix=($root)'/@/boot/grub'
configfile $prefix/grub.cfg
# ll /dev/disk/by-uuid/
total 0
drwxr-xr-x 2 root root 120 Jul 26 13:20 ./
drwxr-xr-x 9 root root 180 Jul 26 13:20 ../
lrwxrwxrwx 1 root root 15 Jul 26 13:20 2886a665-f535-496e-a543-13c62983b0da -> ../../nvme0n1p6
lrwxrwxrwx 1 root root 15 Jul 26 13:20 80D9-5688 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 Jul 26 13:20 82926928-1ed1-4a76-b0e8-d62a0171c1ee -> ../../nvme0n1p5
lrwxrwxrwx 1 root root 15 Jul 26 13:20 D8D6FA10D6F9EF1E -> ../../nvme0n1p4
# lsblk -e 7 -o name,fstype,size,fsused,label,partlabel,mountpoint,uuid,partuuid
NAME FSTYPE SIZE FSUSED LABEL PARTLABEL MOUNTPOINT UUID PARTUUID
nvme0n1 931.5G
├─nvme0n1p1 vfat 100M 58.8M EFI system partition /boot/efi 80D9-5688 37b6d616-6865-44b1-a382-9987345e2cfa
├─nvme0n1p2 16M Microsoft reserved partition fdc1478a-852d-4f33-8e22-24a2ea209726
├─nvme0n1p3 BitLocker 50.2G Basic data partition e8584ca9-db86-4bb1-abf7-424afe77bc94
├─nvme0n1p4 ntfs 517M D8D6FA10D6F9EF1E 5373ade9-ed41-4164-85e2-c28b7026c25f
├─nvme0n1p5 swap 30.5G [SWAP] 82926928-1ed1-4a76-b0e8-d62a0171c1ee d5d866a5-97d4-49bb-a182-6eec3abcba18
└─nvme0n1p6 btrfs 850.2G 440.5G linux /var/lib/docker/btrfs 2886a665-f535-496e-a543-13c62983b0da cb45a183-14d3-4a95-b89f-6b5e315609cd
다음을 통해 다시 설치해 볼 수 있습니다.
- 문제가 있는 EFI 부팅 항목을 제거합니다.
efibootmgr -b 1 -B
- 디스크 및 EFI에 부트로더를 다시 설치합니다.
grub-install /dev/nvme0n1 --target x86_64-efi --efi-directory /boot/efi/ --bootloader-id Neon
- GRUB 구성을 업데이트합니다(필요한지 확실하지 않지만 문서에 나와 있습니다).
update-grub2
그 이후의 구성은 위에 표시된 것과 같으며 GRUB은 재부팅 시 메뉴를 자동으로 시작하지 않습니다. EFI NVRAM 덤프의 UUID는 잘 모르겠지만 찾을 수 있는 어디에도 값이 구성되어 있지 않으며 항목을 삭제하고 다시 생성하면 다시 나타납니다.
내가 무엇을 놓치고 있는지 아시나요?
답변1
간단히 말해서:
Ubuntu의 내장 GRUB 부트 로더를 사용하는 경우 UEFI 부팅 항목~ 해야 하다이름이 ubuntu
지정되어야 합니다(또는 최소한 GRUB EFI 구성 파일이 EFI/ubuntu/grub.cfg
.
세부 사항:
문제는 UEFI의 GRUB 설정, 보안 부팅(제 생각에는) 및 Ubuntu가 이를 모두 설정하는 방법에 있습니다. 기존 BIOS 부팅에서 BIOS는 즉시 다른 것을 부팅하는 작은(512바이트라고 생각합니다) 실행 파일을 실행합니다. 예전) 또는 나머지 부트로더가 있는 디스크에서 하드코딩된 섹션("2단계 부트로더")을 찾으세요. 이 설정에는 많은 문제가 있습니다. 그 중 가장 중요한 것은 파일 이동, 파일 압축 등의 고급 파일 시스템에서 작동하지 않는다는 것입니다. 고급 파일 시스템을 /boot
사용하려면 GRUB 2단계가 있는 ext2 파티션에 별도의 파일 시스템이 있어야 했습니다 .
UEFI에는 운영 체제가 대규모 부트로더를 배포할 수 있는 (상대적으로) 큰 FAT32 파티션(ESP)이 있으며 UEFI 펌웨어는 전체 부트로더를 한 번에 로드합니다. Ubuntu가 이 기능 을 사용하는 방식은 전체 GRUB 부트 로더를 grubx64.efi
. 이 GRUB 설치는 전체 구성 파일을 찾을 수 있는 위치에 대한 지침이 포함된 shimx64.efi
작은 구성 파일을 EFI 파티션에서 로드하는 방법을 알고 있습니다 . grub.cfg
전체 GRUB 부트 로더를 기본적으로 사용할 수 있으므로 고급 파일 시스템을 읽을 수 있고 별도의 부트 파티션이 필요하지 않은 BTRFS 또는 ZFS 드라이버가 있을 수 있습니다.
문제는 이러한 모든 파일 경로( grub.cfg
파일이 로드된 후까지)가 GRUB EFI 실행 파일로 컴파일되어 구성할 수 없다는 것입니다. 이 모든 작업에는 서명이 필요하기 때문에 설치 중에 이 구성을 업데이트할 수 없습니다(설정을 원하지 않는 한). 컴퓨터 TPM의 개인 키를 복사하고 부트로더 재컴파일을 시작합니다. 따라서 Ubuntu GRUB 설치(Ubuntu LTS 기반 KDE Neon에서 사용됨)에는 EFI 부트로더 디렉토리(에서 로드됨 grub.cfg
) 가 필요합니다. 해당 경로는 파일 EFI/ubuntu/grub.cfg
로 컴파일되고 구성 파일이 그렇지 않은 경우 다른 어떤 것도 될 수 없습니다. grubx64.efi
존재 - 나처럼 GRUB 프롬프트가 표시됩니다.
set
GRUB 프롬프트를 실행하면 이를 확인할 수 있습니다 . 출력은 다음과 같습니다.
prefix=(hd0,gpt1)/EFI/ubuntu
이는 접두사(GRUB가 로드되었다고 생각하는 위치와 다른 모든 파일을 볼 것으로 예상되는 위치)가 Ubuntu가 사용하는 것으로 하드코딩되어 있음을 의미합니다.
KDE Neon(제가 사용하고 있는)을 설치하면 Neon 설치 프로그램이 부트로더 EFI/ubuntu
설치를 생성합니다. 폴더가 사용되지도 않기 EFI/neon
때문에(아마도 부트로더를 기대하기 때문에) 왜 시도하는지 모르겠습니다. EFI/neon
프로그램 항목 이름이 "neon"이고 어떤 이유에서인지 폴더도 "neon"이라고 불러야 한다는 뜻인가요? UEFI 사양에서는 이를 요구하지 않으므로 괜찮습니다.
내가 잘못한 것은 EFI/ubuntu
폴더가 일종의 레거시 폴더(이전 Ubuntu 설치 위에 Neon이 설치되어 있음)라고 가정하고 삭제한 것입니다(또한 EFI/Neon
부팅하고 싶었기 때문에 Neon 부트로더를 다시 설치했습니다. 항목이 표시됩니다) 괜찮음) - 따라서 GRUB 실행 파일은 (UEFI 펌웨어에 의해) 새 폴더에서 로드되지만 로드 후에는 나머지 설정을 찾으려고 시도 EFI/ubuntu
하지만 존재하지 않습니다. 따라서 우리는 프롬프트에 따라서만 이 문제를 해결할 수 있습니다.