KVM
2012-07-12
一台虚拟机的核心就是一个磁盘镜像加/etc/libvirt/qemu/*.xml配置文件,这个镜像可以理解成虚拟机的磁盘,里面有虚拟机的操作系统和驱动等重要文件。Kvm可以使用的镜像格式包括raw,qcow2,vmdk,vdi,其中raw格式镜像是裸设备,裸设备就是没有被格式化的分区、文件所以io性能会好些,qcow2格式的镜像支持快照功能。vdi是oracle虚拟机的镜像格式,vmdk是vmware虚拟机的镜像格式,注意在修改完/etc/libvirt/qemu/*.xml配置文件时需要从新define一下才能生效,virsh  define  /etc/libvirt/qemu/*.xml
虚拟机的创建首先创建一个虚拟机的镜像,然后利用Virtual  Machine Manager图形工具进行创建安装。这里有一个问题,创建一个qcow2格式的镜像,然后Virtual  Machine Manager图形工具选择这个qcow2格式的镜像大小竟然为0,不知道为什么,解决方法是首先创建一个raw格式的镜像,系统安装完成后将raw格式的镜像装换成qcow2格式的,然后将对应虚拟机的硬盘路径改为qcow2新格式的镜像,只有qcow2格式的镜像才支持快照功能
Kvm虚拟机安装步骤
    1>检查cpu是否支持虚拟化  egrep  (svm|vmx)  /proc/cpuinfo
    2>安装qemu-img  libvirt    virt*  bridge-utils软件包
    3>检查kernel是否加载了kvm模块  lsmod |grep  kvm
    4>配置宿主机网卡桥接 ,配置完成后重启宿主机,参考如下
5>配置iso池用于存储系统的iso文件,配置存储池用于存储vm的磁盘镜像。
6>通过vmm安装虚拟机
qmeu-img创建的镜像是一个稀疏文件,也就是说刚创建出来的文件并没有8G,它会随着数据的增多慢慢增加,直到8G
qemu-img有很多命令,包括下面常用的,当然qemu-img -h你懂得。
Info            查看镜像的信息
Create        创建镜像
Check        检查镜像
Convert        转化镜像的格式,(raw,qcow ……)
Snapshot        管理镜像的快照
Rebase        在已有的镜像的基础上创建新的镜像
Resize        增加或减小镜像大小
 创建镜像
shell>qemu-img  create  -f  raw  /kvm/kvm3/kvm3.img  6G
镜像格式转化
shell>qemu-img  convert -f  raw  kvm3.img  -O  qcow2  kvm3.img.qcow2
增加镜像大小raw和qcow2格式都支持镜像的大小增加,减小镜像大小会导致系统报错启动不了
Shell>qemu-img  resize  kvm3.img  10G
Shell>qemu-img  info  kvm3.img
快照
shell>virsh
virsh>snapshot-create-as  kvm1  kvm1-original        为kvm1虚拟机创建快照
virsh>snapshot-list      kvm1                          查看kvm1虚拟机的快照   
virsh>snapshot-info    kvm1  kvm1-original          查看kvm1虚拟机的快照详细信息
virsh>snapshot-revent  kvm1    kvm1-original          恢复kvm1虚拟机的状态到kvm1-original快照时
virsh>snapshot-delete  kvm1    kvm1-original          删除kvm1的kvm1-original快照
vm如果建立在/dev/sda6这种裸设备上面,对它进行迁移需要先转换成文件,copy到目的主机后可以直接使用或者在将文件转成成裸分区,例如:
Lenovo>dd  if=/dev/sda6  of=/mnt/kvm1.img 
然后将kvm1.img拷贝到hp机器上,然后
Hp>dd  if=/mnt/kvm1.img  of=/dev/sda7
然后创建一个虚拟机导入裸分区即可,或者直接使用kvm1.img裸设备。
如果希望虚拟机在宿主机启动的时候自动启动可以在/etc/libvirt/qemu/autostart目录下创建一
个软连接连接到对应vm的xml文件,例如 ln  -s  /etc/libvirt/l  /etc/libvirt/qemu/l
虚拟机的迁移分为离线迁移与在线迁移两种方式,离线迁移需要将vm关闭,vm上面的应用会断掉,离线迁移将虚拟机的镜像文件与xml配置文件拷贝到远程主机上,然后将xml文件里面的镜像文件路径指对即可这种迁移方式比较简单
动态迁移需要有共享存储环境,动态迁移不会中断顶层应用,下面以nfs为共享存储为例演示动态迁移
1)配置nfs共享一个目录,nfs配置文件格式为  /nfs-pool  *(rw,sync,no_root_squash)
2)打开KVM虚拟机管理器
双击之后出现主机详情:
点击上图存储左下角的添加按钮,添加存储池,填入名称,这里选择类型为netfs(网络导出的目录):
点击前进后,目标路径为nfs挂载路径,选择格式为nfs,填上NFS SERVER地址和挂载目录,源地址为nfs共享的目录名称,目标路径为挂载点。点击完成之后就会创建成功:
完成之后再存储池就会出现刚刚建立的NFS共享存储池:
(nfs共享存储加入之后会自动挂载到相应目录,这里无需重新手动挂载)
点击新建卷建立存储:
根据实际需要调整存储卷大小
完成之后安装系统,新建虚拟机:
这里选择本地安装介质
选择对应的系统和版本












具体的安装步骤这里不做具体的介绍
=================================VMM1====================================
虚拟机安装vim命令完成以上步骤之后就可以实现动态迁移:
在VMM1上连接VMM2,如下



选择需要迁移的KVM虚拟机,右击迁移,出现如下迁移的选项, 展开高级选项,其中有一个迁移主机地址,填上10.1.1.117即可
 
完成设置之后,点击迁移即可!


迁移完成之后,虚拟机在VMM2上状态不变,运行正常
基础镜像与增量镜像
1、概述
实验目的:通过一个基础镜像(node.img),里面把各个虚拟机都需要的环境都搭建好,然后基于这个镜像建立起一个个增量镜像,每个增量镜像对应一个虚拟机,虚拟机对镜像中所
有的改变都记录在增量镜像里面,基础镜像始终保持不变。
功能:节省磁盘空间,快速复制虚拟机。
环境:
基本镜像文件:node.img  虚拟机ID:node 
增量镜像文件:node4.img 虚拟机ID:node4
要求:以基本镜像文件node.img为基础,创建一个镜像文件node4.img,以此创建一个虚拟机机node4,虚拟机node4的改变将存储于node4.img中。
2、创建增量镜像文件
[root@target kvm_node]#qemu-img create -b node.img -f qcow2 node4.img  20G
[root@target kvm_node]# qemu-img info node4.img
image: node4.img
file format: qcow2
virtual size: 20G (21495808000 bytes)
disk size: 33M
cluster_size: 65536
backing file: node.img (actual path: node.img)
#注:该实验只是针对qcow2格式的镜像文件,未测试raw格式的镜像文件是否可行。
3、创建虚拟机node4的XML配置文件
[root@target kvm_node]# cp /etc/libvirt/l /etc/libvirt/l
[root@target kvm_node]# vim /etc/libvirt/l
<domain type='kvm'>
  <name>node4</name>                                  #node4的虚拟机名,须修改,否则与基本虚拟机冲突
  <uuid>4b7e91eb-6521-c2c6-cc64-c1ba72707fe4</uuid>  #node4的UUID,必须修改,否则与基本虚拟机冲突
  <memory>524288</memory>
  <currentMemory>524288</currentMemory>
  <vcpu cpuset='0-1'>2</vcpu>
  <os>
    <type arch='x86_64' machine='rhel5.4.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/virhost/kvm_node/node4.img'/>    #将原指向/virhost/kvm_node/node.img改为node4.img
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <interface type='bridge'>
      <mac address='54:52:00:69:d5:f4'/>            #修改网卡MAC,防止冲突
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5904' autoport='no' listen='0.0.0.0' passwd='xiaobai'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
</domain>
4、根据xml配置定义虚拟机node4
[root@target kvm_node]#virsh define /etc/libvirt/l
[root@target kvm_node]#virsh start node4 
5、测试
[root@target kvm_node]# du -h node.img
6.3G    node.img
[root@target kvm_node]# du -h node4.img
33M    node4.img
[root@node4 ~]# dd if=/dev/zero of=test bs=1M count=200  #在虚拟机node4上增量200M大小文件
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 1.00361 seconds, 209 MB/s
[root@target kvm_node]# du -h node.img                    #基本镜像文件node.img大小未变
6.3G    node.img
[root@target kvm_node]# du -h node.img                    #增量镜像文件node4.img增加200M了
234M    node4.img
P2V  V2V  V2P

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。