我有一个使用 lvm 的 arch linux 设置,多年来一直更新良好,直到两周前。两周前更新时,我对根卷的旧快照运行了 lvremove,命令挂起了。我关闭了机器,从那以后它就无法启动了。我刚刚通过实时 USB 启动,试图弄清楚发生了什么,我的 fdisk -l 输出显示 /dev/nvme0n1(这是我唯一的驱动器)带有分区 p1 p2 p3,p1 是我的 efi 分区,p2 是我的启动分区,p3 是我的 lvm 分区。
因此,我在启动实时 USB 时执行以下操作来挂载和 chroot 到我的系统:
vgchange -ay
mount /dev/vg0/lv_root /mnt
mount /dev/nvme0n1p2 /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot/efi
mount /dev/vg0/lv_home /mnt/home
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt /bin/bash
那里的一切看起来都很“正常”(就像我的主页上的所有文件一样,基本上就像我正常启动一样)。由于我不知道为什么它无法启动,我尝试通过重新安装 grub,grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck
但此命令抱怨错误:
“此系统不支持 EFI 变量 此系统不支持 EFI 变量 grub-install:错误:efibootmgr 无法注册启动项:没有此文件或目录”
(是的,第一个错误消息出现了两次)。首先,运行 grub-install 感觉就像是一种“猜测和检查”方法(但我不知道还能尝试什么)...其次,当我在 Google 上搜索此错误时,大多数结果都表明我可能已在传统模式下启动,但如果我运行,我会看到值为 64 cat /sys/firmware/efi/fw_platform_size
,所以我知道情况并非如此(当我启动到实时媒体时,括号中还显示 UEFI),所以我不明白为什么我似乎无法使用 grub-install(我不确定这是否会解决问题,但值得一试,因为我不知道还能检查什么)
编辑 1:发现此线程EFI 变量在此系统上不受支持,并通过传递标志让 grub-install 运行--no-nvram
,然后执行grub-mkconfig -o /boot/grub/grub.cfg
(没有注意到之前生成的 grub.cfg 中存在很大差异)。不幸的是,仍然无法启动,当我尝试从驱动器启动时,它直接返回到 bios 菜单,我不确定如何查看“错误”以了解发生了什么。
编辑 2:根据下面@grawity 的回答,我添加了我的挂载命令 mount -t efivarfs efivarfs /mnt/sys/firmware/efi/efivars
,然后我使用了arch-chroot /mnt
而不是chroot /mnt /bin/bash
- 这次运行时grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck
它成功了!我接着grub-mkconfig -o /boot/grub/grub.cfg
运行,然后efibootmgr -v
我看到我的第一个启动顺序指向grub_uefi HD(1,GPT,some_guid)\EFI\grub_uefi\grubx64.efi
了正确的位置。然后我确实exit; umount -R /mnt; shutdown now
移除了 USB 并能够重新启动到我的系统!
我很好奇,当我的电脑卡在“lvremove”时,我粗暴地关闭了电脑,怎么会把电脑搞砸呢……不过,我很高兴电脑能再次正常工作