Proxmox VE 8から9へアップグレードする:pve8to9チェックからリポジトリ書き換えまでの手順

Photo: panumas nikhomkhai / Pexels
自宅の Proxmox VE 8 を 9 に上げたいけれど、「失敗して VM が全部止まったらどうしよう」と手が止まっている方は多いと思います。
先に結論です。手順は「8.4 の最新まで上げる → pve8to9 --full で問題を潰す → リポジトリを bookworm から trixie に書き換える → apt dist-upgrade → 再起動」の5段階です。 失敗の多くはリポジトリの書き間違いと、事前チェックの飛ばしから起きるとされています。逆に言えば、バックアップを取ってから、チェックスクリプトの警告をゼロにして進めれば、怖い作業ではありません。
この記事は公式 wiki「Upgrade from 8 to 9」の手順を、ミニPC 1 台(クラスタなし・Ceph なし)のホームラボ向けに絞って整理したものです。
始める前に確認する4つのこと
アップグレードに入る前に、次の4点を確認します。
- 全 VM・コンテナのバックアップ:NAS や Proxmox Backup Server に取り、できれば1台はリストアできることも確かめておきます。スナップショットはバックアップの代わりになりません
- root の空き容量:公式では最低 5GB、できれば 10GB 以上とされています。
df -h /で確認します - 画面とキーボードで触れる手段:SSH だけで作業するなら
tmuxかscreenの中で実行します。Web UI のシェル(noVNC コンソール)からの実行は避けるよう公式に書かれています。 アップグレード中に Web UI 自体が再起動されるためです - Proxmox Backup Server を同居させている場合:先に PBS 3 → 4 のアップグレードを済ませます
ミニPCをモニターなしで置いている場合、ネットワークインターフェース名が変わって SSH が戻ってこない、ということが起こり得ます(後述)。作業の日だけでもモニターとキーボードを繋いでおくのが安心です。常時遠隔で触りたいなら IP-KVM という選択肢もあります。
- JetKVM:BIOS 画面から遠隔操作できる小型の IP-KVM。ヘッドレス運用のミニPC向け
ステップ1:8.4 の最新まで上げて pve8to9 を実行する
まず 8 系のまま最新にします。チェックスクリプト pve8to9 は 8.4 の最新パッケージに含まれています。
apt update
apt dist-upgrade
pveversion
pveversion が 8.4.1 以上になっていれば準備完了です。続いてチェックを実行します。
pve8to9 --full
このスクリプトは問題を報告するだけで、何も変更しません。 FAIL と WARN が出た項目を1つずつ直し、再実行して消えるまで繰り返します。ホームラボで出やすいのは次のあたりだと思います。
- systemd-boot のメタパッケージを外すよう勧められる:
proxmox-boot-toolで管理されている環境では不要とされています。自分で systemd-boot を構成した覚えがなければ、指示どおり削除します - UEFI + LVM 環境での GRUB:
/sys/firmware/efiが存在するならapt install grub-efi-amd64を入れておくよう案内されています - 古いコンテナ:PVE 9 は cgroup v2 のみの対応になり、systemd 230 以前のコンテナ(CentOS 7 や Ubuntu 16.04 など)は動かなくなるとされています。該当するコンテナは先に作り直す計画を立ててください
ステップ2:リポジトリを bookworm から trixie に書き換える
PVE 9 のベースは Debian 13(trixie)です。ここが一番間違えやすいところなので、ゆっくり進めます。
まず Debian 側の行を書き換えます。
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
次に、Proxmox のリポジトリを新しい deb822 形式(.sources ファイル) で作ります。サブスクリプションなしのホームラボなら、/etc/apt/sources.list.d/proxmox.sources を次の内容で作成します。
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
そして PVE 8 用の no-subscription の行を消します。 /etc/apt/sources.list に直接書いていることもあれば、/etc/apt/sources.list.d/pve-install-repo.list に入っていることもあります。古い行が残ると bookworm と trixie が混ざり、依存関係が壊れる原因になります。
enterprise リポジトリ(pve-enterprise.list)は、サブスクリプションがなければ無効のままにしておきます。有効なままだと apt update で 401 エラーになります。
最後に確認します。
apt update
apt policy
apt policy の出力に bookworm が1行も残っていないこと、pve-no-subscription の trixie が見えていることを確かめます。
ステップ3:dist-upgrade して再起動する
apt dist-upgrade
所要時間は SSD なら数分、遅い HDD だと1時間以上かかることもあるとされています。途中で設定ファイルをどうするか聞かれるので、公式の目安に沿って答えます。
| ファイル | 目安 |
|---|---|
/etc/issue | 現在のものを残す(表示だけの違い) |
/etc/lvm/lvm.conf | 自分で変更していなければメンテナ版を入れる |
/etc/ssh/sshd_config | 基本はメンテナ版で問題ないとされる。独自設定があれば差分を確認 |
/etc/default/grub | 迷ったら現在のものを残す |
終わったら、もう一度 pve8to9 を実行して、追加・削除を勧められるパッケージがないか確認してから再起動します。
pve8to9
reboot
もし途中で回線が切れるなどして中断した場合は、apt -f install で再開できるとされています。
再起動後に確認すること
- Web UI:ブラウザのキャッシュをクリアするか強制再読み込みしてから開きます。古い画面のまま表示が崩れることがあります
- ネットワーク:新しいカーネルで NIC の名前が変わることがあると公式に書かれています。SSH が戻ってこないときは、画面で
ip aを見て/etc/network/interfacesのインターフェース名と合っているかを確認します。名前を固定するpve-network-interface-pinningというツールも用意されています - PCI パススルーしている VM:カーネル 6.14 で起動しなくなる例が報告されています。その場合は古いカーネルで起動して切り分けます
- sysctl の設定:
/etc/sysctl.confは読まれなくなったので、独自の設定は/etc/sysctl.d/配下に移します - リポジトリの整理(任意):
apt modernize-sourcesで残りの.listを.sourcesに変換できます。最初はnと答えて変更内容だけ確認するのが安全です
まとめ
- 手順は 8.4 最新 →
pve8to9 --full→ trixie へ書き換え →dist-upgrade→ 再起動の5段階 - 始める前に 全ゲストのバックアップと root の空き 10GB 程度を確保。Web UI のシェルからは実行しない
pve8to9は何も変更しない。警告が消えるまで直してから進む- 一番の落とし穴はリポジトリ。bookworm の行を残さない、no-subscription は
.sources形式で作る - 再起動後は NIC 名の変化と パススルー VM を確認する。ヘッドレス運用なら作業日だけでも画面を繋いでおく
バックアップさえあれば、最悪のときも「入れ直して戻す」ができます。その安心を先に作ってから、落ち着いて進めてください。
運営者が作った Excel テンプレートを BOOTH で配布しています。IT 資産管理台帳(無料 Lite 版あり) / IT 資格の学習管理シート


