我几乎从零开始就完成了Linux;但是,当我试图启动新的LFS系统时。GRUB无法启动系统:
错误:找不到磁盘‘(hd0,)’。
然后我使用了grub> ls输出:(hd0) (hd0, gpt4) (hd0, gpt3) (hd0, gpt2) (hd0, gpt1) --我遵循了指令,没有做任何特别的事情,除了在UEFI中使用GRUB之外,因为我的主机系统一直在使用UEFI和GPT。下面是分区表:
.
├── 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
}我主要是根据这些参考资料:
此外,我已经设置使用UEFI,没有CSM支持或遗留。更多详情:
发布于 2022-08-08 13:45:05
最初,GRUB依赖于UEFI服务来访问ESP,所以除非您对ext4有固件支持,否则GRUB只能读取FAT32。它可以在ext4之后读取insmod ext2,但要做到这一点,首先需要读取ext2.mod。
为了获得更多的功能,GRUB需要能够加载其模块,这些模块显然位于/dev/sda1上的D5目录中。但要做到这一点,GRUB需要正确设置两个重要变量:root和prefix。
在您的情况下,您需要set root=(hd0,gpt1),假设您只有一个磁盘。如果您有多个磁盘,那么预测正确的hdN数可能会很棘手,这就是为什么现代发行版通常更喜欢使用search --fs-uuid --set=root 语法而不是直接的set root=。
应该将prefix设置为(hd0,gpt1)/grub。使用GRUB提示符中没有参数的set命令查看GRUB变量的当前状态。
GRUB一次只能集中在一个文件系统上,所以如果您将/dev/sda1挂载为/boot,那么当GRUB将root设置为(hd0,gpt1)时,它会将/boot设置为/。因此,您应该从引用/boot的所有路径中省略sda1。
如果需要从ext4文件系统加载/dev/sda4上的某些内容,则需要执行三步操作:
insmod ext2,而root和prefix仍按上文所述设置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
...在UEFI系统上,/boot/grub/i386-pc目录将是完全无用的;可以随意删除它。
/boot/grub/fonts/unicode.pf2文件目前似乎不存在于sda1上。但是,由于没有它显然可以在文本模式下获得GRUB,所以没有它就可以生存。
https://unix.stackexchange.com/questions/712872
复制相似问题