vfio vfio_iommu_type1 vfio_pci vfio_virqfd
Proxmox上のVMにデスクトップ環境を構築
作成日 | : | 2025/02/11 |
---|---|---|
最終更新日 | : | 2025/02/11 |
Proxmox上のVMにデスクトップ環境を構築
作成日 | : | 2025/02/11 |
---|---|---|
最終更新日 | : | 2025/02/11 |
概要
仮想化環境をESXi(VMware vSphere Hypervisor)からProxmoxに変更してみます。 Proxmoxの操作はESXi同様、Webブラウザから行うため、ESXiをインストールした端末ではたいていの場合モニタが余ってしまいます。 一方Proxmox上に構築したVM(仮想マシン)のデスクトップ環境を操作するとき、Webブラウザから操作する形となり別の端末が必要になります。
そこで、Proxmox上の仮想マシンをProxmoxを導入した端末でネイティブ動作しているかのように見せられないか試してみました。 なお、Proxmoxは8.3-1を使用しました。実施するにあたり、いくつかのサイト[1][2]を参考にしました。
PCIパススルーの設定
ProxmoxでPCIパススルーをするには、いくつかコンソールから設定します。sshでログインし、設定を変更します。コツとしては、ホストとなるProxmoxにデバイスがbindされないように無効化する必要があります。
VFIOの有効化
まずは、VFIOを有効化します。VFIOはユーザースペースからデバイスを操作するためのフレームワークで、今回はホストからデバイスを分離するために使用します。 /etc/modules に以下を追記し、 VFIOモジュールを有効化します。
カーネルモジュール関連の変更を行った際は、忘れずにinitramfsを再構築し、再起動します。
# update-initramfs -u -k all # reboot
再起動後、VFIOが有効になっているか確認します。
# lsmod | grep vfio
デバイスの無効化
無効化するデバイスを探すためにlspciコマンドを使用します。ベンダIDとデバイスIDを見つけるために、-nnオプションをつけて実行します。例として、グラフィックボードを探してみます。ほかにもUSBインターフェースボードも探して値を確認しました。
# lspci -nn | grep NVIDIA 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK208B [GeForce GT 730] [10de:1287] (rev a1) 01:00.1 Audio device [0403]: NVIDIA Corporation GK208 HDMI/DP Audio Controller [10de:0e0f] (rev a1) #
見つかったデバイスの情報を、/etc/modprobe.d/vfio.conf への追記します。必要なデバイス分記述します。
options vfio-pci ids=ベンダID:デバイスID
カーネル起動パラメータの変更
このままでは、特にUSBインターフェースボードでIOMMUデバイスグループがほかのPCIデバイスと重複してしまう問題がありました。 カーネルの起動パラメータとして、pcie_acs_override=downstream,multifunctionを追加します[3]。具体的なファイルとしては、/etc/default/grubです。
GRUB_CMDLINE_LINUX_DEFAULTの値に、スペース区切りで追加します。
GRUB_CMDLINE_LINUX_DEFAULT="quiet pcie_acs_override=downstream,multifunction"
設定変更後、update-grubコマンドを発行し、Grubに反映します。
# update-grub
これで、再起動すると、下準備完了です。
仮想マシンの設定変更
仮想マシン(VM)にグラフィックボードとUSBインターフェースボードを追加します。 まずは、Proxmoxの管理インターフェースからVMを選択し、ハードウェアを選択します。画面上部の追加ボタンから、PCIデバイスを選択します。
![[VM]-[ハードウェア] [VM]-[ハードウェア]](/image/misc/proxmox_vminfo_before.png)
Rawデバイスを選択し、デバイスから当該デバイスを選択します。 グラフィックボードはプライマリGPUと全機能にチェックを入れます。

USBインターフェースボードは全機能のみにチェックを入れます。

設定が完了すると、以下のように表示されます。

この状態でVM起動すると、PCIパススルーされるはずです。
参考文献
- Decomo, Proxmox VE 6.3でPCIパススルーあれこれ, のふ処, 2021
- naa0yama, Proxmox VE で PCI Passthrough する, naa0yama's Blog, 2020-2025
- Proxmox community, [Solved] Asus TUF B550 Plus and IOMMU Groups, Proxmox, 2021