KVM的driver_mirror功能相关实验

原创,转载请务必注明出处及URL,谢谢!

早前做的一些KVM功能相关的实验,分享一下。

mirror相关实验1【mirror功能基本测试】:

vm运行时,执行镜像操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘drive_mirror -f xxxblock_device  /data/xxxxxx-mirror.img‘

查看完成状态:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block-jobs‘

在mirror镜像过程中,vnc、ssh、console连接到vmxxxxxxx,执行一些touch文件、创建目录、删除目录、dd写入数据的操作

当mirror-img的大小与原大小相同时,执行取消mirro操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘block_job_cancel xxxblock_device‘

以上过程完成后,使用/data/xxxxxx-mirror.img创建虚拟机,进入新创建的虚拟机,查看mirror创建过程中的文件目录创建、删除、写入操作是否被同步。

实验结论:

mirror过程中关于文件、目录的创建、删除、写入操作均被同步的保存到新创建的mirror-img中。

mirror相关实验2【mirror过程中踢出存储服务】:

host1: 开启nfs服务,设置共享路径为/data/mirror

host2:  mount挂载host1的nfs共享存储路径到本地的 /data/mirror

再host2上vm运行时,执行镜像操作,mirror-img保存到/data/mirror路径下:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘drive_mirror -f xxxblock_device  /data/mirror/xxxxxx-mirror.img‘

查看完成状态:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block-jobs‘

在mirror镜像过程中,在host1中执行service nfs stop服务,将nfs共享存储断开

在host2上多次执行查看mirror状态的操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block-jobs‘

mirror镜像状态保持停止

连接到vmxxxxxxx,执行一些touch文件、创建目录、删除目录、dd写入数据的操作

在host1中执行service nfs start服务,将nfs共享存储开启

在host2上多次执行查看mirror状态的操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block-jobs‘

mirror镜像状态从停止状态(持续了一段时间)变成进行状态

查看完成状态,直到mirror-img的大小与原大小相同时,执行取消mirro操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘block_job_cancel xxxblock_device‘

以上过程完成后,使用/data/xxxxxx-mirror.img创建虚拟机,进入新创建的虚拟机,查看mirror创建过程中的文件目录创建、删除、写入操作是否被同步。

实验结论:

mirror过程可以被中断,mirror过程中关于文件、目录的创建、删除、写入操作均被同步的保存到新创建的mirror-img中。

stop/commit相关实验1【stop状态下执行commit操作的对象】:

vm运行时,执行如下操作挂起:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘stop‘

查看vm的系统镜像:

ll /data/kvm/disk.img

查看vm系统镜像的back文件路径:

qemu-img info /data/kvm/disk.img

查看back文件的信息:

ll /data/kvm/base/base.img

对块设备做commit操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘commit xxxblock_device‘

完成后,查看vm的系统镜像:

ll /data/kvm/disk.img

查看back文件的信息:

ll /data/kvm/base/base.img

实验结论:

stop状态下可以对block_device做commit操作,commit操作将vm系统中的产生的数据刷新到base文件中。

mirror相关实验3【block_job_complete操作(运行时切换vm系统镜像)】:

vm运行时,执行镜像操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘drive_mirror -f xxxblock_device  /data/xxxxxx-mirror.img‘

查看完成状态:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block-jobs‘

执行如下动作挂起vm:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘stop‘

当mirror-img的大小与原大小相同时,执行complete操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘block_job_complete xxxblock_device‘

执行如下动作取消vm挂起:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘c‘

查看block-jobs,已经没有活动的job:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block-jobs‘

执行如下命令,查看block的信息,vm的系统镜像仍指向原镜像

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block‘

查看虚拟机镜像文件及mirro生成文件:

ll /data/

连接vm,进入后执行一个dd写入操作:

dd if=/dev/vda  of=test.img bs=1MB count=512

查看虚拟机镜像文件及mirro生成文件:

ll /data/

可以看到,vm的原系统镜像大小没有发生变化,但mirror镜像大小增加了512MB既,block_job_complete操作实际上切换了vm的系统镜像。

vm中执行shutdown操作

删除刚创建的镜像

rm -f /data/xxxxxx-mirror.img

再次运行vm,执行镜像操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘drive_mirror -f xxxblock_device  /data/xxxxxx-mirror.img‘

当mirror-img的大小与原大小相同时,执行complete操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘block_job_complete xxxblock_device‘

查看block-jobs,已经没有活动的job:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block-jobs‘

