在linux上启用QEMU/KVM

Entropy Tree Lv4

虚拟机的起源可追溯到1966年IBM的CP-40和CP-67虚拟机操作系统,虚拟化技术最初是为了解决大型系统中的资源利用率问题而开发的。而发展到了现在,无论是在大型企业上还是在个人电脑上,都会以某种方式使用到虚拟机和虚拟化技术。

不过本文的目的是介绍linux平台上的虚拟机QEMU/KVM,学习QEMU/KVM的简单配置。

这里笔者的宿主系统是Archlinuxx86_64架构。

qemu/kvm环境搭建

linux内核中有KVM内核模块,这使其在linux平台上拥有相对出色的性能。不过KVM能否使用还要看硬件是否支持。

执行以下命令查看系统架构是否为x86_64

1
uname -m

执行以下命令检测硬件虚拟化支持

1
sudo lscpu

确认硬件环境没有问题之后,还需要下载相关的工具包。KVM并不能单独使用,通常配合QEMU使用。

安装QEMU等工具包,命令如下

1
2
sudo pacman -S qemu-base virt-manager libvirt virt-viewer dnsmasq vde2 bridge-utils openbsd-netcat ebtables libguestfs
# 关于qemu还可以选择qemu-full包,支持更多的架构

以上只是列举了所有可能用到的包,这些包并不需要全部安装,下面进一步说明

  • 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
2
3
4
5
# 启用嵌套虚拟化
sudo modprobe -r kvm_intel
sudo modprobe kvm_intel nested=1
# 验证嵌套虚拟化,输出类似Y或1的字符则表示成功
cat /sys/module/kvm_intel/parameters/nested

非root用户使用qemu/kvm虚拟化

qemu/kvm默认需要root权限才能使用。为了方便使用,可以编辑配置文件,配置文件位于/etc/libvirt/libvirtd.conf(另外还有一个libvirt.conf文件,注意不要混淆)。

1
sudo vim /etc/libvirt/libvirtd.conf
  1. 找到unix_sock_group = "libvirt",取消这一行的注释,允许libvirt组的用户使用unix套接字。

  2. 找到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的辅助下,使用也很方便。

参考资料

什么是虚拟机?| linux中国

如何在 Manjaro/Archlinux 上安装 KVM/QEMU

QEMU | archwiki

QEMU/KVM 虚拟化环境的搭建与使用 | This Cute World

QEMU 与 KVM:您应该使用哪一个进行虚拟化?

  • 标题: 在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 进行许可。
评论