我有一个双启动 Arch Linux 和 Windows。
Windows 更新后,我的 GRUB 丢失了,系统正在启动到grub recovery
.从那里,我设法将 GRUB 指向 Arch Linux 并启动它。但是,它无法完全启动并显示以下消息:
filed to listen on Load/Save RF Kill Switch Status /dev/rfkill Match
...
failed to mount /boot/efi
# Enter recovery mode
...
我尝试从恢复模式恢复我的 GRUB(wiki 是这里):
mount /dev/sda5 /mnt # my Linux system
mount /dev/sda3 /efi # my EFI System partition
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=GRUB
grub-config -o /boot/grub/grub.cfg
这让我的 GRUB 又回来了,现在我可以像以前一样选择 Arch Linux 或 Windows。
然而,当我选择Arch Linux时,出现了同样的错误消息failed to mount /boot/efi
。 Windows 正常启动。
我检查了里面的内容/boot/efi
,实际上它是空的。我的initramfs-linux.img
、initramfs-linux-fallback.img
、intel-ucode.img
和vmlinux-linux.img
文件位于/boot/
.
但是,在我的中/boot/grub/grub.cfg
,initrd
寻找intel-ucode.img
并initramfs-linux-lts.img
准确地/boot/
找到它。
然后我在 Arch 论坛上发现了很多和我类似的问题(例如这个)。但在问题出现之前,我没有更新 Linux 内核,也没有接触 Linux 安装中的任何内容。另外,与提到的帖子相反,看起来我vmlinuz-arch.efi
甚至没有类似的东西/boot/
。
我还花了一些时间浏览 Arch Wiki。据我了解,涉及 GRUB 恢复的 Wiki 页面通常提出与我已经尝试过的相同的过程,但从arch-iso
witharch-chroot
到我的/dev/sda5
.
所以我有几个问题,最重要的是:如何恢复我的 Arch Linux 启动过程?
另一个更具体一点的是当 GRUB 阶段已经过去时,为什么systemd
还要尝试查找一次/boot/efi
? GRUB 不是寻找启动项的吗?看起来 GRUB 已经获取了我的 Arch Linux initram(至少 GRUB 执行了正确的 GRUB 条目,我通过在 中添加回显消息来检查它/boot/grub/grub.cfg
)。
更奇怪的是,/boot/efi
由于/dev/sda2
我Windows recovery environment
和不是 /dev/sda3
这是EFI System
:
$systemctl status boot-efi.mount
boot-efi.mount --- /boot/efi
Loaded: loaded (/etc/fstab; generated)
Active: Failed (Result: exit-code) ...
Where: /boot/efi
What: /dev/sda2
Docs: man:fstab(5)
man:systemd-fstab-generator(8)
答案1
看起来 Windows Update 对您的 EFI 分区做了一些非常顽皮的事情。
我在你的问题中看到的主要问题是 systemd 找不到 /boot/efi
这是使用配置文件安装的/etc/fstab
。
无论出于何种原因,/etc/fstab 中的 /boot/efi 条目正在寻找不再存在的文件系统。这与重新格式化 EFI 分区一致,并解释了为什么需要重新安装 grub。
您可以使用该命令blkid
(以 root 身份运行)查找 EFI 分区的 UUID。然后您可以将其编辑到 /etc/fstab 中。这应该可以解决你的问题。
EFI 已安装,以便实用程序可以在运行时读取和更新您的 EFI。