Proxmox VE 7.2-14 (qemu-server: 7.2-10)でVMの起動/VM migration後のResumeに失敗する件の顛末

先日起きたProxmox VE 7.2-14 (qemu-server: 7.2-10)での不具合と、その経過についてです。今は最新版にアップデートすることで解消されるようになっています。

発生事象

CephのSSD交換ついでにパッケージのアップデートもしようかなと気軽に更新した後、SSD交換作業中に退避させていたVMを元のノードに戻そうとLive migrationをしたら、以下のエラーが発生しました。

1
2
RTNETLINK answers: Operation not supported
TASK ERROR: command '/sbin/bridge fdb append 86:A3:C0:F9:F3:25 dev tap1042i0 master static' failed: exit code 255

Live migration時にResumeに失敗したというエラーは出るものの、VMの移動出来ていて電源も入っており、SSHでアクセスできました。
しかし、管理画面から確認するとResume前のsuspend状態と表示されており、実際の状態とProxmox VEの管理状態が不整合を起きているようでした。

Forumの様子

立て続けに2件の不具合投稿が行われました。

報告の内容を見ると、Open vSwitchを使っていてFirewall機能が無効になっていると発生するらしいことが分かりました。

パッケージバージョンの差分

ひとまず、クラスタ3台の内の1台目のアップデートで発生したので、2台目以降は更新作業を停止。
まずはパッケージバージョンの差分を取得します。(当時突貫で取得したログ)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
root@pve02:~# diff <(ssh pve01 pveversion --verbose) <(pveversion --verbose)
1,4c1,4
< proxmox-ve: 7.2-1 (running kernel: 5.15.35-2-pve)
< pve-manager: 7.2-4 (running version: 7.2-4/ca9d43cc)
< pve-kernel-5.15: 7.2-4
< pve-kernel-helper: 7.2-4
---
> proxmox-ve: 7.2-1 (running kernel: 5.15.74-1-pve)
> pve-manager: 7.2-14 (running version: 7.2-14/65898fbc)
> pve-kernel-5.15: 7.2-14
> pve-kernel-helper: 7.2-14
5a6
> pve-kernel-5.15.74-1-pve: 5.15.74-1
9,11c10,12
< ceph: 15.2.16-pve1
< ceph-fuse: 15.2.16-pve1
< corosync: 3.1.5-pve2
---
> ceph: 15.2.17-pve1
> ceph-fuse: 15.2.17-pve1
> corosync: 3.1.7-pve1
18c19
< libknet1: 1.24-pve1
---
> libknet1: 1.24-pve2
21c22
< libpve-access-control: 7.2-2
---
> libpve-access-control: 7.2-5
23,26c24,27
< libpve-common-perl: 7.2-2
< libpve-guest-common-perl: 4.1-2
< libpve-http-server-perl: 4.1-2
< libpve-storage-perl: 7.2-4
---
> libpve-common-perl: 7.2-8
> libpve-guest-common-perl: 4.2-2
> libpve-http-server-perl: 4.1-5
> libpve-storage-perl: 7.2-12
30c31
< lxc-pve: 4.0.12-1
---
> lxc-pve: 5.0.0-3
34,35c35,36
< proxmox-backup-client: 2.2.3-1
< proxmox-backup-file-restore: 2.2.3-1
---
> proxmox-backup-client: 2.2.7-1
> proxmox-backup-file-restore: 2.2.7-1
37,44c38,46
< proxmox-widget-toolkit: 3.5.1
< pve-cluster: 7.2-1
< pve-container: 4.2-1
< pve-docs: 7.2-2
< pve-edk2-firmware: 3.20210831-2
< pve-firewall: 4.2-5
< pve-firmware: 3.4-2
< pve-ha-manager: 3.3-4
---
> proxmox-offline-mirror-helper: 0.5.0-1
> proxmox-widget-toolkit: 3.5.2
> pve-cluster: 7.2-3
> pve-container: 4.3-6
> pve-docs: 7.2-3
> pve-edk2-firmware: 3.20220526-1
> pve-firewall: 4.2-7
> pve-firmware: 3.5-6
> pve-ha-manager: 3.4.0
48c50
< qemu-server: 7.2-3
---
> qemu-server: 7.2-11
51c53
< swtpm: 0.7.1~bpo11+1
---
> swtpm: 0.8.0~bpo11+2
53c55
< zfsutils-linux: 2.1.4-pve1
---
> zfsutils-linux: 2.1.6-pve1

