文章

QEMU/KVM

用QEMU搭配KVM來使用虛擬機。

安裝

檢查虛擬化的狀態

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

返回的數值代表已開啟虛擬化的線程數。
如果未啟用虛擬化則需要進入BIOS/UEFI內開啟(Intel為vmx,AMD為svm)。

檢查KVM的狀態

1
lsmod | grep kvm

返回的值應該會像是下圖。

Desktop View

安裝QEMU、Virt Manager、相關依賴跟工具

1
2
sudo pacman -Syu
sudo pacman -S archlinux-keyring qemu-full virt-manager virt-viewer edk2-ovmf dnsmasq vde2 bridge-utils openbsd-netcat libguestfs virglrenderer

調整權限

把自己加入libvirt和kvm群組並讓KVM身分組的成員可以控制Libvirt。

1
2
3
4
5
sudo usermod -a -G libvirt $USER
sudo usermod -a -G libvirt root
sudo usermod -a -G kvm $USER
sudo usermod -a -G kvm root
sudo nano /etc/polkit-1/rules.d/50-libvirt.rules

在50-libvirt.rules貼上以下內容。

1
2
3
4
5
6
7
8
/* Allow users in kvm group to manage the libvirt
daemon without authentication */
polkit.addRule(function(action, subject) {
    if (action.id == "org.libvirt.unix.manage" &&
        subject.isInGroup("kvm")) {
            return polkit.Result.YES;
    }
});

啟動Libvirtd和NAT網路

1
2
3
sudo systemctl enable --now libvirtd
sudo virsh net-start default
sudo virsh net-autostart default

如果開啟時出現 ‘libvirt’ zone that should have been installed with libvirt 可以先重啟firewalld跟libvirtd再試試看。

1
2
sudo systemctl start firewalld
sudo systemctl restart libvirtd

如果宿主機沒TPM 2.0但虛擬機需要

安裝個swtpm就好。

1
sudo pacman -S swtpm

最後重啟libvirtd服務就可以開始使用了。

1
sudo systemctl restart libvirtd

如果出現QEMU沒辦法讀寫檔案的權限問題

找到user跟group那行,並把user改為自己的使用者名後取消注釋該行。

1
sudo nano /etc/libvirt/qemu.conf

Desktop View

如果有需要各種virtio技術

在Virt Manager中先把要更改的虛擬機打開,從上方虛擬機控制按鈕處切到硬體詳情。

virtio-Network宿主機設定

Desktop View

virtio-GPU宿主機設定

Desktop View

Desktop View

VirtIO-Balloon宿主機設定

Desktop View

VirtIO-FS宿主機設定

先安裝virtiofsd。

1
sudo pacman -S virtiofsd

回到硬體詳情 > 新增硬體 > 檔案系統 > 目標路徑就是虛擬機內的硬碟名稱,自己設定就好了。

Desktop View

Windows虛擬機的VirtIO驅動

先到Fedora官網找到 virtio-win.iso 並下載他。
掛載後安裝 virtio-win-guest-tools和virtio-win-gt
Win+R 後執行指令進入服務。

1
services.msc

進入後將 QEMU Agent和Spice VDAgent 啟動並在內容裡面將啟動類型改為自動。

如果要用VirtIO-FS還要到Winfsp的GitHub下載並安裝。
安裝完再回到服務把 VirtIO-FS Service 啟動並在內容裡面將啟動類型改為自動。

Linux虛擬機的VirtIO驅動

Linux已經內建VirtIO驅動,所以只要安裝並啟動spice-vdagent跟qemu-guest-agent就好。

1
2
3
sudo pacman -S qemu-guest-agent spice-vdagent
sudo systemctl enable --now spice-vdagent
sudo systemctl enable --now qemu-guest-agent

如果需要VirtIO-FS則是直接用mount掛載對應路徑就好(Virt Manager內設定的目標路徑)。

1
2
sudo mkdir /mnt/<目標路徑>
sudo mount -t virtiofs <目標路徑> /mnt/<目標路徑>
本文章以 CC BY 4.0 授權