그러나 새로운 LFS 시스템을 부팅하려고 하면 Linux From Scratch가 거의 완료되었습니다. GRUB이 시스템을 시작할 수 없습니다:
오류: 디스크 '(hd0,)'을 찾을 수 없습니다.
그런 다음 출력을 사용합니다 grub> ls
. (hd0) (hd0, gpt4) (hd0, gpt3) (hd0, gpt2) (hd0, gpt1)
호스트 시스템이 UEFI 및 GPT를 사용하고 있기 때문에 UEFI와 함께 GRUB를 사용한다는 점을 제외하고는 특별한 지침을 따랐습니다.
다음은 파티션 테이블입니다.
- /dev/sda GPT
- /dev/sda1: 크기는 512MB입니다. EFI 시스템 파티션. FAT32
- /dev/sda2: 크기는 16GB입니다. 리눅스 스왑. [교환]
- /dev/sda3: 크기는 64GB입니다. 리눅스 x86_64 루트. 확장 4. 호스트 시스템.
- /dev/sda4: 크기는 32GB입니다. 리눅스 x86_64 루트. 확장 4. LFS 시스템. sda1에 grub을 설치했습니다. sda1의 파일 트리는 다음과 같습니다.
.
├── config-5.16.9
├── EFI
│ └── LFS
│ └── grubx64.efi
├── grub
│ ├── fonts
│ ├── grub.cfg
│ ├── grubenv
│ ├── i386-pc
│ ├── locale
│ │ ├── ast.mo
│ │ ├── ca.mo
│ │ ├── ...
│ │ └── zh_TW.mo
│ └── x86_64-efi
│ ├── acpi.mod
│ ├── ...
│ └── zstd.mod
├── System.map-5.16.9
└── vmlinuz-5.16.9-lfs-11.1-systemd
내용은 다음과 같습니다 grub.cfg
.
set default=0
set timeout=5
insmod part_gpt
insmod vfat # I've tried fat here.
set root=(hd0) #I've tried (hd0,gpt1), (hd0,gpt4), (hd0,1) .etc here.
if loadfont /boot/grub/fonts/unicode.pf2; then
set gfxmode=auto
insmod all_video
terminal_output gfxterm
fi
menuentry "GNU/Linux, Linux 5.16.9-lfs-11.1"{
linux /boot/vmlinuz-5.16.9-lfs-11.1 root=/dev/sda4 ro
}
menuentry "Firmware Setup"{
fwsetup
}
저는 주로 다음 참고자료를 참고했습니다.
또한 CSM 지원이나 레거시 없이 UEFI를 사용하도록 설정했습니다.
자세한 내용은:
- GRUB 버전 2.06
- LFS 버전 11.1-systemd
- Linux 커널 버전 5.16.9
- 보안 부팅 비활성화됨
답변1
처음에 GRUB는 UEFI 서비스를 사용하여 ESP에 액세스했으므로 펌웨어 지원이 없으면 ext4
GRUB는 FAT32만 읽을 수 있습니다. ext4
나중에 읽을 수 있지만 insmod ext2
그러려면 ext2.mod
먼저 읽어야 합니다.
더 많은 기능을 얻으려면 GRUB는 분명히 /grub/x86_64-efi
에 있는 모듈을 로드할 수 있어야 합니다 /dev/sda1
. 그러나 이를 위해서는 GRUB가 두 가지 중요한 변수인 root
및 를 올바르게 설정해야 합니다 prefix
.
귀하의 경우 set root=(hd0,gpt1)
디스크가 하나만 있다고 가정하면 가 필요합니다. 디스크가 여러 개 있는 경우 올바른 hdN
숫자를 예측하는 것이 까다로울 수 있으므로 최신 배포판에서는 search --fs-uuid --set=root <UUID-of-the-filesystem>
direct 대신 구문을 사용하는 것을 선호하는 경우가 많습니다 set root=
.
prefix
로 설정 해야 합니다 . GRUB 변수의 현재 상태를 보려면 (hd0,gpt1)/grub
GRUB 프롬프트에서 set
매개변수 없이 명령을 사용하십시오.
GRUB은 한 번에 하나의 파일 시스템에만 집중할 수 있으므로 /dev/sda1
로 마운트 /boot
한 다음 GRUB를 root
로 설정 하면 으로 (hd0,gpt1)
나타납니다 . 따라서 인용된 모든 경로에서 이를 생략 해야 합니다 ./boot
/
/boot
sda1
ext4 파일 시스템에서 무언가를 로드해야 하는 경우 다음 /dev/sda4
세 단계를 수행해야 합니다.
insmod ext2
whileroot
및prefix
still 위와 같이 설정set root=(hd0,gpt4)
GRUB 포커스를 LFS 루트 파일 시스템으로 전환- 필요한 것을 로드하세요. 이는
/boot
단지 마운트 지점일 뿐이라는 점을 기억하세요sda4
. Linux 커널은 나중에 이를 마운트 지점으로 사용/dev/sda1
하지만 GRUB에서는 아무 작업도 수행하지 않습니다.
따라서 수정해야 할 줄은 다음 grub.cfg
과 같습니다.
...
#set root=(hd0) # not just the disk, but the partition/filesystem GRUB will focus on
set root=(hd0,gpt1)
...
#if loadfont /boot/grub/fonts/unicode.pf2; then # GRUB will see /boot as /
if loadfont /grub/fonts/unicode.pf2; then
...
# linux /boot/vmlinuz-5.16.9-lfs-11.1 root=/dev/sda4 ro # same here, also fix the kernel filename
linux /vmlinuz-5.16.9-lfs-11.1-systemd root=/dev/sda4 ro
...
이 /boot/grub/i386-pc
디렉토리는 UEFI 시스템에서는 쓸모가 없습니다. 자유롭게 삭제하십시오.
이 /boot/grub/fonts/unicode.pf2
파일은 현재 sda1
.