QEMU/KVM
用QEMU搭配KVM來使用虛擬機。
安裝
檢查虛擬化的狀態
1
egrep -c '(vmx|svm)' /proc/cpuinfo
返回的數值代表已開啟虛擬化的線程數。
如果未啟用虛擬化則需要進入BIOS/UEFI內開啟(Intel為vmx,AMD為svm)。
檢查KVM的狀態
1
lsmod | grep kvm
返回的值應該會像是下圖。
安裝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
如果有需要各種virtio技術
在Virt Manager中先把要更改的虛擬機打開,從上方虛擬機控制按鈕處切到硬體詳情。
virtio-Network宿主機設定
virtio-GPU宿主機設定
VirtIO-Balloon宿主機設定
VirtIO-FS宿主機設定
先安裝virtiofsd。
1
sudo pacman -S virtiofsd
回到硬體詳情 > 新增硬體 > 檔案系統 > 目標路徑就是虛擬機內的硬碟名稱,自己設定就好了。
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/<目標路徑>