Proxmoxの7から8へのアップグレード
- 2024.12.25
- パソコン
仮想環境といえばProxmox
ホームラボや社内開発環境でよく使う仮想環境といえばProxmoxです。私はVersion6の時から使っています。
以前一緒に仕事をしていたアメリカの会社のエンジニアから教えてもらいましたが、とても重宝しているツールの一つです。
その時から4つのProxmox環境を自宅で立ち上げ、つい最近Version7からVersion8にアップグレードをしました。色々機能が追加されてきているのですが、Version8が2023年6月22日に公開されてからもう1年半経ちました。
そろそろ使っていないと話についていけなくなるので、導入したいと思います。
今までは新しいバージョンを入れるときは新規インストールしていましたが、今回はアップグレードしたいと思います。
なぜかというと、2011年のIntel Core iシリーズ第二世代のSandy Bridgeと同じ世代のXeonで動いているデスクトップPCから、ProxmoxのインストールされているSataSSDをRyzen9 4900HのミニPCに移植しました。その際に、アップグレードも一緒に行ってみたというわけです。
いろいろ問題が発生したので、記録として残しておきます。
アップグレード前の確認
ProxmoxはDebianベースで、VE7はDebian11、VE8はDebian12をベースにしています。OSカーネルごと一気にアップグレードしてしまいます。
まずは、ハードウェアサポートされるか確認します。
VE7ではCore2DuoやDell PERC 5/6 RAID Controller、IDE HDDなどがサポートされましたが、それらはVE8ではサポートされません。
CPU的に言うと、IntelのCore iシリーズの第2世代(一部の低電圧モデルは除く)以降、AMDのRyzenのZEN第一世代(Ryzen1000シリーズ)以降であればサポートされています。かなり古いハードもサポートされていますね。
VE7でも必要と言えば必要なのですが、仮想化支援機構(VT-x/VT-d、AMD-V/IOMMU)が搭載されていないCPUはVE8ではサポートされないようです。
ざっくりいうと10年以上のハードを使用する場合は要確認といったレベルでしょうか。金欠エンジニアにはとてもありがたいです。
今回は、マザーボードが変更になったので、チップセットやグラフィック、NICも含めて全部変わっています。
VE8からはLinuxカーネル6.2を採用しています。ZFSの強化やWebUIの更新、Cephの新バージョン対応など、いろいろ向上しているのでもっと早く切り替えればよかったですね。
基本的なアップグレード方法
NICの変更対応
これは本来はアップグレードとは関係ない部分ですが、行った作業なので載せておきます。
そもそもアップグレードはインターネットにつながらないとできないので、そのための準備となります。
マザーボードを変更したので、NICが変更になりました。OSがサポートする範囲内なら勝手に認識はするのですが、NIC名が変わってしまいました。
マザーボード変更後のNIC一覧は「ip a」コマンドなどで確認できます。詳細は省略しますが、以下のように出ていました。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: eno1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
3: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr0 state UP group default qlen 1000
4: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
5: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
「/etc/network/interfaces」のファイルを確認します。
root@pve:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback
iface enp3s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.1.50/24
gateway 192.168.1.254
bridge-ports enp3s0
bridge-stp off
bridge-fd 0
iface wlx503eaa32210b inet manual
Debianのネットワーク設定ファイルでifaceはネットワークインターフェースのどれを使うかをOS上で定義する設定です。そして、Proxmoxでデフォルトで内部ネットワークとして使用するのが「vmbr0」です。
「vmbr0」は仮想インターフェースなので、それ用にどのインターフェースを使うという設定が必要となります。
私の環境では、以前は「enp3s0」がProxmoxで使用されていましたが、新しいマザーボードではその名前のNICはありませんね。
どのNICでもよいのですが、私の環境ですと「eno1」と「enp4s0」が有線、「wlp3s0」が無線でした。ちなみに、このPCは先日メインマシンから引退したMinisforumのHM90です。
それで、2.5Gbpsの「enp4s0」をメインとして使用することにします。このNICはOSでアクティブになっている必要があります。
とりあえず、Proxmoxをネットにつなげることが目的なので、設定ファイルの「enp3s0」を「enp4s0」に書き換えて保存し、OSを再起動します。
これでパソコンがインターネットにつながるようになりました。
グラフィックカードのドライバインストール
この項目も同じPC上でハードウェアを変えずにアップグレードする人には不要な項目です。
私の場合はIntelマザーボードにRageonを古いカードを搭載していましたが、新しいPCはAMDのZen2の統合GPUに変更になりましたので、その対応です。
root@pve:~# dmesg | grep -i vga
[ 0.498848] pci 0000:06:00.0: vgaarb: setting as boot VGA device
[ 0.498848] pci 0000:06:00.0: vgaarb: bridge control possible
[ 0.498848] pci 0000:06:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
[ 0.498848] vgaarb: loaded
[ 1.173614] ACPI: video: Video Device [VGA] (multi-head: yes rom: no post: no)
[ 5.375384] snd_hda_intel 0000:06:00.1: Handle vga_switcheroo audio client
[ 7.662095] amdgpu 0000:06:00.0: vgaarb: deactivate vga console
root@pve:~#
1行目からGPUは認識していることが分かります。
7行目からGPU内臓のオーディオが検出されていることが分かります。
8行目からVGAデバイスとしてアクティブであることが分かります。
しかし、AMDGPU-PROのドライバーがそもそも当たっていないので、まずそのドライバをあてます。
まず、必要なヘッダーをインストールしておきます。
root@pve:~# apt install -y pve-headers
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer required:
inetutils-telnet pve-kernel-5.13.19-3-pve pve-kernel-5.15.39-4-pve telnet
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
proxmox-default-headers proxmox-headers-6.8 proxmox-headers-6.8.12-5-pve
The following NEW packages will be installed:
proxmox-default-headers proxmox-headers-6.8 proxmox-headers-6.8.12-5-pve pve-headers
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 13.7 MB of archives.
After this operation, 97.1 MB of additional disk space will be used.
Get:1 http://download.proxmox.com/debian/pve bookworm/pve-no-subscription amd64 proxmox-headers-6.8.12-5-pve amd64 6.8.12-5 [13.7 MB]
Get:2 http://download.proxmox.com/debian/pve bookworm/pve-no-subscription amd64 proxmox-headers-6.8 all 6.8.12-5 [10.3 kB]
Get:3 http://download.proxmox.com/debian/pve bookworm/pve-no-subscription amd64 proxmox-default-headers all 1.1.0 [1,848 B]
Get:4 http://download.proxmox.com/debian/pve bookworm/pve-no-subscription amd64 pve-headers all 8.3.0 [2,868 B]
Fetched 13.7 MB in 2s (6,723 kB/s)
Selecting previously unselected package proxmox-headers-6.8.12-5-pve.
(Reading database ... 91645 files and directories currently installed.)
Preparing to unpack .../proxmox-headers-6.8.12-5-pve_6.8.12-5_amd64.deb ...
Unpacking proxmox-headers-6.8.12-5-pve (6.8.12-5) ...
Selecting previously unselected package proxmox-headers-6.8.
Preparing to unpack .../proxmox-headers-6.8_6.8.12-5_all.deb ...
Unpacking proxmox-headers-6.8 (6.8.12-5) ...
Selecting previously unselected package proxmox-default-headers.
Preparing to unpack .../proxmox-default-headers_1.1.0_all.deb ...
Unpacking proxmox-default-headers (1.1.0) ...
Selecting previously unselected package pve-headers.
Preparing to unpack .../pve-headers_8.3.0_all.deb ...
Unpacking pve-headers (8.3.0) ...
Setting up proxmox-headers-6.8.12-5-pve (6.8.12-5) ...
Setting up proxmox-headers-6.8 (6.8.12-5) ...
Setting up proxmox-default-headers (1.1.0) ...
Setting up pve-headers (8.3.0) ...
AMDのサイトにDebian用のドライバーはありません。それで、Debian12と作りが似ているUbuntu22.04用のドライバーを準備します。
※UbuntuはDebianベースのLinuxOSであり、同じカーネルを使っているバージョンという意味です
https://www.amd.com/en/resources/support-articles/release-notes/RN-AMDGPU-UNIFIED-LINUX-23-30.html
root@pve:~# wget https://repo.radeon.com/amdgpu-install/23.30.2/ubuntu/jammy/amdgpu-install_5.7.50702-1_all.deb
--2024-12-22 13:11:58-- https://repo.radeon.com/amdgpu-install/23.30.2/ubuntu/jammy/amdgpu-install_5.7.50702-1_all.deb
Resolving repo.radeon.com (repo.radeon.com)... 104.90.5.240, 23.44.236.233, 2600:140f:2e00::b856:7038, ...
Connecting to repo.radeon.com (repo.radeon.com)|104.90.5.240|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16632 (16K) [application/octet-stream]
Saving to: ‘amdgpu-install_5.7.50702-1_all.deb’
amdgpu-install_5.7.50702-1_al 100%[=================================================>] 16.24K --.-KB/s in 0.002s
2024-12-22 13:11:58 (9.97 MB/s) - ‘amdgpu-install_5.7.50702-1_all.deb’ saved [16632/16632]
root@pve:~# ls
amdgpu-install_5.7.50702-1_all.deb
ダウンロードしたドライバをインストールする。また、抜けがないかも確認する。
root@pve:~# dpkg -i /root/amdgpu-install_5.7.50702-1_all.deb
Selecting previously unselected package amdgpu-install.
(Reading database ... 103342 files and directories currently installed.)
Preparing to unpack .../amdgpu-install_5.7.50702-1_all.deb ...
Unpacking amdgpu-install (5.7.50702-1683306.22.04) ...
Setting up amdgpu-install (5.7.50702-1683306.22.04) ...
root@pve:~# apt --fix-broken install
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
root@pve:~# amdgpu-install --usecase=graphics --no-dkms
INFO: i386 architecture has not been enabled with dpkg.
Installation of 32-bit run time has been excluded.
・・・
0 upgraded, 65 newly installed, 0 to remove and 0 not upgraded.
Need to get 64.7 MB of archives.
After this operation, 228 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
・・・
Setting up amdgpu-lib (1:5.7.50702-1683306.22.04) ...
Processing triggers for fontconfig (2.14.1-4) ...
Processing triggers for libc-bin (2.36-9+deb12u9) ...
Processing triggers for man-db (2.11.2-2) ...
インストールが終わったら、確認します。問題なければ再起動します。
root@pve:~# dmesg | grep amdgpu
[ 7.637101] [drm] amdgpu kernel modesetting enabled.
[ 7.651280] amdgpu: Virtual CRAT table created for CPU
[ 7.651312] amdgpu: Topology: Add CPU node
[ 7.651512] amdgpu 0000:06:00.0: enabling device (0006 -> 0007)
[ 7.654192] amdgpu 0000:06:00.0: amdgpu: Fetched VBIOS from VFCT
[ 7.654195] amdgpu: ATOM BIOS: 113-RENOIR-031
[ 7.662095] amdgpu 0000:06:00.0: vgaarb: deactivate vga console
[ 7.662099] amdgpu 0000:06:00.0: amdgpu: Trusted Memory Zone (TMZ) feature enabled
[ 7.662103] amdgpu 0000:06:00.0: amdgpu: MODE2 reset
[ 7.662214] amdgpu 0000:06:00.0: amdgpu: VRAM: 512M 0x000000F400000000 - 0x000000F41FFFFFFF (512M used)
[ 7.662217] amdgpu 0000:06:00.0: amdgpu: GART: 1024M 0x0000000000000000 - 0x000000003FFFFFFF
[ 7.662359] [drm] amdgpu: 512M of VRAM memory ready
[ 7.662361] [drm] amdgpu: 31859M of GTT memory ready.
[ 7.663537] amdgpu 0000:06:00.0: amdgpu: Will use PSP to load VCN firmware
[ 8.433723] amdgpu 0000:06:00.0: amdgpu: RAS: optional ras ta ucode is not available
[ 8.442616] amdgpu 0000:06:00.0: amdgpu: RAP: optional rap ta ucode is not available
[ 8.447302] amdgpu 0000:06:00.0: amdgpu: Secure display: Generic Failure.
[ 8.447308] amdgpu 0000:06:00.0: amdgpu: SECUREDISPLAY: query securedisplay TA failed. ret 0x0
[ 8.448231] amdgpu 0000:06:00.0: amdgpu: SMU is initialized successfully!
[ 8.450650] snd_hda_intel 0000:06:00.1: bound 0000:06:00.0 (ops amdgpu_dm_audio_component_bind_ops [amdgpu])
[ 8.458328] kfd kfd: amdgpu: Allocated 3969056 bytes on gart
[ 8.458344] kfd kfd: amdgpu: Total number of KFD nodes to be created: 1
[ 8.458480] amdgpu: Virtual CRAT table created for GPU
[ 8.458732] amdgpu: Topology: Add dGPU node [0x1636:0x1002]
[ 8.458734] kfd kfd: amdgpu: added device 1002:1636
[ 8.458744] amdgpu 0000:06:00.0: amdgpu: SE 1, SH per SE 1, CU per SH 8, active_cu_number 8
[ 8.458749] amdgpu 0000:06:00.0: amdgpu: ring gfx uses VM inv eng 0 on hub 0
[ 8.458751] amdgpu 0000:06:00.0: amdgpu: ring gfx_low uses VM inv eng 1 on hub 0
[ 8.458753] amdgpu 0000:06:00.0: amdgpu: ring gfx_high uses VM inv eng 4 on hub 0
[ 8.458755] amdgpu 0000:06:00.0: amdgpu: ring comp_1.0.0 uses VM inv eng 5 on hub 0
[ 8.458756] amdgpu 0000:06:00.0: amdgpu: ring comp_1.1.0 uses VM inv eng 6 on hub 0
[ 8.458758] amdgpu 0000:06:00.0: amdgpu: ring comp_1.2.0 uses VM inv eng 7 on hub 0
[ 8.458760] amdgpu 0000:06:00.0: amdgpu: ring comp_1.3.0 uses VM inv eng 8 on hub 0
[ 8.458762] amdgpu 0000:06:00.0: amdgpu: ring comp_1.0.1 uses VM inv eng 9 on hub 0
[ 8.458763] amdgpu 0000:06:00.0: amdgpu: ring comp_1.1.1 uses VM inv eng 10 on hub 0
[ 8.458765] amdgpu 0000:06:00.0: amdgpu: ring comp_1.2.1 uses VM inv eng 11 on hub 0
[ 8.458767] amdgpu 0000:06:00.0: amdgpu: ring comp_1.3.1 uses VM inv eng 12 on hub 0
[ 8.458769] amdgpu 0000:06:00.0: amdgpu: ring kiq_0.2.1.0 uses VM inv eng 13 on hub 0
[ 8.458771] amdgpu 0000:06:00.0: amdgpu: ring sdma0 uses VM inv eng 0 on hub 8
[ 8.458773] amdgpu 0000:06:00.0: amdgpu: ring vcn_dec uses VM inv eng 1 on hub 8
[ 8.458774] amdgpu 0000:06:00.0: amdgpu: ring vcn_enc0 uses VM inv eng 4 on hub 8
[ 8.458776] amdgpu 0000:06:00.0: amdgpu: ring vcn_enc1 uses VM inv eng 5 on hub 8
[ 8.458778] amdgpu 0000:06:00.0: amdgpu: ring jpeg_dec uses VM inv eng 6 on hub 8
[ 8.464730] [drm] Initialized amdgpu 3.57.0 20150101 for 0000:06:00.0 on minor 0
[ 8.466467] amdgpu 0000:06:00.0: [drm] Cannot find any crtc or sizes
root@pve:~# lsmod | grep amdgpu
amdgpu 13271040 0
amdxcp 12288 1 amdgpu
drm_exec 12288 1 amdgpu
gpu_sched 61440 1 amdgpu
drm_buddy 20480 1 amdgpu
drm_suballoc_helper 12288 1 amdgpu
drm_ttm_helper 12288 1 amdgpu
ttm 98304 2 amdgpu,drm_ttm_helper
drm_display_helper 225280 1 amdgpu
i2c_algo_bit 16384 1 amdgpu
video 73728 1 amdgpu
root@pve:~# reboot
再起動後に、インストールしたドライバが正しく読み込まれていることを確認します。
root@pve:~# lspci | grep VGA
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Renoir (rev f0)
これで、新しいPCのGPUは正しく読み込まれています。
OSアップグレードの準備
DebianはUbuntuやCentOSと同じくLinuxなので、アプリケーションやカーネルなどの最新のものはリポジトリから取得します。パッケージ管理にはaptコマンドを使用しています。
それで、まずはリポジトリを書き換えます。
# nano /etc/apt/sources.list
変更前
deb http://ftp.jp.debian.org/debian bullseye main contrib
deb http://security.debian.org bullseye-security main
deb http://ftp.jp.debian.org/debian bullseye-updates main
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription
変更後
deb http://ftp.jp.debian.org/debian bookworm main contrib
deb http://security.debian.org bookworm-security main
deb http://ftp.jp.debian.org/debian bookworm-updates main
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
これで、今まで見ていたProxmoxVE7(Debian11ベース)のリポジトリからProxmoxVE8(Debian12ベース)のリポジトリを見るようになります。
OSのアップグレード
以下のコマンドを実行して、OSをアップグレードする。
apt update
apt full-upgrade
アップグレード中にはユーザー操作が必要な個所が何か所かあります。ダウンロードする量も多いので、私の場合は2時間くらいかかったように思います。
アップグレード後の後処理
エンタープライズリポジトリが再度有効になっているので、それを無効に戻します。
nano /etc/apt/sources.list.d/pve-enterprise.list
以下の行をコメントアウトします。
# deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
最後にさらにアップグレードがないかもう一度確認します。
apt update
apt dist-upgrade
サブスクリプションメッセージを非表示にする(任意)
無償リポジトリを使用すると、Web UIにサブスクリプションがない旨の通知が表示されます。
ログイン時に毎回表示されるこのダイアログが嫌な場合は、消すことができます。
通知を出しているスクリプトを修正します。
nano /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
CTRL+Wで「No valid subscription」検索して、以下の部分を見つけます。
555 Proxmox.Utils.API2Request(
556 {
557 url: '/nodes/localhost/subscription',
558 method: 'GET',
559 failure: function(response, opts) {
560 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
561 },
562 success: function(response, opts) {
563 let res = response.result;
564 if (res === null || res === undefined || !res || res
565 .data.status.toLowerCase() !== 'active') {
566 Ext.Msg.show({
567 title: gettext('No valid subscription'),
568 icon: Ext.Msg.WARNING,
569 message: Proxmox.Utils.getNoSubKeyHtml(res.data.url),
570 buttons: Ext.Msg.OK,
571 callback: function(btn) {
572 if (btn !== 'ok') {
573 return;
574 }
575 orig_cmd();
576 },
577 });
578 } else {
579 orig_cmd();
580 }
581 },
582 },
583 );
それを以下のように「Ext.Msg.show」を実行せずに「orig_cmd()」のみ実行して、ダイアログを表示しないようにします。
562 success: function(response, opts) {
563 let res = response.result;
564 /*
565 if (res === null || res === undefined || !res || res
566 .data.status.toLowerCase() !== 'active') {
567 Ext.Msg.show({
568 title: gettext('No valid subscription'),
569 icon: Ext.Msg.WARNING,
570 message: Proxmox.Utils.getNoSubKeyHtml(res.data.url),
571 buttons: Ext.Msg.OK,
572 callback: function(btn) {
573 if (btn !== 'ok') {
574 return;
575 }
576 orig_cmd();
577 },
578 });
579 } else {
580 */
581 orig_cmd();
582 // }
583 },
保存して、最後にサービスを再起動します。
systemctl restart pveproxy
アップブレード後にWindowsのVMが立ち上がらなくなるのを直す
アップグレードの確認として、VMが立ち上がるのか、インターネットにつながるかなどを順番に確認する。
そうすると、Linuxは問題ないのに、WindowsのVMが立ち上がらなくなっている。
swtpm_setup: Not overwriting existing state file.
kvm: Cannot use spice audio without -spice
stopping swtpm instance (pid 61544) due to QEMU startup error
TASK ERROR: start failed: QEMU exited with code 1
VMのハードウェアのページを開く。
※このVMはBIOSがUEFIになっていて、EFIも追加されている。vmwareから引っ越してきたVMのためにこのようなことになっていますが、SeaBIOSでも操作内容は同じです。
Displayをダブルクリックして開く。
GPUを「VirtIO-GPU」に変更して、VRAMも設定する。
これで立ち上がるようになる。
なお、SPICEは私の環境ではうまく動いていないので、ここでは触れないこととする。
まとめ
Proxmoxはできるだけ、新しいバージョンで使った方がいい。
新しく追加したノードとバージョンを合わせるためにもそうすることをお勧めする。
アップグレードはひっかかるポイントが多いので、よく準備してから行ってほしい。
(付録)ProxmoxでWindows11を使うには
ちなみに、Windows11をインストールしたり、Windows10からアップグレードする際に、引っかかる人が多いので参考情報を書いておく。
Windows11を普通に動かすためには、Intel Core iシリーズの第8世代以降、またはRyzen2000以降が必要なので、ホストPCは当然それをクリアしている必要がある。
VM上のCPUは物理的に対応している「host」を選んでおけば問題ない。
加えてVE7以降で対応したTPMモジュールをインストールする必要がある。
これで、Windows11のインストール要件を満たせるはずだ。
-
前の記事
Zabbix7.0でサーバーを監視する(エージェント編) 2024.12.22
-
次の記事
記事がありません