使用KVM需要以下几个前提条件:

    1. CPU必需支持虚拟化,可以在/proc/cpuinfo文件中想找flags,如果是inter的显示为vmx,amd的显示为svm

    2. CPU必需支持64位操作系统,可以在上述文件中查找lm标记,如果有则支持

    3. 系统必需为64为的RHEL,且系统版本为RHEL6.4及以上为最佳

    4. 必需在BIOS里开启CPU的VT功能

KVM虚拟机文件管理:

    默认的KVM虚拟机工作目录为/var/lib/libvirt

    配置文件存在于/etc/libvirt/qemu/目录下,以主机名称+xml结尾的文件即其相关虚拟机的配置文件,需要修改其配置,也可以直接修改xml文件实现(不建议)。其中autostart目录定义的配置文件会随主机一起启动,而network定义了虚拟机使用桥接网络时的网关网卡的相关配置。

KVM配置实例:

    1. 配置安装RHEL6/Centos 6服务器,并安装虚拟化软件

        #yum groupinstall -y "Virtualization" "Virtualization Client" "Virtualization Platform" "Virtualization Tools"

    2. 添加开机启动,并启动服务

        #chkconfig libvirtd on

        #service libvirtd start

    3. 镜像文件管理--直接创建

        创建一个镜像:# cd /var/lib/libvirt/p_w_picpaths ; qemu-img create -f qcow2 test1.img 5G

        更改镜像格式:# qemu-img convert -f raw -o qcow2 test.img test1.img

        增加镜像文件空间: # qemu-img resize test1.img 1G

        查看镜像文件格式:# qemu-img info test1.img

    4. 除了镜像来管理存储,kvm还支持存储池

        定义存储池:virsh pool-define-as kvm_p_w_picpaths dir "/kvm/p_w_picpaths"

        查看存储池:virsh pool-list --all

        建立基于文件夹的存储池:virsh pool-build kvm_p_w_picpaths

        使存储池生效:virsh pool-start kvm_p_w_picpaths

        验证存储池:virsh pool-info kvm_p_w_picpaths

        创建完存储池后,就可以通过创建卷的方法来创建虚拟机的磁盘:

        创建卷:virsh vol-create-as kvm_p_w_picpaths test1.img 10G --format qcow2

        刷新池:virsh pool-refresh kvm_p_w_picpaths

        查看存储池里面的卷信息:virsh vol-list kvm_p_w_picpaths

        查看单个卷的信息:virsh vol-info test1.img kvm_p_w_picpaths

        查看单个卷的详细信息:virsh vol-dumpxml test1.img kvm_p_w_picpaths

    5. 使用virt-install初始化安装一个Centos系统

        # virt-install --connect qemu:///system \ #如果使用kvm安装,并且使用的root,默认为此,基于xen或者其它,可参考man virt-install

        --n test1 \    #指定虚拟机的显示名称

        --c /mnt/centos6.4-x86_64.iso    #指定安装镜像,也可以指定cdrom直接安装,如:-c /dev/sr0

        --r 2048 \    #指定内存,默认为MB

        --arch=x86_64 \    #指定arch模型

        --vcpus=2 --check-cpu --cpuset=0-1 \ #指定cpu0,1作为虚拟机的CPU,此处绑定了CPU

        --os-type=linux --os-variant=rhel6 \    #指定系统类型和版本

        --disk path=/var/lib/libvirt/p_w_picpaths/test1.img,device=disk,bus=virtio,spare=true -s 10 \ #指定磁盘信息,使用virtio驱动加载

        --network bridge=br0 \    #指定桥接模式,并指定通过br0网卡进行桥接

        --noautoconsol --autostart \ #不自动开启控制台,并且随主机自启动

        --vnc    #提供vnc端口访问,在这里可以设置密码,也可以不设置

        --force

    6. 虚拟机管理--virsh

        虚拟机状态管理:

            开机:virsh start test1

            关机:virsh shutdown test1

            强制关机:virsh destroy test1

            重新启动:virsh reboot test1

            通过配置文档启动主机:virsh create /etc/libvirt/qemu/test1.xml

            查看主机状态:virsh list --all

            停止/挂机虚拟机:virsh suspend test1

            保存虚拟机:virsh save test1

            还原虚拟机:virsh resume test1

        从一个已存在的设备配置文件新建一个虚拟机:

            virsh dumpxml test1 >/etc/libvirt/qemu/test2.xml

            qemu-img create -f qcow2 test2.img 20G

            这时需要对其配置中的uuid,id,name,以及新的硬盘镜像文件,mac地址等信息进行更改,更改完成后,就可以通过下面的命令启动虚拟机的安安

            virsh create /etc/libvirt/qemu/test2.xml

        修改内存/CPU:

            修改内存大小:virsh setmem test1 4G    #默认单位为KB

            设置内存的最大值:virsh setmaxmem test1 8G

            增大VCPU数量:virsh setvcpus test1 8

        添加/删除设备:

            添加一块硬盘:

                首先需要创建一个镜像,但是qemu-img创建的镜像没有被处理过(分区及格式化),因此可以使用libguestfs插件创建一个可以直接使用的磁盘分区:

                    yum install -y libguestfs

                    virt-make-fs -F qcow2 -t ext4 -s 50G /var/lib/libvirt/p_w_picpath/test1-1.img

                然后将新的磁盘信息录入到test1.xml文件当中(通过命令virsh edit test1来修改为佳):

                   
                       
                       
                       
                   

                最后执行添加设备的命令:

                    virsh attach-device test1 /etc/libvirt/qemu/test1.xml

                如果需要删除此设备,将xml文件中的设备信息删除后,执行以下命令即可:

                    virsh detach-device test1 /etc/libvirt/qemu/test1.xml

        备份/还原:

            备份:virsh save --bypass-cache test1 /var/lib/libvirt/save/test1_1.save --running

            还原:virsh restore /var/lib/libvirt/save/test1_1.save --bypass-cache --running

        快照管理:

            如果要使用kvm的快照功能,就必须使用qcow2的磁盘格式,而raw只支持内存快照,如果不是,请参考第3节内容修改

            查看快照:virsh snapshot-list test1

            创建快照:virsh snapshot-create test1 test1.snap1

            恢复到快照:virsh snapshot-revert test1 test1.snap1

            删除快照:virsh snapshot-delete test1 test1.snap1

    7. KVM虚拟机的迁移

        其实了解了上面的操作之后,就明白,KVM虚拟机依靠两个主要文件来启动,一个是img文件,一个是xml配置文件。因此迁移的时候,可以直接迁移这两个文件就能实现静态迁移。如果img文件存放在共享存储,则更为方便,只用迁移xml配置文件,就可以实现静态迁移。

        当然,virsh命令也可以迁移虚拟机,不过要求目标主机与当前主机的应用环境须保持一致,其命令格式如下:

            virsh migrate --live test1 qemu+tcp//destnationip/system tcp://destnationip

        

结语:KVM还有许多其它方面的功能,如与VM之间的迁移、windows的扩展支持等功能,如果有兴趣的同学,可以参考man手册,其中已经提供了非常详细的用法说明。