PVE跨版本升级6.x to 7.x
平滑升级PVE 6.x到7.x
背景
不知觉中,PVE已经更新到版本7,采用Debian 11 (bullseye);在基于QEMU/KVM的虚拟化平台中,PVE算是个不错的选择,尤其对于非商业用户,可以采用开源的版本进行小规模的搭建,对我来说,承载homelabs的架构和技术是个优选的;众所周知,VMware vSphere的Esxi对于螃蟹卡(PC的Realtek网卡)的支持不好,尤其是新版本7,在某些方面不使用了Linux驱动栈,导致安装的时候不能识别网卡,继而无法继续,毕竟VMware是商业软件,面对的都是服务器之类的配件;
在获取PVE新版本发布之后,我尝试将我的后台服务器进行跨版本升级,并记录这个过程;由于我只使用了基础的功能(没有使用ceph和共享存储),所以本次升级平滑;
升级准备
首先基于官方的文档;把整个过程讲述的清楚明了,只要参照这个文档执行下去,就可以完成跨版本升级。

先决条件
- 升级到最新版本的PVE6.4;
- 如果使用了Ceph,则需要先把Ceph Nautilus集群升级到Ceph 15.2 Octopus;
- PVE备份服务器1.1升级到1.2;
- 确保对升级机器的可靠访问,(SSH、IKVM/IPMI或物理访问)
- 一个健康的集群
- 备份重要的VM和CT(防止出现问题)
- 根目录大于4GB的可用空间
- 检查已知的升级问题
测试升级
如果情况比较复杂的话,需要进行足够的测试,如单机升级测试、硬件兼容性测试、虚拟机和容器的在新版本的运行状态、原配置文件对于新版本的兼容等等;
由于我本次是单机升级,所以相对来说比较简单。
预处理
需要集群中每个节点都执行一下操作;首先确保连接到目标机器的链路状态,避免升级中发生中断的情况,不要通过web控制台的shell去执行升级;必须要连接到母机上。
升级到最新版本
apt update && apt upgrade -y
# 可能会遇到不需要的软件包,提示可以移除的
he following packages were automatically installed and are no longer required:
pve-kernel-5.4.114-1-pve pve-kernel-5.4.124-1-pve
Use 'apt autoremove' to remove them.
apt autoremove
预检查脚本
首先使用预检查脚本,检查升级的环境是否符合,并且对于检查结果的提示和警告进行处理;
# 进行初步检查
pve6to7
# 输出
= SUMMARY =
TOTAL: 21
PASSED: 16
SKIPPED: 3
WARNINGS: 2
FAILURES: 0
ATTENTION: Please check the output for detailed information!
# 将会存在2个警告;这2个可以忽略;后面会自动解决
WARN: updates for the following packages are available:
zfs-initramfs, zfs-zed, libnvpair3linux, libuutil3linux, libzfs4linux, zfsutils-linux, libnvpair3linux, libuutil3linux, libzfs4linux, libzpool4linux
WARN: No Debian security repository detected in /etc/apt/sources.list and /etc/apt/sources.list.d/*.list
# 进行全盘检查
pve6to7 --full
备份虚拟机和容器
如果有VM和CT不能停机,可以在执行升级之前进行迁移;但是这个迁移过程是单向的,即从旧的版本到新的版本,反之则不行;意味着升级的顺序需要做些规划和编排。
检查网桥的MAC
升级后,网桥的MAC地址可能会发生改变;在一些场景中,这点影响很大;有2个方法可以规避这个问题;
方案1:使用ifupdown2
新版本中的ifupdown2包的策略进行了一些调整,便于它始终从桥接端口获取Mac地址;如果你在当前6.x的版本安装了ifupdown2,则新版本7的ifupdown2(3.1.0-1+pmx1或更高的版本)向后兼容配置。
方案2:写入Mac地址到配置文件
将当前的Mac地址写入到配置文件中,这样在升级后,就可以继续使用原Mac地址;
使用ip -c link
命令显示当前所有网卡设备的Mac地址;记录下每个接口和其Mac地址,到 /etc/network/interfaces
文件中,使用hwaddress MAC
的语法添加进去;默认情况下,主网桥是vmbr0,以此为例;如果有多个接口的,依次添加。
auto vmbr0
iface vmbr0 inet static
address 192.168.X.Y/24
hwaddress aa:bb:cc:12:34
如果安装ifupdown2,使用 ifreload -a
来应用变更;如果没有安装,则需要重启机器或使用 ifdown vmbr0; ifup vmbr0
(一次性输入两个以分号分分隔的命令)。
更新APT仓库
apt update
apt dist-upgrade # 这条命令会解决上面第1个警告。
变更仓库配置从buster到bullseye;
sed -i 's/buster\/updates/bullseye-security/g;s/buster/bullseye/g' /etc/apt/sources.list
新版本7的PVE使用Debian 11,它为了一致性,把安全库的地址做了改变,上面第一个s替换的就是新版的安全库配置。
我也使用了非企业版的更新源,那么这里也需要进行更新; /etc/apt/sources.list.d/pve-no-subscription.list
# 原配置
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian buster pve-no-subscription
# 更新后的配置;
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bullseye pve-no-subscription
如果使用了Ceph,也同样需要更新
echo "deb http://download.proxmox.com/debian/ceph-octopus Bullseye main" > /etc/apt/sources.list.d/ceph.list
如果有backports行,可以选择删除或注释掉它,因为升级还没有在这个库中的软件包进行测试。
刷新一下APT源
apt update
刷新源列表后,检查所有的源为bullseye;
升级到新版
升级过程取决于系统性能,尤其是根分区的IOPS和带宽,慢速的硬盘估计要1小时或更久,而SSD则5分钟就可以完成。
apt dist-upgrade
# 输出
...
593 upgraded, 110 newly installed, 19 to remove and 0 not upgraded.
Need to get 520 MB of archives.
After this operation, 872 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
在升级过程中,会弹出是否替换配置文件的对话框,这些与PVE无关,可根据自己的情况选择;
最后一步确认;按回车继续,按Ctrl+c终止。
之后会读取变更日志,并且打印出来;上下键滚动,按q退出。
Fetched 520 MB in 1min 18s (6,701 kB/s)
W: (pve-apt-hook) !! ATTENTION !!
W: (pve-apt-hook) You are attempting to upgrade from proxmox-ve '6.4-1' to proxmox-ve '7.0-2'. Please make sure to read the Upgrade notes at
W: (pve-apt-hook) https://pve.proxmox.com/wiki/Upgrade_from_6.x_to_7.0
W: (pve-apt-hook) before proceeding with this operation.
W: (pve-apt-hook)
W: (pve-apt-hook) Press enter to continue, or C^c to abort
对话框1
y继续
Configuration file '/etc/issue'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** issue (Y/I/N/O/D/Z) [default=N] ? y
对话框2
如果要是通过物理控制台登录的,可以选择yes,否则建议选择否;大意为在更新过程中是否自动重启服务;如果是通过SSH或其他方式远程登录的,重启这个远程服务就可能会断开。

对话框3
重启postfix、ssh和cron服务;(这里并不会断开SSH)

对话框4

对话框5
是否添加订阅更新源(付费),如果是购买了付费,可以选择y,否则n
Configuration file '/etc/apt/sources.list.d/pve-enterprise.list'
==> Deleted (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** pve-enterprise.list (Y/I/N/O/D/Z) [default=N] ?n
执行结束后,重启机器;
reboot
升级完成

小瑕疵;这里会显示没有启动任何PVE源;但其实并不影响使用,如果使用了官方源,则可以在非订阅源的最后添加 /pve
;但是国内的清华PVE源现在还不能这么写;官方论坛说在未来的版本会解决这个问题。


后记
如果在升级过程中出现问题,则可以参照官方wiki的升级文档进行解决。