让代码更简单

Proxmox VE 7.3 一步到位升级 9.x(附 Web UI 温度显示)

一台跑了很久的 PVE 7.3(Debian 11)单节点宿主机,趁着 VM 全部关机的空档,一口气完成了 7.3 → 7.4 → 8.4 → 9.2 的三级跳,并顺手解决了 Web UI 不显示温度的问题。全程约 1 小时,零数据损失。这篇文章记录完整的升级路径、踩过的坑和每一步的验证方法,方便有相同需求的朋友照着操作。

PVE 7.3 一步到位升级 9.x

一、环境与升级路径

先交代背景,我的环境如下:

项目升级前
PVE 版本7.3-3
Debian11.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 月):

镜像bullseyebookwormtrixie
清华 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 先跑官方检查工具

重点关注 FAILURESWARNINGS。我的结果是 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 个警告中有两条值得处理:

  1. 未安装 intel-microcode(CPU 安全补丁):apt-get install -y intel-microcode
  2. 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:

⚠️ 两个注意事项:

  1. 每次 apt dist-upgrade 升级 pve-manager 后补丁会被覆盖,温度面板消失时重新执行一次 bash /root/pve-mod-gui-sensors.sh install 即可
  2. 卸载执行 bash /root/pve-mod-gui-sensors.sh uninstall,会自动恢复原始文件

七、踩坑总结(TL;DR)

  1. bullseye 已 EOL:清华源下线了它的 Proxmox 仓库,且各镜像的 security 池不完整,需要 USTC + 官方 security 源组合
  2. UEFI + grub-pc 不匹配:7→8 前先装 grub-efi-amd64,否则升级后可能无法引导
  3. 大版本升级用 systemd-run:防 SSH 断连导致 apt 中途被杀
  4. 每级升级后必须重启验证:内核、pveproxy、存储、网络一个都不能少
  5. sysctl.conf 里的 IPv6 配置要迁到 sysctl.d(trixie 行为变化)
  6. 温度显示x86_pkg_temp_thermal 模块 + MusclePr/PVE-mods 补丁,升级后需重打

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