直接使用 UEFI 启动 Arch Linux

直接使用 UEFI 启动 Arch Linux

我尝试在 HP 笔记本电脑上安装 Arch Linux,以便它可以直接从 UEFI 启动。我以前这样做过,但我不记得我使用了确切的方法。我按照 wiki 上的标准说明进行/dev/sda1操作,并在/mnt/boot/dev/sda2上进行了安装/mnt。chroot 后,/mnt我​​使用 pacman 下载 efibootmgr。然后我使用以下命令:

efibootmgr -d /dev/sda -p 1 -c -L "Arch Linux" -l /vmlinuz-linux -u "root=/dev/sda2 rw initrd=/initramfs-linux.img"

再次关注 wiki。我总是确保启动顺序正确,但重启后,计算机看不到任何可启动的系统。

然后我想尝试使用 USB 上的 UEFI shell

Shell> bcfg boot add N fsV:\vmlinuz-linux "Arch Linux"

但我的 shell 只将 USB 列为 fs0,其他所有内容都列为 blk0、blk1 等。它们不是可访问的目录,因此我无法在上面的命令中使用它们。

我不知道我还能尝试什么。我使用 rufus 刻录了 USB,并尝试了大多数选项。目前我使用的驱动器格式为 GPT、FAT32,并且我使用 rufus 的 DD 模式。我在 BIOS 中禁用了传统和安全启动。笔记本电脑的磁盘格式为 GPT 并且/dev/sda1是 EFI 分区。两个分区都使用 格式化为 ext4 mkfs.ext4。我多次尝试重新安装系统,但我仍然无法找出问题所在。

答案1

我不信任 efibootmgr,所以我喜欢手动执行此操作,如果我遗漏了什么,请写评论。

首先,您需要以 UEFI 模式从 USB 安装介质启动。我尝试重点介绍 Arch 安装过程的 UEFI 部分。

UEFI 启动不仅需要 efi,还需要启动分区。

前两个分区应该看起来像这样:启动 1M 大小并从第一个扇区开始。然后是 500M efi 分区。

fdisk -l
Device       Start       End   Sectors  Size Type
/dev/sda1     2048      4095      2048    1M BIOS boot
/dev/sda2     4096   1028095   1024000  500M EFI System

我建议使用 gdisk 来创建它们。

两者都应格式化为 FAT:

mkfs.vfat /dev/sda1
mkfs.vfat /dev/sda2

按照您所做的方式将根文件系统挂载到 /mnt,然后在 /mnt 中创建一个 esp 文件夹并按如下方式挂载 efi 分区:

mkdir /mnt/esp
mount -o rw,relatime,fmask=0033,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro /dev/sda2 /mnt/esp

此时,可以从 UEFI 的角度完成 pacstrap 和 genfstab。

将以下内容添加到 /mnt/etc/fstab 文件末尾。

/esp/EFI/arch   /boot   none    bind    0 0

这是必需的,因为 pacman 更新 /boot,而引导加载程序将查找 /esp/EFI/arch 中的文件,因此更新后系统无法启动。

现在您必须编辑 /etc/mkinitcpio.conf HOOKS= 部分,应该看起来像这样:

HOOKS='base systemd autodetect modconf block sd-lvm2 filesystems keyboard fsck sd-shutdown'

仅当您使用 lvm 分区时才需要 sd-lvm2。

现在我们必须 chroot 到 /mnt

运行以下命令:

mkinitcpio -p linux
bootctl --path=/esp install # install boot loader
echo -e "# Load vfat at boot\nvfat\n" > /etc/modules-load.d/vfat.conf   # Load vfat module at boot

创建一个文件 /esp/loader/entries/arch.conf,包含以下内容:

title   Arch Linux
linux   /EFI/arch/vmlinuz-linux
#initrd  /EFI/arch/intel-ucode.img
initrd  /EFI/arch/initramfs-linux.img
options root=/dev/sda3 rw

initrd /EFI/arch/intel-ucode.img如果您使用英特尔 CPU,则应取消注释该行,您还必须pacman -Sy intel-ucode为英特尔 CPU 安装,root= 应该包含系统根分区。

配置文件查找 /EFI/arch/ 下的文件,因此我们创建目录并从 /boot 复制每个文件,然后删除 /boot/*,因为我们将在系统启动时将 /EFI/arch/ 绑定到 /boot。

mkdir -p /esp/EFI/arch
cp /boot/* /esp/EFI/arch/
rm /boot/*

如果您已经完成了在 chroot 中配置的所有步骤,则可以尝试启动新系统。

答案2

如果您的 EFI 系统分区未格式化为 FAT32,那么这就是问题所在。虽然理论上 UEFI 可能支持任何文件系统,但它唯一的文件系统支持 FAT32。(可能也支持一些 CD/DVD fs。)

ESP 必须是 FAT32。

相关内容