この中に、おそらく原因と思われる変更が入ったのでしょう。

原因となった変更部分

Proxmox VEの開発コードのコミットログを見に行きます。今回は色々探した後でしたが、ひとまず悪いのは qemu-server ではないかと思われたので、そのコミットログを見に行きます。

https://git.proxmox.com/?p=qemu-server.git;a=shortlog

fdb で検索すると、2022-11-13辺りに以下の4件の変更が入っていました。

  • 12 days ago Alexandre Derumier migration : add del_nets_bridge_fdb commit
  • 12 days ago Thomas Lamprecht net devs: avoid registering MAC to fdb if not static
  • 12 days ago Thomas Lamprecht net devs: code cleanup new fdb mac add helper
  • 12 days ago Alexandre Derumier net devs: register vNIC mac to FDB on start/resume

手元の環境やスレッドの情報から、問題が発生するのがLive migrationのResume時と、VMの起動時だったので、最も怪しいのは、一番下の register vNIC mac to FDB on start/resume です。
Proxmox VEをディストリビューションISOでインストールしていれば、この修正されたファイルパスは /usr/share/perl5/PVE/QemuServer.pm になります。

そして、調査中に qemu-server に更新(7.2-10 -> 7.2-11)が入り、Open vSwitchの場合は bridge fdb append コマンドを実行しないように修正されました。

https://git.proxmox.com/?p=qemu-server.git;a=commitdiff;h=fe62da4f97324920a2cc871289f5ece260b1ae54;hp=f81c9843c3c551f2090fd24b97688fe001c49f37

Proxmox VE Test Repositoryからアップデート

サブスクリプション無しでProxmox VEを使用している場合でも、利用できるいくつかのaptリポジトリがあります。
そのうちの一つに Proxmox VE Test Repository があります。

https://pve.proxmox.com/wiki/Package_Repositories#sysadmin_test_repo

今回の修正では、Proxmox VEの開発チームが修正したパッケージを Proxmox VE Test Repository にリリースしてくれました。
スレッドの中でそのパッケージを使って問題が解決したか確認しあっており、問題が無さそうなので Proxmox VE No-Subscription Repository にもリリースする。という流れがになっていました。

もし修正を急いでいて、内容がある程度把握できる軽微なバグ修正の場合であれば、先のgitページのバージョンと見比べながら Proxmox VE Test Repository からパッケージを導入しても良いと思います。

私の場合は、今回の修正を /usr/share/perl5/PVE/QemuServer.pm に手動で適用して動作を確認したあと、Proxmox VE No-Subscription Repository にリリースされるのを待ちました。

2022-11-21 15:00以降の状況

今のところ、問題を引き起こすコマンドが無効になったパッケージ qemu-server: 7.2-11 が Proxmox VE No-Subscription Repository で配布されています。
最新版を入れると、自然とこれ以降のバージョンがインストールされるので、この問題は発生しないと思います。

(事象を発生させてみたい人は qemu-server: 7.2-10 を明示的にインストールしてみてください)

あとがき

Proxmox VE自体はかなり成熟していて、通常の操作ではかなり安定感のあるディストリビューションなのですが、時折このようなバグが紛れ込むことがあります。
調査の参考になれば幸いです。

終わり。

Built with Hugo
テーマ StackJimmy によって設計されています。