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