qemu+kvm的基本用法
- 1. `KVM`和`QEMU`的关系
- 2 `QEMU`的安装
- 3 使用`QEMU`
- 3.1 创建虚拟镜像文件
- 3.2 创建虚拟机
- 3.3 使用虚拟机
- 4 关于`kvm`用户权限问题
1. KVM
和QEMU
的关系
首先KVM
(Kernel Virtual Machine
)是Linux的一个内核驱动模块,它能够让Linux主机成为一个Hypervisor(虚拟机监控器)。在支持VMX(Virtual Machine Extension)功能的x86处理器中,Linux在原有的用户模式和内核模式中新增加了客户模式,并且客户模式也拥有自己的内核模式和用户模式,虚拟机就是运行在客户模式中。KVM模块的职责就是打开并初始化VMX功能,提供相应的接口以支持虚拟机的运行。
QEMU
(quick emulator
)本身并不包含或依赖KVM模块,而是一套由Fabrice Bellard编写的模拟计算机的自由软件。QEMU虚拟机是一个纯软件的实现,可以在没有KVM模块的情况下独立运行,但是性能比较低。QEMU有整套的虚拟机实现,包括处理器虚拟化、内存虚拟化以及I/O设备的虚拟化。QEMU是一个用户空间的进程,需要通过特定的接口才能调用到KVM模块提供的功能。从QEMU角度来看,虚拟机运行期间,QEMU通过KVM模块提供的系统调用接口进行内核设置,由KVM模块负责将虚拟机置于处理器的特殊模式运行。QEMU使用了KVM模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化加速以提高虚拟机的性能。
KVM只模拟CPU和内存,因此一个客户机操作系统可以在宿主机上跑起来,但是你看不到它,无法和它沟通。于是,有人修改了QEMU代码,把他模拟CPU、内存的代码换成KVM,而网卡、显示器等留着,因此QEMU+KVM
就成了一个完整的虚拟化平台
。
KVM只是内核模块,用户并没法直接跟内核模块交互,需要借助用户空间的管理工具,而这个工具就是QEMU。KVM和QEMU相辅相成,QEMU通过KVM达到了硬件虚拟化的速度,而KVM则通过QEMU来模拟设备。对于KVM来说,其匹配的用户空间工具并不仅仅只有QEMU,还有其他的,比如RedHat开发的libvirt、virsh、virt-manager等,QEMU并不是KVM的唯一选择。
所以简单直接的理解就是:QEMU是个计算机模拟器
,而KVM为计算机的模拟提供加速功能
。
2 QEMU
的安装
在Slackware
下,用SlackBuilds
网站下载安装脚本,从qemu
官网下载最新的qemu
源码包。
3 使用QEMU
3.1 创建虚拟镜像文件
$ qemu-img create -f qcow2 image_file.cow 40G
这样就产生了一个image_file.cow
的镜像文件。大小会随着使用的变化而增大。
3.2 创建虚拟机
$ qemu-system-x86_64 -enable-kvm -cdrom en_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73974.iso -boot menu=on -drive file=image_file.cow -m 4G
3.3 使用虚拟机
$ qemu-system-x86_64 -enable-kvm -boot menu=on -drive file=image_file.cow -m 4G
在3.2 和3.3中,命令qemu-system-x86_64
都可以使用qemu-kvm
来代替。
事实上,qemu-kvm
就是指向qemu-system-x86_64
的一个链接。
4 关于kvm
用户权限问题
如果在3.2和3.3中有用户组权限不足问题,请参考
Slackbuids
官网qemu
安装脚本说明,脚本中We patch the installed udev rules to require membership in "users" group instead of a custom "kvm" group to use /dev/kvm.
所以我们可以切换到root用户,
$ su
# vigr
# vigr -s
在users
用户组后面添加你所在的用户组。
或者使用
$ su
# usermod --append ${你所在的用户组} --groups users
至此,kvm
用户权限问题解决。
附:添加你所在的用户组
到kvm
组
# usermod --append ${你所在的用户组} --groups kvm