执行如下命令,查看block的信息,vm的系统镜像仍指向原镜像

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block‘

查看虚拟机镜像文件及mirro生成文件:

ll /data/

连接vm,进入后执行一个dd写入操作:

dd if=/dev/vda  of=test.img bs=1MB count=512

vm中执行shutdown操作:

查看虚拟机镜像文件及mirro生成文件:

ll /data/

可以看到,vm的原系统镜像大小没有发生变化,但mirror镜像大小增加了512MB既,block_job_complete操作实际上切换了vm的系统镜像。

实验结论:

无论是否对vm做挂起操作,block_job_complete操作均会切换vm的系统镜像到新生成的mirror镜像

mirror相关实验4【执行两次drive_mirror和block_job_complete操作】:

继续上一次的实验环境

再次执行镜像操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘drive_mirror -f xxxblock_device  /data/mirror-xxxxxx-mirror.img‘

完成后,查看虚拟机镜像文件及mirro生成文件:

ll /data/

可以看到新生成的镜像文件与上一次执行的生成的mirror镜像文件大小相同,既镜像的是切换后的镜像文件。

再次执行complete操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘block_job_complete xxxblock_device‘

查看虚拟机镜像文件及mirro生成文件:

ll /data/

连接vm,进入后执行一个dd写入操作:

dd if=/dev/vda  of=test__0000.img bs=1MB count=512

vm中执行reboot操作:

查看虚拟机镜像文件及mirro生成文件:

ll /data/

可以看到,vm的原系统镜像大小没有发生变化,第一次mirror生成的镜像大小也没有发生变化,第二次mirro镜像大小增加了512MB

实验结论:

可以连续的执行block_job_complete操作,连续切换系统镜像。

mirror相关实验5【block_job_complete操作后,物理上移除原系统镜像】

vm运行时,执行镜像操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘drive_mirror -f xxxblock_device  /data/xxxxxx-mirror.img‘

查看完成状态:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block-jobs‘

当mirror-img的大小与原大小相同时,执行complete操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘block_job_complete xxxblock_device‘

执行mv操作将vm系统镜像文件mv到另外一个文件系统

实验结论:

block_job_complete操作后可以物理上移除原系统镜像

mirror相关实验6【mirror使用-n参数】

centso6.2的基础镜像base.img

qemu-img create -f qcow2 -o  backing_file=/data/kvm/base.img  /data/kvm/centos6.2-qcow2.img

qemu-img create -f qcow2 -o  backing_file=/data/kvm/base.img  /data/kvm/mirror-centos6.2.img

vm使用centos6.2-qcow2.img 为系统镜像,启动vm

进入vm,做写入操作:

dd if=/dev/vda of=test.img bs=1MB count=1024

在host上查看写入的情况, centos6.2-qcow2.img不断增长:

ll /data/kvm

host上执行镜像操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘drive_mirror -n xxxblock_device  /data/kvm/mirror-centos6.2.img‘

在host上查看写入的情况, mirror-centos6.2.img不断增长:

ll /data/kvm

查看完成状态:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘info block-jobs‘

在mirror镜像过程中,vnc、ssh、console连接到vmxxxxxxx,执行一些touch文件、创建目录、删除目录的操作

当mirror-img的大小与原大小相同时,执行取消mirro操作:

virsh qemu-monitor-command --hmp vmxxxxxxx  ‘block_job_cancel xxxblock_device‘

以上过程完成后,使用mirror-centos6.2.img创建虚拟机,进入新创建的虚拟机,查看mirror创建过程中的文件目录创建、删除、写入操作是否被同步。

实验结论:

mirror过程中关于文件、目录的创建、删除、写入操作均被同步的保存到新创建的mirror-centos6.2.img。

使用-n参数方法并以base.img镜像为基础,可以保证使用mirror功能保存尽可能少的数据,并以最快的速度创建mirror镜像。

总结:

1》以上实验,基本验证了使用mirror功能做快照的可行性,同时,针对系统盘和数据盘可采用不同的参数来进行快照,保证可用性。

2》对于qemu-kvm的drive,当指定cache为none模式时,理论上用户系统只要做了写入磁盘操作,均会被同步的写入到镜像文件中,但对于用户系统中没有落入磁盘的文件系统/数据修改,该方法不能保证数据的一致性。

3》在不对用户系统做挂起操作的情况下,目前没有手段可以保证数据100%一致。

时间: 2024-10-05 04:20:53

KVM的driver_mirror功能相关实验的相关文章

