Ubuntu QEMU/KVM + Virt-Manager GPU Passthrough 設定步驟
Ubuntu QEMU/KVM + Virt-Manager GPU Passthrough 設定步驟
系統概要
- Host OS: Ubuntu 24.04
- Guest OS: Ubuntu 20.04
- CPU(Intel):必須支援Virtualization for Directed I/O (VT-d, IOMMU)、Virtualization Technology (VT-x)
- GPU: 必須準備兩個GPU,1個iGPU或BMC VGA給Host,1個dGPU給Guest
步驟
參考[1]
事前確認
確認CPU支援Virtualization Technology,如果輸出包含
vmx,則表示有支援:cat /proc/cpuinfo | grep --color vmx確認BIOS中已啟用VT-d及VT-x,通常在Advanced選單下:
- 「Virtualization Technology」設為啟用
- 「VGA Priority」設定為onboard或iGPU
啟用IOMMU
編輯GRUB設定檔:
sudo nano /etc/default/grub找到
GRUB_CMDLINE_LINUX_DEFAULT,並加入intel_iommu=on kvm.ignore_msrs=1參數:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on kvm.ignore_msrs=1"更新GRUB設定並重啟系統:
sudo update-grub sudo reboot重啟後,確認IOMMU已啟用:
sudo dmesg | grep -e IOMMU -e DMAR如果看到類似以下的訊息,表示IOMMU已成功啟用
[ 0.000000] Intel-IOMMU: enabled [ 0.123456] pci 0000:01:00.0: Adding to iommu group 1 [ 0.234567] pci 0000:01:00.1: Adding to iommu group 2 [ 0.345678] DMAR: Intel(R) Virtualization Technology for Directed I/O
確認GPU PCI裝置ID及位址,並檢查driver
使用
lspci命令列出所有PCI裝置,找到GPU相關資訊:lspci -nn | grep -i nvidia記下要直通的GPU的裝置ID(例如
10de:xxxx、10de:yyyy)以及PCI位址(例如nn:00.0和nn:00.1),並確認vfio-pci驅動程式是否已接管該裝置:nn:00.0 VGA compatible controller [0300]: NVIDIA Corporation AD104GL [RTX 4500 Ada Generation] [10de:xxxx] (rev a1) Subsystem: NVIDIA Corporation AD104GL [RTX 4500 Ada Generation] [10de:zzzz] Kernel driver in use: vfio-pci Kernel modules: nvidiafb, nouveau nn:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:yyyy] (rev a1) Subsystem: NVIDIA Corporation Device [10de:zzzz] Kernel driver in use: vfio-pci Kernel modules: snd_hda_intelWarning
如果看到
Kernel driver in use:後方為nvidia或nouveau,表示GPU仍被NVIDIA驅動程式佔用,需先將其卸載:sudo nvidia-settings --uninstall sudo apt-get remove --purge nvidia* sudo apt-get remove --purge xserver-xorg-video-nouveau sudo apt-get remove --purge xserver-xorg-video-nv sudo apt-get install nvidia-common sudo apt-get install xserver-xorg-video-nouveau sudo apt-get install xserver-xorg-video-all sudo apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-dri sudo apt-get install --reinstall xserver-xorg-core sudo dpkg-reconfigure xserver-xorg設定VFIO
編輯模組設定檔:
新增vfio設定檔:
sudo nano /etc/modprobe.d/vfio.conf加入以下內容,將
xxxx和yyyy替換為你的GPU裝置ID:options vfio-pci ids=10de:xxxx,10de:yyyy disable_vga=1將NVIDIA驅動模組加入host黑名單:
新增黑名單設定檔:
sudo nano /etc/modprobe.d/blacklist-nvidia.conf加入以下內容:
blacklist nouveau blacklist nvidia blacklist nvidia_drm blacklist nvidia_modeset更新initramfs並重啟系統:
sudo update-initramfs -u sudo reboot重啟後,確認GPU已被VFIO驅動接管(
nn:00.0請填入你的PCI裝置位址):lspci -k -s nn:00.0 lspci -k -s nn:00.1應該會看到
Kernel driver in use: vfio-pci。
將GPU直通至VM
開啟Virt-Manager,選擇你的VM,點擊「Open」。
點擊「Show virtual hardware details」。
點擊左下角的「Add Hardware」,選擇「PCI Host Device」。
從列表中選擇你的GPU裝置,然後點擊「Finish」。
- 01:00.0 VGA controller
- 01:00.1 Audio device
在「Boot Options」中,開啟:
- Start VM automatically on boot
- UEFI Firmware
啟動VM並安裝NVIDIA驅動程式
- 在VM中,更新系統並安裝NVIDIA驅動程式:
sudo apt update sudo ubuntu-drivers install sudo reboot重啟後,確認NVIDIA驅動程式已正確安裝:
nvidia-smi如果看到GPU資訊,表示驅動程式已成功安裝並運作。
參考資料
thebunnyrules, stevens, jw_, TACHMALEX, and Nepomucen, “Ubuntu 22.04 GPU passthrough (QEMU),” Ask Ubuntu. [Online]. Available: https://askubuntu.com/questions/1406888/ubuntu-22-04-gpu-passthrough-qemu. [Accessed: 24-Oct-2025]. ↩︎
