我尝试在 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。