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),里面把各个虚拟机都需要的环境都搭建好,然后基于这个镜像建立起一个个增量镜像,每个增量镜像对应一个虚拟机,虚拟机对镜像中所
有的改变都记录在增量镜像里面,基础镜像始终保持不变。
功能:节省磁盘空间,快速复制虚拟机。
功能:节省磁盘空间,快速复制虚拟机。
环境:
基本镜像文件:node.img 虚拟机ID:node
增量镜像文件:node4.img 虚拟机ID:node4
要求:以基本镜像文件node.img为基础,创建一个镜像文件node4.img,以此创建一个虚拟机机node4,虚拟机node4的改变将存储于node4.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
[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格式的镜像文件是否可行。
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>
[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'>
<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>
<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>
<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
[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
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
234M node4.img
P2V V2V V2P
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论