第 7 節

QEMU-KVM虛擬機

0瀏覽次數0訪問次數--跳出率--平均停留

QEMU-KVM是一個高性能的虛擬機,以下是以安裝RockyLinux9為例.

安裝必備軟件

確保主機已經安裝了 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

注意: 修改組後可能需要註銷重新登錄才能生效。

打開KVM硬件加速

運行以下命令檢查 KVM 是否啓用:

egrep -c '(vmx|svm)' /proc/cpuinfo

如果輸出 0,説明 CPU 不支持 KVM 或未開啓 VT-x(Intel)/ SVM(AMD),需要在 BIOS 裏開啓 Intel VT-xAMD SVM

然後檢查 KVM 模塊是否加載:


# 验证 KVM 加速可用
lsmod | grep kvm

# 验证当前用户有权限访问 /dev/kvm
ls -l /dev/kvm

如果沒有輸出,加載 KVM 模塊:

sudo modprobe kvm_intel  # Intel 处理器
sudo modprobe kvm_amd    # AMD 处理器

創建虛擬硬盤文件

你需要為虛擬機創建一個硬盤鏡像文件。這裏以 qcow2 格式、100GB 為例(你可以根據需要調整大小)。在終端中運行:

qemu-img create -f qcow2 disk.qcow2 100G

這將在當前目錄下生成一個名為 disk.qcow2 的虛擬硬盤文件。

準備 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/下有這倆文件即可)

也可以下載下面這個文件:

暫時無法在飛書文檔外展示此內容

  1. 編寫或調整 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

啓動虛擬機

確保當前目錄下有以下文件:

  • run.sh
  • disk.qcow2(剛剛創建的虛擬硬盤)
  • Rocky-9.4-x86_64-dvd.iso(Rocky Linux 9 安裝 ISO)
  • OVMF-pure-efi64.fd文件

然後在終端中運行腳本:

./run.sh

此時,QEMU 應該會啓動一個窗口,並加載 ISO 鏡像進入安裝界面。

安裝系統

在虛擬機窗口中,你會看到 Linux 的安裝界面。按照安裝嚮導的步驟進行安裝。安裝完成後,你可能需要調整啓動項,將硬盤作為啓動介質(如果默認還是從 CD 啓動)。

建議: 安裝好系統後,關閉虛擬機,再修改 run.sh 將 ISO 鏡像移除或改為可選啓動設備,這樣下次啓動時就會直接從硬盤啓動。

例如,將 -drive file=Rocky-9.5-x86_64-dvd.iso,media=cdrom 移除,或者更換為啓動順序參數。

其他操作

顯卡直通(謹慎,不懂不要亂搞)

此操作的意思是把顯卡完全給虛擬機用,實體宿主機就沒法用顯卡了.

  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 在加載時綁定這些設備。

  1. 創建文件(例如 /etc/modprobe.d/vfio.conf):
sudo vim /etc/modprobe.d/vfio.conf
  1. 在文件中寫入:
options vfio-pci ids=10de:2560,10de:228e
  1. 保存文件後,更新 initramfs:

# debian系选这个
sudo update-initramfs -u

# 红帽系选这个
sudo dracut --force
  1. 重啓系統。
  2. 檢查設備綁定情況

重啓後,你可以用下面命令檢查設備是否已經被 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 \
音乐页