一台跑了很久的 PVE 7.3(Debian 11)单节点宿主机,趁着 VM 全部关机的空档,一口气完成了 7.3 → 7.4 → 8.4 → 9.2 的三级跳,并顺手解决了 Web UI 不显示温度的问题。全程约 1 小时,零数据损失。这篇文章记录完整的升级路径、踩过的坑和每一步的验证方法,方便有相同需求的朋友照着操作。
一、环境与升级路径
先交代背景,我的环境如下:
| 项目 | 升级前 |
| PVE 版本 | 7.3-3 |
| Debian | 11.5 (bullseye) |
| 引导方式 | UEFI(但装的是 grub-pc,有隐患,下文会讲) |
| 集群 | 单节点,无 corosync 组网 |
| 存储 | LVM(local / local-lvm),无 ZFS |
| 虚拟机 | win10 / Ubuntu / 群晖 DSM7,升级前全部关机 |
PVE 的大版本必须逐级升级,不能跳级:
每一级升级完成后都要重启一次,确认系统健康再进行下一级。官方文档也是这么要求的。
二、升级前检查清单
动手之前,这几件事务必确认:
另外两个建议:
- 备份。升级有风险,重要 VM 的备份(vzdump)至少留一份。
- 确认引导方式。UEFI 机器执行
efibootmgr,能输出引导项说明是 UEFI;如果此时dpkg -l | grep grub-pc显示装的是 grub-pc,那你和我一样踩过坑,7→8 升级前必须先处理(见第四节)。
三、第一跳:7.3 → 7.4
3.1 处理镜像源(第一个坑)
我的机器原来用的清华 TUNA 镜像,结果 apt-get update 直接报 404 —— Debian 11(bullseye)已经 EOL,TUNA 下线了它的 Proxmox 仓库和 backports。
实测国内镜像可用性(2026 年 9 月):
| 镜像 | bullseye | bookworm | trixie |
| 清华 TUNA | ❌ 已下线 | ✅ | ✅ |
| 中科大 USTC | ✅ | ✅ | ✅ |
另外还有一个隐蔽的坑:USTC 和 TUNA 的 bullseye-security 池索引与实际包文件不一致(下载时 404),安全源需要临时指向官方 security.debian.org。只有 bullseye 受影响,bookworm/trixie 没这个问题。
修改后的源长这样:
3.2 执行升级
完成后 pveversion 应该显示 7.4-20(7.x 的最终版本),此时会安装新内核,重启一次再继续。
四、第二跳:7.4 → 8.4
4.1 先跑官方检查工具
重点关注 FAILURES 和 WARNINGS。我的结果是 0 失败、3 警告,其中最关键的一条:
系统是 UEFI 引导,但安装的是 grub-pc(BIOS 版 GRUB)。升级到 Debian 12 后新 GRUB 可能无法写入 ESP,导致无法启动。
4.2 修复 UEFI + grub-pc 不匹配(第二个坑,重要)
这是整次升级中最可能翻车的地方。解决方法很简单——安装 EFI 版 GRUB:
安装时会自动检测已有的 proxmox EFI 引导项并复用,efibootmgr 里 BootOrder 不变,不影响启动。装完先重启一次,确认能正常进入系统。
4.3 切源到 bookworm 并升级
小技巧:用 systemd-run 执行升级,避免 SSH 断连翻车。 大版本升级过程中 openssh-server、网络栈都可能被重启,SSH 会话一旦断开,前台 apt 会被杀掉,系统就处于半升级状态。把它丢给 systemd 独立运行、日志落盘,就稳了:
这一步约 700 个包、600+ MB,我的机器跑了 8 分钟左右。结束后:
重启后验证:
五、第三跳:8.4 → 9.2
流程和上一跳基本一致。
5.1 官方检查 + 顺手处理警告
我的 4 个警告中有两条值得处理:
- 未安装 intel-microcode(CPU 安全补丁):
apt-get install -y intel-microcode - sysctl.conf 里的 IPv6 SLAAC 配置:trixie 不再从
/etc/sysctl.conf读某些早期网络 sysctl,迁移到 sysctl.d:
5.2 切源到 trixie 并升级
完成后 pveversion 显示 9.2.x(Debian 13),重启进入新内核,再跑一遍和 4.3 相同的验证。
5.3 收尾清理
六、让 Web UI 显示 CPU / 硬盘温度
PVE 升级完成,但有个老问题:官方 Web UI 的「节点 → 状态」页不显示温度。这在 PVE 9 里依然没有原生支持(API 里连 thermal 字段都没有),需要社区方案。分两步:
6.1 确认内核传感器可用
一个细节:我机器的 /sys/class/thermal/ 下只有 cooling_device、没有 thermal_zone。加载 x86_pkg_temp_thermal 模块可以补上一个 CPU 封装温度热区:
6.2 安装 GUI 传感器补丁
社区方案 MusclePr/PVE-mods(原 Meliox/PVE-mods 的维护分支,支持 PVE 9.x):
脚本会交互式询问几个问题(是否显示所有核心、温度单位、有无 UPS/风扇等),按需选择即可。它实际做的事是给 /usr/share/perl5/PVE/API2/Nodes.pm(API 输出)和 /usr/share/pve-manager/js/pvemanagerlib.js(前端渲染)打补丁,原始文件自动备份在 /root/PVE-MODS/。
完成后浏览器 Ctrl + F5 强制刷新(不刷新会命中 JS 缓存看不到新面板),「节点 → 摘要」页就会出现温度面板。验证 API:
⚠️ 两个注意事项:
- 每次
apt dist-upgrade升级 pve-manager 后补丁会被覆盖,温度面板消失时重新执行一次bash /root/pve-mod-gui-sensors.sh install即可 - 卸载执行
bash /root/pve-mod-gui-sensors.sh uninstall,会自动恢复原始文件
七、踩坑总结(TL;DR)
- bullseye 已 EOL:清华源下线了它的 Proxmox 仓库,且各镜像的 security 池不完整,需要 USTC + 官方 security 源组合
- UEFI + grub-pc 不匹配:7→8 前先装
grub-efi-amd64,否则升级后可能无法引导 - 大版本升级用
systemd-run跑:防 SSH 断连导致 apt 中途被杀 - 每级升级后必须重启验证:内核、pveproxy、存储、网络一个都不能少
- sysctl.conf 里的 IPv6 配置要迁到 sysctl.d(trixie 行为变化)
- 温度显示:
x86_pkg_temp_thermal模块 + MusclePr/PVE-mods 补丁,升级后需重打






评论 (0)