Environment
- 设备:Lenovo ThinkStation P 系列(本文机型:P3 Ultra Gen1)
- 系统:Proxmox VE 8.4 / 9.0(均重现)
- 启动:UEFI 模式,Secure Boot 关闭
- 磁盘:NVMe(安装器默认分区:ESP≈1 GiB、LVM 作为根)
Symptoms & Error Messages
在安装Proxmox VE时遇到以下提示:
在安装 PVE 的最后阶段,“Bootloader setup” 报错:
failed to prepare efi boot using Grub on “/dev/DEVICE_NAMEp2”: unable to install the EFI boot loader on ‘/dev/DEVICE_NAME’
随后 grub-install
警告无法设置 EFI 变量(如 cannot set EFI variable Boot0000),安装器以失败结束。
导致这个问题的原因是Lenovo联想部分机器限制NVRAM的写入,使得安装程序无法正常grub-install需要的EFI文件。通过手动将EFI指定到fallback启动可以解决这个问题。
Impact
我是在今天安装的时候发现这个问题的。一开始我认为是UEFI设置问题,重置并更新了bios之后问题仍然存在;然后我尝试了不同版本的ISO制作(BalenaEtcher/Rufus)和不同版本镜像(8.4/9.0),都有同样的报错。
在网上一开始按照报错信息去搜索,没有特别有效的结果。我突然意识到,网络上出现这个问题的多是戴尔R系列服务器,与联想P系列同属于品牌机工作站,可能有特殊的bios限制。在群友的提示下按照机型搜索时得到了部分结果。一个Chiphell的帖子 提到了同样的问题,并且声称通过重新导入UEFI证书解决了。另一个出现在Proxmox论坛上的帖子有同样的情况,但没有给出解决方案。
Initial Assessment
在尝试了升级BIOS无果之后,我迅速到P3 Ultra购买的售后机友群内发出询问,群友纷纷踊跃提出建议。一个群友提到,他在安装飞牛云的时候出现过类似的问题,最后是通过在其他机器上安装,把硬盘拿过来,再修复引导解决的。推断:只要系统分区无问题,修复 GRUB 并提供 fallback 启动文件即可完成引导。
Disk & Boot Mode Details
- 启动模式:UEFI Only(Lenovo唯一可选模式),Secure Boot 关闭。
- 目标磁盘为 NVMe;安装器默认创建 1 GiB 的 FAT32 ESP 挂载到
/boot/efi
,其余为 LVM(/dev/pve/root
等)。 - 其他品牌/机型若对 NVRAM 有保护策略,可能同样出现写入失败的症状。建议查询是否有对应的UEFI设置项。
Investigation & Actions
首先,我们安装直到最后的报错页面,然后不拔下安装盘选择重启。此时我们会再次从安装镜像启动。选择Advanced Option,然后选择Rescue Mode启动,此时将正常启动到PVE运行界面。使用root和原来设置的密码启动。
这篇教程默认使用者在第一次安装的时候选择直接在整个盘上安装,让PVE安装器自行决定如何分区。
Mounting Filesystems (ESP, LVM)
-
激活 LVM 并确认逻辑卷路径:
1 2 3
vgscan vgchange -ay lvs -o vg_name,lv_name,lv_path,lv_size
-
挂载根与 ESP(以下以常见的 pve/root 与 ESP 在
nvme0n1p2
为例):1 2 3 4 5 6 7
DISK=/dev/nvme0n1 ROOT=/dev/pve/root ESP=/dev/nvme0n1p2 mount "$ROOT" /mnt mkdir -p /mnt/boot/efi mount "$ESP" /mnt/boot/efi
Preparing the Chroot
chroot 是什么? 它把当前进程看到的“/”切换到指定目录(这里是 /mnt
),让我们在“已安装系统”的环境中运行命令,好比真正启动进系统一样。
在 chroot 前,先把必要的内核伪文件系统“带进去”,并确保固件变量接口可用:
|
|
efivarfs 是什么? 它是 Linux 暴露 UEFI NVRAM 变量的虚拟文件系统,路径是
/sys/firmware/efi/efivars
。在 chroot 里把它挂上,grub-install
/efibootmgr
才能与固件交互。
Reinstalling GRUB to the ESP
-
直接把 GRUB 的 EFI 程序写入 ESP:
1 2 3 4 5
grub-install \ --target=x86_64-efi \ --efi-directory=/boot/efi \ --bootloader-id=proxmox \ --recheck || true
-
若提示无法写 EFI 变量(常见于部分固件),用 不写 NVRAM 的方式再次安装:
1 2 3 4 5 6
grub-install \ --target=x86_64-efi \ --efi-directory=/boot/efi \ --bootloader-id=proxmox \ --recheck \ --no-nvram
-
生成配置:
1
update-grub
Handling NVRAM Write Failures
两种启动路径:
- NVRAM 启动项:固件保存
Boot000X
→某个磁盘/分区上的某个.efi
文件;可用efibootmgr
管理顺序与条目。 - Fallback 路径:UEFI 规范规定在每块 EFI 磁盘上都要尝试
\EFI\BOOT\BOOTX64.EFI
(x86_64)。
若 NVRAM 写入失败,使用 fallback 一样能稳定启动:我们只需把刚安装的 grubx64.efi
复制到 fallback 路径。
Creating the Fallback Boot Path
|
|
First Successful Boot
重启、移除安装介质,固件会从 \EFI\BOOT\BOOTX64.EFI
启动进入系统。此后常规的内核更新会自动刷新 GRUB 配置。
Tiny maintenance note
当 grub-efi
升级后,EFI/proxmox/grubx64.efi
可能发生变化。建议同步更新 fallback:
|
|
你可以在任何与GRUB相关的 apt upgrade
后执行这个命令。
Root Cause Analysis
- 安装器调用的
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=proxmox --recheck
在部分设备上 创建 NVRAM 启动项失败(固件策略/权限/设置等原因)。 - 加上
--no-nvram
可跳过写入 NVRAM,仅把引导文件放入 ESP;再通过 fallback 路径完成启动。 - 由于系统文件和分区布局本身无问题,手动收尾即可恢复可启动状态。
Appendix A: Key Commands
|
|
Appendix B: Glossary (ESP, efivars, NVRAM, chroot)
- ESP(EFI System Partition):UEFI 固件可读的 FAT32 分区,存放各操作系统的
.efi
启动程序与少量配置。通常挂载在/boot/efi
。 - efivars / efivarfs:Linux 暴露 UEFI NVRAM 变量的虚拟文件系统,位于
/sys/firmware/efi/efivars
。读取/写入这些“文件”,实质是在读写固件变量(如 BootOrder、Boot000X、SecureBoot 等)。 - NVRAM:主板固件中的非易失性存储区域,用于保存启动项等设置。
- chroot:把当前进程视角下的根目录切换到指定目录(如
/mnt
),便于在“目标系统”环境内运行命令进行修复。 - fallback 路径:UEFI 规范定义的默认启动文件名(x86_64 为
\EFI\BOOT\BOOTX64.EFI
)。当无有效 NVRAM 启动项时,固件会尝试该路径。 efibootmgr
:前者把 GRUB 的 EFI 程序与相关文件安装到 ESP;后者用于创建/查看/调整 NVRAM 启动项。
此博客由GPT-5辅助写作,如有疑问可以随时联系作者,但作者也只能用GPT回答你😭