BOOTx64.EFI 文件启动,但只能直接启动,当 UEFI 定向到外部 SSD 时则无法启动

BOOTx64.EFI 文件启动,但只能直接启动,当 UEFI 定向到外部 SSD 时则无法启动

我有一个装有 Arch Linux 的外部 SSD。 ESP 安装到 /boot。在 ESP 上,我有目录 EFI,其中有一个 BOOT 目录。我使用 /ext/kernel/cmdline 创建了一个 BOOTx64.EFI,其中显示 \vmlinuz-linux root=PARTUUID=[partuuid] initd=\initramfs-linux.img。

我的想法是,当我使用启动列表并选择我的SSD时,UEFI系统将自动找到/boot/EFI/BOOT/BOOTx64.EFI并正确启动。但相反,我被删除到 rootfs,并且必须将 /dev/sda2 (根分区)挂载到 new_root,然后退出 rootfs。并且引导有效。但在这种情况下 /proc/cmdline 显示 YRY。

或者,如果我告诉启动列表从文件启动并选择 BOOTx64.EFI 文件,它会完美启动并且 /proc/cmdline 显示我的 /etc/kernel/cmdline。

因此,我认为当我选择 SSD 时,HP Elitebook 正确地尝试运行 BOOTx64.EFI,但由于某种原因,它看不到根分区(表示设备为“”并且文件系统不存在)。所以我必须手动安装它,然后一切都很好。

我希望弄清楚为什么当我从 SSD 调用 EFI 时笔记本电脑不将我的根分区挂载到 new_root,但当我直接从 EFI 文件调用它时却挂载到 new_root。

答案1

注意:这不适合新手或刚刚了解 Arch Linux 的人。如果您犯了某种错误,您可能会失去硬盘上的所有内容。在探索此选项之前,请至少备份所有数据。

我终于学会了如何正确地做到这一点。我认为最好的方法是使用 systemd-auto-gpt-generator。这是 systemd 的一部分,旨在根据 GPT 类型查找和安装分区。为了使其正常工作,第一步是确保您的 GTP 类型正确:EFI 为您的 EFI 分区(EF00 代码),Linux-x64-root(8304 代码)为您的根分区,Home (8302) ,如果您使用单独的主分区。

下一步是在 mkinitcpio.conf 中设置挂钩以 systemd 启动,而不是 base 和 udev。也就是说,将配置文件的hooks行中的base和udev替换为systemd。

此时,您已准备好制作efi启动文件: mkinitcpio --uefi /boot/EFI/BOOT/BOOTx64.EFI

完成后,从启动菜单中选择外部驱动器将自动工作,安装根分区和主分区。在您尝试访问引导分区上的文件之前,不会安装引导分区。此时系统会自动挂载它。

相关内容