PVE集群迁移报错:带VLAN ID虚拟机无法迁移(实测可解)
编辑
前阵子折腾PVE集群,遇到个很典型的问题:不带VLAN ID的虚拟机迁移一切正常,只要给虚拟机网卡设置了VLAN ID,迁移就直接报错,提示“QEMU: no physical interface on bridge 'vmbr0'”,折腾了大半天终于搞定,整理成教程,给遇到同样问题的朋友避坑。
先交代下我的环境,避免大家对号入座出错:
PVE集群(多节点,本次以节点zwbcc2为例)
节点网卡:nic0(物理网卡,绑定vmbr0)、nic1(备用)、wlp82s0(无线,未使用)
网桥配置:vmbr0,静态IP 10.0.0.252/24,网关10.0.0.1
报错核心:带VLAN Tag的虚拟机迁移失败,无VLAN的正常,报错日志如下:
Logical volume "vm-123-disk-0" created.
Logical volume pve/vm-123-disk-0 changed.
netdev net0: using 'host_mtu=1500' for migration compat
QEMU: no physical interface on bridge 'vmbr0'
QEMU: kvm: -netdev type=tap,id=net0,ifname=tap123i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on: network script /usr/libexec/qemu-server/pve-bridge failed with status 6400
TASK ERROR: start failed: QEMU exited with code 1一、报错原因(一句话说透)
问题很简单:你的PVE节点网桥vmbr0 没有开启VLAN感知功能。
当虚拟机设置VLAN ID时,PVE会要求底层网桥支持802.1Q VLAN标签(也就是VLAN-aware),如果没开启这个功能,QEMU在迁移后启动虚拟机时,无法创建对应的VLAN网络接口,直接报错退出。而不带VLAN的虚拟机走默认VLAN 1,不需要VLAN检查,所以能正常迁移。
查看你当前的网络配置(cat /etc/network/interfaces),确实缺少VLAN相关配置,这就是问题根源:
# 你当前的vmbr0配置(缺少VLAN支持)
auto vmbr0
iface vmbr0 inet static
address 10.0.0.252/24
gateway 10.0.0.1
bridge-ports nic0
bridge-stp off
bridge-fd 0二、修复步骤(全程复制粘贴,无需复杂操作)
核心操作:给所有PVE集群节点的vmbr0添加VLAN感知配置,确保所有节点配置一致(重点!只改一个节点没用),步骤如下,全程不重启节点、不影响现有虚拟机运行。
步骤1:编辑网络配置文件
登录需要修改的PVE节点(先从zwbcc2开始,其他节点依次操作),执行命令编辑网络配置:
nano /etc/network/interfaces步骤2:替换vmbr0配置(关键)
找到vmbr0对应的配置段,替换成下面的内容(只增加3行VLAN相关配置,其他不变):
auto vmbr0
iface vmbr0 inet static
address 10.0.0.252/24
gateway 10.0.0.1
bridge-ports nic0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes # 开启VLAN感知(核心)
bridge-vids 2-4094 # 放行所有VLAN(避免后续新增VLAN再报错)
bridge-pvid 1 # 默认VLAN为1(无VLAN标签的流量走这里)说明:这3行配置的作用很简单,bridge-vlan-aware yes开启VLAN支持,bridge-vids 2-4094放行所有VLAN(不用一个个添加,省心),bridge-pvid 1保留默认VLAN,确保无VLAN的虚拟机正常使用。
步骤3:保存退出
编辑完成后,按以下快捷键保存退出:
Ctrl + O (输入后按回车,确认保存)
Ctrl + X (退出编辑界面)
步骤4:重启网络(立即生效,不中断业务)
执行以下命令重启网络服务,无需重启节点,不影响现有虚拟机运行:
ifreload -a如果执行后提示错误,可尝试备用命令(旧版PVE适用):
systemctl restart networking步骤5:所有集群节点重复以上操作
重点提醒:PVE集群迁移要求所有节点的网络配置(尤其是vmbr0和VLAN相关)完全一致,所以每一台集群节点都要重复步骤1-4,给vmbr0添加那3行VLAN配置。
三、验证配置(确保生效,避免白忙活)
所有节点配置完成后,在任意节点执行以下命令,验证VLAN感知是否开启:
bridge vlan show dev vmbr0如果输出中包含“vlan_filtering 1”,说明配置生效(vlan_filtering=1就是开启VLAN感知的标志),示例输出如下(无需完全一致,重点看vlan_filtering):
vmbr0 1 PVID Egress Untagged
vmbr0 2-4094四、常见问题(避坑指南)
1. 迁移后虚拟机仍报错?
大概率是某台节点没改配置,或配置不一致,重新检查所有节点的/etc/network/interfaces,确保vmbr0都有那3行VLAN配置,且bridge-ports都是nic0(和你的配置一致)。
2. 虚拟机被锁定(显示migrate)?
迁移失败后,虚拟机可能会被锁定,无法再次迁移,执行以下命令解锁(123替换成你的虚拟机ID):
qm unlock 1233. 开启VLAN后,无VLAN的虚拟机无法联网?
检查bridge-pvid 1是否添加,这行配置确保无VLAN标签的流量走默认VLAN 1,缺少这行会导致无VLAN的虚拟机无法正常通信。
4. 交换机需要配置吗?
如果你的PVE节点上联交换机,需要将交换机端口设为Trunk模式,并允许对应VLAN通过(如果用了bridge-vids 2-4094,就放行所有VLAN),否则VLAN流量无法跨设备传输。以Cisco交换机为例,参考配置:
interface GigabitEthernet0/1
switchport mode trunk
switchport trunk allowed vlan 2-4094
switchport trunk native vlan 1五、总结
其实这个问题很基础,就是PVE集群VLAN配置不一致导致的,核心就是给所有节点的vmbr0开启VLAN感知,添加3行关键配置,全程不用重启节点,10分钟就能搞定。
我最开始只改了目标节点,迁移还是报错,后来才发现集群节点配置必须完全一致,踩了个小坑,分享出来希望大家少走弯路。
如果按照教程操作还是有问题,可留言你的节点配置和报错日志,帮你排查。
- 0
-
分享