Wiki
QEMU-KVM虛擬機器
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
QEMU-KVM是一個高效能的虛擬機器,以下是以安裝RockyLinux9為例.
1.安裝必備軟體
確保主機已經安裝了 QEMU、KVM 和相關工具。以基於 Debian/Ubuntu 的系統為例,執行以下命令:
sudo apt update
sudo apt install qemu-kvm qemu-img virt-manager virt-install virt-viewer libvirt libvirt-daemon libvirt-daemon-qemu bridge-utils virglrenderer
對於基於 Fedora/CentOS/Rocky Linux 的系統,命令可能是:
sudo dnf install qemu-kvm qemu-img virt-manager virt-install virt-viewer libvirt libvirt-daemon libvirt-daemon-qemu bridge-utils virglrenderer
安裝完成後,確保當前使用者在 kvm 組中(否則可能沒有許可權使用 KVM 加速):
sudo usermod -aG kvm $USER
注意: 修改組後可能需要登出重新登入才能生效。
2.開啟KVM硬體加速
執行以下命令檢查 KVM 是否啟用:
egrep -c '(vmx|svm)' /proc/cpuinfo
如果輸出 0,說明 CPU 不支援 KVM 或未開啟 VT-x(Intel)/ SVM(AMD),需要在 BIOS 裡開啟 Intel VT-x 或 AMD SVM 。
然後檢查 KVM 模組是否載入:
# 验证 KVM 加速可用
lsmod | grep kvm
# 验证当前用户有权限访问 /dev/kvm
ls -l /dev/kvm
如果沒有輸出,載入 KVM 模組:
sudo modprobe kvm_intel # Intel 处理器
sudo modprobe kvm_amd # AMD 处理器
3.建立虛擬硬碟檔案
你需要為虛擬機器建立一個硬碟映象檔案。這裡以 qcow2 格式、100GB 為例(你可以根據需要調整大小)。在終端中執行:
qemu-img create -f qcow2 disk.qcow2 100G
這將在當前目錄下生成一個名為 disk.qcow2 的虛擬硬碟檔案。
4.準備 OVMF(UEFI 韌體)檔案
安裝 OVMF 包。例如,在 Ubuntu 上可通過以下命令安裝:
# 一般电脑都默认安装过了
sudo apt install ovmf # Debian/Ubuntu
sudo dnf install edk2-ovmf # RHEL/CentOS/Fedora
安裝後,查詢檔案路徑,通常位於 /usr/share/OVMF/OVMF_CODE.fd 或 /usr/share/ovmf/OVMF.fd。直接在命令中使用正確路徑。(下方指令碼中有例子,你只需要確保你的/usr/share/OVMF/下有這倆檔案即可)

