Kvm的虚拟化模型
Kvm称为Kernel-basedVirtual Mschine,是x86架构且硬件支持的虚拟化技术(Intel VT或者AMD-V)的Linux内核的虚拟化解决方案,其虚拟化实现结构为宿主型模型,主要是KVM以内核模块的形式存放在Linux内核中,如果Linux内核加载了此模块,此时的Linux就相当于一个Hypervisor。自从v2.6.20版本开始kvm模块已经成为Linux内核的默认部分。
Kvm模块
KVM 模块让Linux成为了一个虚拟机监视器,并且使原来的Linux的两张执行模式(内核/用户模式)的基础上增加了客户模式,而客户模式拥有自己的内核和用户模式,在虚拟机运行时候,三种模式运行的方式如下:
(1)客户模式:执行非I/O的客户代码,虚拟机运行的模式
(2)用户模式:代表用户执行I/O指令,Qemu运行的模式
(3)内核模式:实现客户模式的切换,处理因I/O或者其他指令引起的从客户模式退出。Kvm模块工作的模式。而且三种模式运行工作如下图:
Qemu与kvm的关系
准确来说,KVM是Linux kernel的一个模块。可以用命令modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是远远不够的,因为用户无法直接控制内核模块去作事情,你还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚 拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出 可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两 大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是 KVM和QEMU 的关系。
配置硬件环境
kvm由于是在X86-64架构支持 上更为完善,所以我就是在此基础上安装的kvm,我的电脑是奔腾处理 器需要在BIOS中开启虚拟化支持的VT技术,步骤如下,进入BIOS后选择Security中的System Security后即可看到Virtualization Techology (VT/TD)将其设置为开启状态(enable)即可,退出时记得保存。
安装宿主机Linux
我用的是Ubuntu14.04-desktoop的版本,安装步骤此处省略,查看自己的Ubuntu版本和查看CPU是否支持虚拟化
root@ubuntu:~# cat /etc/issue
Ubuntu 14.04.1 LTS \n \l
root@ubuntu:~# cat /proc/cpuinfo |grep 'vmx|svm'
在其他intel酷睿的处理器上安装Ubuntu使用以上命令会出现vmx的结果,但是我用的是Intel的奔腾处理器所以不会有结果显示。
编译安装kvm和Qemu
先查看Linux的内核版本如果高于2.6.20就不需要此处的编译安装,如果低于上述版本则会需要编译安装。root@ubuntu:~# uname -r
3.13.0-32-generic
由此可见不需要进行编译安装,查看kvm 模块是否加载。
root@ubuntu:~# lsmod | grep kvm
kvm_intel 143060 0
kvm 451511 1 kvm_intel
此处模块已经加载完毕,如果出现未加载的情况,使用以下命令加载其模块就好了modprobe kvm和Modprobe kvm_intel然后再进行查询即可。如果此模块加载成功会在生成一个/etc/kvm的设备文件,该设备文件是kvm模块提供给QEMU的程序控制借口,QEMU使用此设备文件皆可以供给客户机OS运行所需要的硬件设备环境的模拟。
root@ubuntu:~# ls -l /dev/kvm
crw-rw----+ 1 root kvm 10, 232 11月 10 13:22/dev/kvm
QEMU有两中安装方式,源码安装和apt-get 安装,我第一此安装的时候使用源码安装,步骤如下
1)克隆包:git clonegit://git.qemu-project.org/qemu.git------此处给出kvm的源码地址git clone git://git.kernel.org/pub/scm/virt/kvm/kvm.git
2)解压缩:Tar -xzfqemu-kvm-release.tar.gz
3)进入目的文件夹:Cdqemu-kvm-release
4)配置:./configure------在此期间会存现好多安装库不存在引起的错误,根据提示安装上库再进行配置即可
5)编译:Make -j 10-----此处的-j是使用10个进程进行编译加快速递
6)安装:make install
Apt-get 安装比较方便建议大家使用这种方式进行安装,因为apt-get 会自动安装依赖的包从而保证安装的正确性。
1)查询
root@ubuntu:~# apt-cache search qemu | grepqemu
ipxe-qemu - PXE boot firmware - ROM imagesfor qemu
qemu-common - dummy transitional packagefrom qemu-common to qemu-keymaps
qemu-keymaps - QEMU keyboard maps
qemu-system - QEMU full system emulationbinaries
qemu-system-arm - QEMU full systememulation binaries (arm)
qemu-system-common - QEMU full systememulation binaries (common files)
qemu-system-mips - QEMU full systememulation binaries (mips)
qemu-system-misc - QEMU full systememulation binaries (miscelaneous)
qemu-system-ppc - QEMU full systememulation binaries (ppc)
qemu-system-sparc - QEMU full systememulation binaries (sparc)
qemu-system-x86 - QEMU full systememulation binaries (x86)
qemu-utils - QEMU utilities
aqemu - Qt4 front-end for QEMU and KVM
grub-firmware-qemu - GRUB firmware imagefor QEMU
nova-compute-qemu - OpenStack Compute -compute node (QEmu)
qemu - fast processor emulator
qemu-guest-agent - Guest-side qemu-systemagent
qemu-launcher - GTK+ front-end to QEMUcomputer emulator
qemu-slof - Slimline Open Firmware -- QEMUPowerPC version
qemu-user - QEMU user mode emulationbinaries
qemu-user-static - QEMU user mode emulationbinaries (static version)
qemubuilder - pbuilder using QEMU asbackend
qemuctl - controlling GUI for qemu
qemu-kvm - QEMU Full virtualization
2)安装
root@ubuntu:~# apt-get installqemu-system-x86
Reading package lists... Done
Building dependency tree
Reading state information... Done
qemu-system-x86 is already the newestversion.
The following package was automaticallyinstalled and is no longer required:
ttf-wqy-microhei
Use 'apt-get autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to removeand 548 not upgraded.
此时QEMU和KVM的安装完毕。
安装和启动客户机
安装客户级需要一个磁盘镜像文件用来存储客户机的系统和文件,此时先要创建这个磁盘文件然后再将客户机的操作系统安装到磁盘文件中。我使用的是qemu-img 命令而不是dd命令。
1)创建磁盘文件
root@ubuntu:~/shiyan# qemu-img create -fqcow2 ubuntu.img 5G
Formatting 'ubuntu.img', fmt=qcow2size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off
root@ubuntu:~/shiyan# ls
ubuntu.img
Creatre表示创建磁盘镜像文件 -f qcow2创建的格式为qcow2格式,名字为ubuntu.img,大小为5G。
2)安装镜像文件
root@ubuntu:~/shiyan# qemu-system-x86_64-enable-kvm -m 1024 -smp 4 -boot order=cd -hda ubuntu.img -cdrom/root/qemu/ubuntu-12.04.4-server-amd64.iso
-enable-kvm表示使用kvm模块内核开启虚拟机加速,-m分配内存为1024-smp分配VCPU为4个 -boot指定系统的启动顺序为光驱order=cd -hda表示使用ubuntu.img为客户机的硬盘 -cdrom分配给客户机的光驱为以下文件: /root/qemu/ubuntu-12.04.4-server-amd64.iso
随后出现一个如下图像:
然后你一步一步按照虚拟机的安装步骤安装即可。
2)安装完毕后启动客户机即可
root@ubuntu:~/shiyan# qemu-system-x86_64-enable-kvm -m 1024 -smp 4 -hda ubuntu.img
进入后出现如下图像
此时客户机算是启动好了。
总结:
学习kvm的时候,需要弄清楚kvm和Qemu的关系很重要,其次在进行源码安装的时候容易出错,不建议初学者使用源码安装,我在Qemu安装好了之后,使用qemu-system-x86_64进行安装OS时候,出现了VNC server is running 而没有出现预期的Qemu的界面,才开始我以为是我的命令出错,我就在一个Windows端使用VNc进行连接可是也连接不上,经过百度后才发现少安装了一个库(libsdl1.2-dev),我只好从新进入QEMU的文件夹吧这个库安装上后,从新配置编译安装qemu,所以不建议新人使用源码安装。此时,我至少知道了什么是Kvm了,已经好多细节,很是开心。