KVM的基础功能(网络、内存、cpu、存储的配置)

KVM的基础功能(网络.内存.cpu.存储的配置) cpu的配置 1)查看cpu插槽数量 [[email protected] ~]# cat /proc/cpuinfo |grep "physical id" |wc -l 24 2)查看cpu核心数量 [[email protected] ~]# cat /proc/cpuinfo |grep "core id"| wc -l 24 3)查看cpu的模型 [[email protected] ~]# cat /p

相关实验示例

相关实验示例 创建文件系统 1.创建分区 fdisk or gdisk /dev/DIVICE 2.创建文件系统 mkfs .fs_type or mkfs -t fs_type /dev/DIVICE/??? 3.挂载 创建挂载点 mkdir /mnt/???(可以任意创建) 临时挂载: mount /dev/DIVICE/??? /mnt/???(挂载点) 永久挂载 :vim /etc/fstab UUID ------.. mount -a 创建和删除swap分区 1.创建分区 fdisk

vsftp服务介绍与相关实验

一.VSFTP服务简介 FTP 是 File Transfer Protocol(文件传输协议)的英文简称,用于 Internet 上的文件的双向传输.使用 FTP 来传输时,是具有一定程度的危险性, 因为数据在因特网上面是完全没有受到保护的明文传输方式!VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP, 从名称定义上基本可以看出,这是为了解决 ftp 传输安全性问题的. 1.1.vsftp特点 vsftp 程序的运行者一般是普通用

微信卡券功能相关策略调整 类目库存等进行修改

双11狂欢活动微信的战绩应该不是很好,很少看到相关数据报道,现在微信发布卡券功能相关策略调整公告,微信卡券功能正式向直供型电商开放申请了,这是在亡羊补牢吗?(11月11日,腾讯低调庆祝了16岁生日,并在晚间宣布上线有“免费通话”功能的“微信电话本”.用户已超8亿的微信,再次试图通过“过顶传球”颠覆运营商最根本的语音业务.) 以下是微信团队的系统公告 卡券功能相关策略调整 卡券功能在原有基础上做出多项优化.改进,以下是最核心的五点: 一.卡券功能正式向直供型电商开放申请 经过开放策略的调整和申请流

col标签的相关实验

col上有width属性,如果对应值没有单位,默认是像素 <!DOCTYPE html> <html> <head> <title>col相关实验</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="X-UA-Compatible" c

浅析LUM及相关实验

浅析LVM及相关实验 LVM(Logical Volume Manager)是一个磁盘管理子系统,将一个或者多个底层设备组织成逻辑设备.在LVM里,一个或者多个PV组成一个VG(Volume Group,卷组),而从一个VG里又可以虚拟划分出若干个LV(Logical Volume,逻辑)卷), 如下示意图 其底层设备划分成分区PE,单个PE默认大小为4M,可取值4M,8M,12M,16M 为2的整数倍. 在pv ,vg ,lv之下的操作,有一些命令 pv:  pvcreate, pvs, pv

mariadb事务隔离级别相关实验

关于SQL的隔离级别 SQL标准定义了4类隔离级别,如下所示:1. Read Uncommitted (读取未提交内容)在该隔离级别,所有事务都可以看到其他未提交事务的执行结果.本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少.读取未提交的数据,也被称之为脏读(Dirty Read) 2. Read Committed (读取提交内容)这是大多数数据库系统的默认隔离级别(但不是MySQL默认的).它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变.这种隔离级别 也支持所谓

网络组相关实验

网络组相关实验 网络组是centos7上新出的一个技术,它的作用和bonding类似,是将多个网卡聚合在一起方法,从而实现冗错和提高吞吐量,不同于旧版中bonding技术,网路组提供更好的性能和扩展性,它是由内核驱动和teamd守护进程实现. 网路组可以工作在多种方式(runner) broadcast roundrobin activebackup loadbalance lacp (implements the 802.3ad Link Aggregation Control Protoco

CentOS6启动流程呢个以及删除boot分区相关实验

centos6启动流程 主动读取BIOS,通过CMOS加载硬件信息 ,并进行POST,指定第一个可启动的设备 ROM:BIOS,Basic Input and Output System,保存着计算机系统最重要的基本输入输出程序,系统信息设置,开机加电自检程序RAM:保存各项参数的设定 读取第一个可启动设备MBR的引导加载程序(grub)的启动信息 MBR: 446 boot loader 64:分区表 2 :55aa BIOS通过硬件的INT13中断功能来读取MBR的 Windows:ntlo