也可以下載下面這個檔案:
暫時無法在飛書文件外展示此內容
- 編寫或調整 run.sh 指令碼
將下面的內容寫入你的 run.sh 檔案(你可以使用文本編輯器)。
sudo vim ./run.sh
下面的指令碼示例使用 QEMU 啟動虛擬機器並載入 ISO 映象:
#!/bin/bash
qemu-system-x86_64 \
-machine q35,vmport=off,kernel_irqchip=on \
-accel kvm \
-cpu host,kvm=on,vmx=on,migratable=on,+invtsc \
-smp 8,sockets=1,cores=4,threads=2 \
-m 8G,slots=4,maxmem=32G \
-device virtio-gpu-gl-pci,max_outputs=1 \
-vga none \
-display sdl,gl=on \
-audiodev pa,id=pa1,server=unix:/run/user/1000/pulse/native \
-device ich9-intel-hda \
-device hda-micro,audiodev=pa1 \
-device qemu-xhci,id=xhci \
-device virtio-tablet-pci \
-device usb-kbd,bus=xhci.0 \
-bios OVMF-pure-efi64.fd \
-boot d \
-blockdev driver=qcow2,node-name=disk1,file.driver=file,file.cache.direct=on,file.aio=io_uring,file.filename=disk.qcow2 \
-device virtio-blk-pci,drive=disk1 \
-drive file=kubuntu-20.04.6-desktop-amd64.iso,media=cdrom,if=none,id=cdrom \
-device usb-storage,drive=cdrom,removable=on \
-nic user,model=virtio-net-pci,hostfwd=tcp::8022-:22 \
-monitor stdio \
-parallel none \
-serial none \
-msg timestamp=on
儲存後給指令碼執行許可權:
sudo chmod +x run.sh
5.啟動虛擬機器
確保當前目錄下有以下檔案:
-
run.sh -
disk.qcow2(剛剛建立的虛擬硬碟) -
Rocky-9.4-x86_64-dvd.iso(Rocky Linux 9 安裝 ISO) -
OVMF-pure-efi64.fd檔案
然後在終端中執行指令碼:
./run.sh
此時,QEMU 應該會啟動一個視窗,並載入 ISO 映象進入安裝介面。
6.安裝系統
在虛擬機器視窗中,你會看到 Linux 的安裝介面。按照安裝嚮導的步驟進行安裝。安裝完成後,你可能需要調整啟動項,將硬碟作為啟動介質(如果預設還是從 CD 啟動)。
建議: 安裝好系統後,關閉虛擬機器,再修改 run.sh 將 ISO 映象移除或改為可選啟動裝置,這樣下次啟動時就會直接從硬碟啟動。
例如,將 -drive file=Rocky-9.5-x86_64-dvd.iso,media=cdrom 移除,或者更換為啟動順序引數。
7.其他操作
7.1.顯示卡直通(謹慎,不懂不要亂搞)
此操作的意思是把顯示卡完全給虛擬機器用,實體宿主機就沒法用顯示卡了.
- 主機和 IOMMU 配置
(1) 啟用 IOMMU(以 Intel 為例)
編輯 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 中加入:
intel_iommu=on iommu=pt
對於 AMD 主機則設定 amd_iommu=on。

更新 grub 後重啟:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # CentOS/Fedora/Rocky 系列
# 或者
sudo update-grub # Ubuntu/Debian 系统
可以在重啟後用下面命令確認 IOMMU 是否啟用:
dmesg | grep -e DMAR -e IOMMU
如果看到類似“DMAR: IOMMU enabled”之類的資訊,就說明生效了。
(2) 查詢你的 NVIDIA 顯示卡裝置 ID 使用 lspci -nn | grep NVIDIA 查詢顯示卡,例如:
tungchiahui@Dell-G15-5511:~/Downloads$ lspci -nn | grep NVIDIA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / M
ax-Q] [10de:2560] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GA106 High Definition Audio Controller [10de:228
e] (rev a1)
記下上面的 PCI 地址和裝置 ID。
顯示卡 PCI 地址:01:00.0 裝置 ID:10de:2560
顯示卡音訊 PCI 地址:01:00.1 裝置 ID:10de:228e
(3) 繫結裝置到 vfio 驅動
另一種方式是建立一個 modprobe 配置檔案,讓 vfio-pci 在載入時繫結這些裝置。
- 建立檔案(例如
/etc/modprobe.d/vfio.conf):
sudo vim /etc/modprobe.d/vfio.conf
- 在檔案中寫入:
options vfio-pci ids=10de:2560,10de:228e
- 儲存檔案後,更新 initramfs:
# debian系选这个
sudo update-initramfs -u
# 红帽系选这个
sudo dracut --force
-
重啟系統。
-
檢查裝置繫結情況
重啟後,你可以用下面命令檢查裝置是否已經被 vfio-pci 驅動接管:
lspci -nnk | grep -A3 "10de:2560"
你應該能看到類似:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] [10de:2560]
Subsystem: ...
Kernel driver in use: vfio-pci
同樣用相似的命令檢查音訊裝置(10de:228e)。
lspci -nnk | grep -A3 "10de:228e"
如果看到 Kernel driver in use: vfio-pci,說明繫結成功。
(4) 啟動選項
在run.sh裡新增上下面兩行
# 直通 NVIDIA 显卡
-device vfio-pci,host=01:00.0,multifunction=on,x-vga=on \
-device vfio-pci,host=01:00.1 \