无
对碎片很多的QCOW2大文件创建或删除内部快照时,会出现虚拟机暂停时间较长影响虚拟机业务的问题。
虚拟机备份、普通克隆、完全克隆会调用虚拟机内部快照功能,因此也涉及此问题。
此文档提供针对此问题几种情况的解决方法。
首先确认QCOW2镜像是否存在碎片。
方法一:手工确认
登陆CVK后台,找到要确认的虚拟机磁盘镜像文件,然后使用命令:qemu-img check /img.path查看,实例如下:
输出结果中,fragmented即碎片率,此值越大碎片越多:
方法二:使用CASToolkit工具
使用此运维工具会列出CAS平台中所有碎片多的虚拟机磁盘镜像文件
注意事项:
a.对于被CloudOS管理的虚拟机或云硬盘需要先取消纳管,操作完成后再重新纳管。
b.执行后台操作过程中不要对前台界面做任何操作,包括此虚拟机的任何操作。
c.操作过程中有新创建镜像的命令时,一定不要和已有镜像重名不然数据会被覆盖。
d.建议在业务闲时做以下操作。
解决方法一:blockcopy
blockcopy的优势是可以在当前镜像文件没有快照的情况下实现在线转换镜像释放碎片。
步骤1、使用virsh list命令查询需要操作的虚拟机
步骤2、使用virsh domblklist命令确认需要操作的磁盘,这里需要操作vdb
virsh domblklist domid
步骤3、使用qemu-img info命令查看对应QCOW2镜像信息,virtual size记录下来很重要
qemu-img info /img-path
另外需要查看镜像是否有backing file,如果没有直接跳到步骤4
如果有backing file(这里是test1) , 执行如下命令创建镜像, 执行完后跳过步骤4,执行步骤5
qemu-img create -f qcow2 -b /backingfile-img
/new-img
注:/xx/test1 是backing file的完整路径, test-img 是新创镜像完整路径,不能和已有镜像重名
步骤4、使用qemu-img c
reate 创建一个镜像,这里大小是1T(创建的大小一定要和步骤3查出来的virtual
size一样),执行前需要确认空间是否足够,qemu-img
create -f qcow2 -o preallocation=falloc /img-path size
注意:新创建的镜像名字千万不要和已有的镜像名字重名,不然数据会被覆盖
步骤5、使用virsh blockcopy
在线更改存储,这里vdb是步骤2查出来要操作的磁盘,test-mig就是步骤4创建的新镜像
virsh blockcopy domid diskname /destimg-path
--wait --verbose --shallow --pivot --reuse-external --transient-job
这个命令需要等待较长时间,因为是在做磁盘在线拷贝,磁盘越大等待的时间越久; 所以最好在业务闲时做此操作.
注意:命令执行过程中不能强制中断。
步骤6、到这里操作就完成了,在确认一切正常后,如虚拟机数据和业务都正常的情况下,删除原来老的镜像文件,也就是步骤2查出来的镜像文件。
解决方法二:convert
convert方式需要虚拟机关机并删除快照,使用convert新生成的镜像文件替换原镜像文件,确认无问题后,再删除原镜像文件。
参考《虚拟机磁盘convert操作指导》
解决方法三:kill虚拟机进程
若已经出现对应的快照操作卡主、虚拟机业务暂停的问题时,如果现场需要急需恢复业务、停止快照任务,可以通过kill虚拟机进程来快速取消该快照操作。
通过virsh list --all命令查看故障虚拟机的名称,通过ps -ef |grep vmname 查看虚拟机进程,再通过kill -9 vmpid 杀掉虚拟机进程的方式取消快照任务。
快照任务取消后,再次手动启动虚拟机。
注意,这个操作有损坏虚拟机磁盘文件、数据丢失的风险,建议对有备份的虚拟机做此操作,出现磁盘文件损坏无法修复时,可以通过备份恢复。
规避方案一:磁盘配置为置零或者延迟置零模式
当现网用户的环境存储空间足够时,建议创建虚拟机时将磁盘配置为置零或者延迟置零模式,在置零和延迟置零模式下,由于qcow2文件的L2表是连续分配的,当进行虚拟机快照创建或者删除操作时,基本不存在长时间暂停虚拟机的问题。
注意:需要避免快照长时间保留的情况,否则会出现与精简模式相同的问题。
规避方案二:使用外部快照
CAS E0708、UIS E0742P03及之后的版本支持磁盘外部快照功能,做快照时选择磁盘外部快照可避免此问题。
该案例暂时没有网友评论
✖
案例意见反馈
亲~登录后才可以操作哦!
确定你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作