1. 什么是KVM
KVM(Kernel-based Virtual Machine的縮寫),是內核內建的虛擬機,追求簡便的運作。例如運行虛擬機僅需要加載相應的 kvm 模塊,但是KVM需要芯片支持虛擬化技術(Intel的VT擴展,或是AMD的AMD-V 擴展)。
在KVM中,可以運行各種GNU/Linux,Windows 或其他系統鏡像(例如FreeBSD,MacOS)。每個虛擬機都可以提供獨享的虛擬硬件:網卡,硬盤,顯卡等(虛擬機甚至可以直通主機設備,例如GPU PCI pass through)。
2. 准備KVM
KVM需要host的處理器支持虛擬化,通過下嗎命令查看host是否支持
$ LC_ALL=C lscpu | grep Virtualization
例如我的AMD處理器顯示:
Virtualization: AMD-V
注意:虛擬化支持可以在BIOS中開啟。
3. 安裝KVM
安裝qemu, libvirt, ovmf, virt-manager
# pacman -S qemu libvirt ovmf virt-manager virt-viewer dnsmasq vde2 bridge-utils openbsd-netcat
- kvm 負責CPU和內存的虛擬化
- qemu 向Guest OS模擬硬件(例如,CPU,網卡,磁盤,等)
- ovmf 為虛擬機啟用UEFI支持
- libvirt 提供管理虛擬機和其它虛擬化功能的工具和API
- virt-manager 是管理虛擬機的GUI
注 : 實際上,這步只需要安裝qemu就可以使用虛擬機,但是qemu-kvm接口有些復雜,libvirt和virt-manager讓配置和管理虛擬機更便捷。
還要安裝ebtables和iptables軟件包:
sudo pacman -S ebtables iptables
二、在Arch Linux/Manjaro上安裝libguestfs
libguestfs是一組用於訪問和修改虛擬機(VM)磁盤映像的工具。
首先在/etc/pacman.conf上啟用AUR:
$ sudo vim /etc/pacman.conf
# Should have below lines
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
然后更新你的Pacman數據庫:
sudo pacman -Syy
參考:pacman命令_Linux pacman命令使用詳解:一個軟件包管理器。
使用AUR幫助程序安裝libguestfs工具:
sudo pacman -S yaourt
yaourt -S --noconfirm --needed libguestfs
三、啟動KVM libvirt服務
安裝完成后,啟動並啟用libvirtd服務以在啟動時啟動:
sudo systemctl enable libvirtd.service
sudo systemctl start libvirtd.service
狀態顯示正在運行,如下圖所示:
四、啟用普通用戶帳戶以使用KVM
由於我們希望使用我們的標准Linux用戶帳戶來管理KVM,因此我們將KVM配置為允許此操作。
打開文件/etc/libvirt/libvirtd.conf進行編輯:
sudo pacman -S vim
sudo vim /etc/libvirt/libvirtd.conf
將UNIX域套接字組所有權設置為libvirt(第85行):
unix_sock_group = "libvirt"
設置R/W套接字的UNIX套接字權限(第102行):
unix_sock_rw_perms = "0770"
將你的用戶帳戶添加到libvirt組:
sudo usermod -a -G libvirt $(whoami)
newgrp libvirt
重啟libvirt守護進程:
sudo systemctl restart libvirtd.service
五、啟用嵌套虛擬化(可選)
嵌套虛擬化功能使你可以在VM中運行虛擬機,通過啟用內核模塊為kvm_intel啟用嵌套虛擬化:
sudo modprobe -r kvm_intel
sudo modprobe kvm_intel nested=1
要使此配置持久,請運行:
echo "options kvm-intel nested=1" | sudo tee /etc/modprobe.d/kvm-intel.conf
確認嵌套虛擬化設置為是:
$ systool -m kvm_intel -v | grep nested
nested = "Y"
nested_early_check = "N"
$ cat /sys/module/kvm_intel/parameters/nested
Y
到這里就全部完成了。
參考資料
https://wiki.archlinux.org/index.php/KVM
https://wiki.archlinux.org/index.php/Libvirt
https://ywnz.com/linuxjc/4953.html
https://www.jianshu.com/p/392ae8181dc3