在linux上启用QEMU/KVM
虚拟机的起源可追溯到1966年IBM的CP-40和CP-67虚拟机操作系统,虚拟化技术最初是为了解决大型系统中的资源利用率问题而开发的。而发展到了现在,无论是在大型企业上还是在个人电脑上,都会以某种方式使用到虚拟机和虚拟化技术。
不过本文的目的是介绍linux平台上的虚拟机QEMU/KVM,学习QEMU/KVM的简单配置。
这里笔者的宿主系统是Archlinux
、x86_64
架构。
qemu/kvm环境搭建
linux内核中有KVM内核模块,这使其在linux平台上拥有相对出色的性能。不过KVM能否使用还要看硬件是否支持。
执行以下命令查看系统架构是否为x86_64
1 | uname -m |
执行以下命令检测硬件虚拟化支持
1 | sudo lscpu |
确认硬件环境没有问题之后,还需要下载相关的工具包。KVM并不能单独使用,通常配合QEMU使用。
安装QEMU等工具包,命令如下
1 | sudo pacman -S qemu-base virt-manager libvirt virt-viewer dnsmasq vde2 bridge-utils openbsd-netcat ebtables libguestfs |
以上只是列举了所有可能用到的包,这些包并不需要全部安装,下面进一步说明
qemu:开源的机器模拟器和虚拟机。安装这个包之后,其实已经可以用命令行启动虚拟机了,但是所有的操作都得通过命令行实现。
libvirt:用于控制KVM、QEMU等虚拟化引擎的一组软件的汇集。
virt-manager:libvirt的图形化管理工具,是一个全功能的虚拟机管理程序。
virt-viewer:更轻量的libvirt的图形化工具,主要用于查看虚拟机的图形控制台,功能没有virt-manager全面。也就说虚拟机的创建还是在命令行完成。
可以根据需求在virt-manager和virt-viewer中选择一个安装。virt-manager包含了virt-viewer的功能。
dnsmasq:用于虚拟机的NAT/DHCP网络。
bridge-utils:用于虚拟机桥接网络。
openbsd-netcat:用于多虚拟机之间建立TCP/IP连接。
vde2:以太网虚拟化,用于模拟复杂网络环境。
ebtables:桥接防火墙,用于控制多虚拟机之间的流量。
libguestfs:虚拟机磁盘镜像处理工具,用于查看和修改虚拟机镜像、转换镜像格式等。具体使用参考这篇文章
如果只是需要简单地使用qemu创建单一虚拟机,那么安装以下包即可。
1 | sudo pacman -S qemu-base libvirt virt-manager dnsmasq bridge-utils |
启用嵌套虚拟化(可选)
嵌套虚拟化,即在虚拟机里嵌套虚拟机,这个可根据实际需求选择是否启用。相关命令如下
1 | # 启用嵌套虚拟化 |
非root用户使用qemu/kvm虚拟化
qemu/kvm默认需要root权限才能使用。为了方便使用,可以编辑配置文件,配置文件位于/etc/libvirt/libvirtd.conf
(另外还有一个libvirt.conf
文件,注意不要混淆)。
1 | sudo vim /etc/libvirt/libvirtd.conf |
找到
unix_sock_group = "libvirt"
,取消这一行的注释,允许libvirt
组的用户使用unix套接字。找到
unix_sock_rw_perms = "0770"
,取消这一行的注释,允许用户读写unix套接字。
将当前普通用户添加到libvirt组,$USER
会获取当前用户的名称。
1 | sudo usermod -aG libvirt $USER |
启动libvirtd服务
1 | sudo systemctl enable --now libvirtd |
启动virt-manager图形界面
1 | virt-manager |
补充
kvm和qemu的关系
- qemu本身是跨平台的,它并不依赖于kvm内核模块,可以自行选择单独工作或者是启用kvm模块辅助工作,kvm相当于qemu的性能优化插件。只是kvm是linux内核模块,因此qemu在linux上的体验可能是最好的。
- kvm依赖于硬件是否支持虚拟化以及需要使用qemu这样的工具与其交互。
- kvm是为x86架构量身定做的,启用了kvm的虚拟机,意味着qemu的跨平台虚拟化会受到限制,但是性能会得到明显提升。
- 不使用kvm虚拟化的qemu虚拟机能够凭借其完整的系统仿真实现最佳的跨平台虚拟化支持,但是系统开销会更高。
virtualbox、vmware or qemu/kvm?
- virtualbox和vmware已经能够满足大部分的非重度使用用户了,它们本身的使用易于上手,相关的学习资料也很多。
- qemu/kvm主要是在linux平台上使用,目的是为了在linux上获得更高的性能和效率。在virt-manager的辅助下,使用也很方便。
参考资料
如何在 Manjaro/Archlinux 上安装 KVM/QEMU
- 标题: 在linux上启用QEMU/KVM
- 作者: Entropy Tree
- 创建于 : 2023-09-05 14:08:55
- 更新于 : 2023-09-06 00:23:24
- 链接: https://www.entropy-tree.top/2023/09/05/qemu-kvm/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。