虚拟机通过virsh qemu-monitor-command在线备份
查看存储设备名
# 通过qmp查看 virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "query-block" }' # 通过hmp查看 virsh qemu-monitor-command DOMAIN --hmp 'info block'
--pretty
表示将输出的json进行换行格式化展示,否则只有一行,该参数和--hmp
互斥
备份命令
# 完整备份(包含backing file):“full” virsh qemu-monitor-command DOMAIN '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-virtio-disk0" , "sync" : "full" , "target" : "/opt/backup/full.img" } }' # 完整备份(不包含backing file,仅备份当前文件):“top” virsh qemu-monitor-command DOMAIN '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-virtio-disk0" , "sync" : "top" , "target" : "/opt/backup/top.img" } }' # 实时导出新IO:“none” virsh qemu-monitor-command DOMAIN '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-virtio-disk0" , "sync" : "none" , "target" : "/opt/backup/none.img" } }' # 增量备份:“bitmap” virsh qemu-monitor-command DOMAIN '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-virtio-disk0" , "sync" : "incremental" , "bitmap" : "bitmap0" , "target" : "/opt/backup/inc.0.qcow2" } }' # 增量备份:“bitmap”,通过iscsi远程导出 virsh qemu-monitor-command DOMAIN '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-virtio-disk0" , "sync" : "incremental" , "bitmap" : "bitmap0" , "target" : "iscsi://192.168.1.100:3260/iqn.2019-01.com.iaas/0" } }'
"format": "qcow2" 可以指定备份为qcow2格式,默认为raw格式.
备份的四种方式
▷ full:完整备份,会将指定磁盘及其链上的所有母盘(backing file),合并输出到本地
▷ top:仅备份当前磁盘,而不包含backing file。此项仅对本地盘有效,对于ceph rbd,top和full的效果一样都是完整备份
▷ none:new I/O,即从执行备份命令起,一旦有IO变化,就会实时导出有变化的数据,直到虚拟机关机或者手工停止job才会停止。仅支持qcow2格式的块设备,不支持raw格式(注意,这里指的是qcow2格式,而并非要求qcow2本地盘)
▷ incremental:指定dirty bitmap进行备份,目前qemu的增量备份就是指基于dirty bitmap的备份
上述4种备份是互斥的:任意一种备份job运行中,都无法执行其他类型的备份,也无法再开启同种备份的新job
full、top、none这三种备份的操作方法非常简单,在前面“常用命令一览”中已经提到,不再赘述,而增量备份会稍微复杂点,本文的重点将放在增量备份上
备份任务管理
# 通过qmp查看运行中的任务 virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "query-block-jobs" }' # 通过hmp查看运行中的任务 virsh qemu-monitor-command DOMAIN --hmp 'info block-jobs' # 停止备份任务 virsh qemu-monitor-command DOMAIN '{ "execute": "block-job-cancel", "arguments": { "device": "drive-virtio-disk0", "force": true } }' # 暂停备份任务 virsh qemu-monitor-command DOMAIN '{ "execute" : "block-job-pause", "arguments" : { "device" : "drive-virtio-disk0" } }' # 恢复已暂停的备份任务 virsh qemu-monitor-command DOMAIN '{ "execute" : "block-job-resume", "arguments" : { "device" : "drive-virtio-disk0" } }'
事件监听
# 始终监听事件 virsh qemu-monitor-event DOMAIN --timestamp --loop # 当收到特定事件后停止监听 virsh qemu-monitor-event DOMAIN --event BLOCK_JOB_COMPLETED
不用一次一次查看任务了,可以直接开启监听,就能及时看到备份完成。
BitMap操作
# 创建非持久bitmap(qemu >= 2.4) virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "block-dirty-bitmap-add", "arguments": {"node": "drive-virtio-disk0","name": "bitmap0"}}' # 创建持久bitmap(qemu >= 2.10) virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "block-dirty-bitmap-add", "arguments": {"node": "drive-virtio-disk0","name": "bitmap1", "persistent": true}}' # 查询虚拟机的所有磁盘的bitmap virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "query-block" }' # 删除bitmap virsh qemu-monitor-command DOMAIN --pretty '{ "execute" : "block-dirty-bitmap-remove", "arguments" : { "node" : "drive-virtio-disk0", "name" : "bitmap0" } }' # 重置bitmap(重置bitmap就是将bitmap的count值置为0,重新跟踪磁盘变化) virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "block-dirty-bitmap-clear", "arguments": {"node": "drive-virtio-disk0","name": "bitmap0"}}'
其他:
查看支持的命令 virsh qemu-monitor-command DOMAINID '{"execute": "query-commands"}'
查看支持的qemu-guest-agent的指令: virsh qemu-agent-command DOMAIN --pretty '{ "execute": "guest-info" }' virsh qemu-agent-command DOMAIN --cmd '{"execute":"guest-run-command","arguments":{"command":"cat /etc/hosts"}}'
-
查看几个盘
-
全量备份当前盘
virsh qemu-monitor-command DOMAIN '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-virtio-disk0" , "sync" : "full" , "target" : "/vms/full.qcow2" , "format": "qcow2"} }' -
设置bitmap0
virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "block-dirty-bitmap-add", "arguments": {"node": "drive-virtio-disk0","name": "bitmap0"}}' -
增长数据后,导出增长数据
virsh qemu-monitor-command DOMAIN '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-virtio-disk0" , "sync" : "incremental" , "bitmap" : "bitmap0" , "target" : "/vms/inc.0.qcow2", "format":"qcow2" } }' -
重置bitmap0
virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "block-dirty-bitmap-clear", "arguments": {"node": "drive-virtio-disk0","name": "bitmap0"}}' -
导出新的增长数据
virsh qemu-monitor-command DOMAIN '{ "execute" : "drive-backup" , "arguments" : { "device" : "drive-virtio-disk0" , "sync" : "incremental" , "bitmap" : "bitmap0" , "target" : "/opt/backup/inc.1.qcow2" } }' -
增量数据合并
确保链接顺序
qemu-img rebase -u -b full.img inc.0.qcow2
执行可以发现qemu-img info inc.0.qcow2 的输出[root@HB1-BJMY1-ComCvk-001 vms]# qemu-img info inc.0.qcow2 image: inc.0.qcow2 file format: qcow2 virtual size: 40G (42949672960 bytes) disk size: 10M cluster_size: 262144 backing file: full.img Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false qemu-img commit inc.1.qcow2
qemu-img commit inc.0.qcow2 -
导入qcow2开启新虚拟机
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具