QEMU/KVM磁盘在线备份

QEMU/KVM磁盘在线备份

QEMU/KVM磁盘的在线完整及增量备份,是“打包”方案的一种具体实现,可实现基于时间点的备份,同时支持本地与远程2种备份方式,并可指定备份文件进行恢复。

tag: qemu, kvm, disk, live, backup, incremental, bitmap

小慢哥的原创文章,欢迎转载

目录

▪ 1. 本文缘由
▪ 2. 最终能实现什么
▪ 3. 环境说明
▪ 4. 常用命令一览
▪ 5. 磁盘在线备份的4种方式
▪ 6. 查询磁盘对应的设备名
▪ 7. 什么是bitmap
▪ 8. 创建与查询bitmap
▪ 9. 基于bitmap做增量备份
▪ 10. 删除bitmap
▪ 11. 重置bitmap
▪ 12. 备份逻辑
▪ 13. 远程备份
▪ 14. 备份任务管理
▪ 15. 事件查看
▪ 16. 备份链、数据恢复、合并
▪ 17. 参考文档

1. 本文缘由

在虚拟化底层技术中,存储是重中之重,没有人愿意丢数据。因此备份就显得尤为重要

根据备份的实现方案可分为2类:

副本:可以单纯从后端存储上直接实现,而无需计算层面的帮助,比如Ceph可以做多副本,本地盘文件形式可以通过DRBD技术做实时同步。副本方案提高了存储的整体可靠性
打包:表示对磁盘数据进行定期打包导出,当需要恢复的时候,可以指定备份文件来恢复

副本与打包是互补的,副本无法根据时间点来做备份恢复,而打包也没有宕机前一刻的数据。本文阐述的所有内容,均是“打包”

2. 最终能实现什么

经过调研和测试,最终本文的内容,可以实现如下几大功能:

▷ 在线完整备份、在线增量备份
▷ 事件查看
▷ 任务管理
▷ 不限存储形式,可以是本地盘qcow2、raw,也可以是ceph rbd等各种形式
▷ 远程备份

3. 环境说明

本文所有内容,除特殊说明,均是基于以下环境

▷ 操作系统:CentOS 7.5 x86_64
▷ qemu:基于ovirt-4.3 yum源的qemu-2.12.0
▷ libvirt:基于centos-update yum源的libvirt-4.5.0

4. 常用命令一览

获取磁盘设备名

# 通过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" } }'

bitmap操作

# 创建非持久bitmap(qemu >= 2.4) virsh qemu-monitor-command DOMAIN '{ "execute": "block-dirty-bitmap-add", "arguments": {"node": "drive-virtio-disk0","name": "bitmap0"}}' # 创建持久bitmap(qemu >= 2.10) virsh qemu-monitor-command DOMAIN '{ "execute": "block-dirty-bitmap-add", "arguments": {"node": "drive-virtio-disk0","name": "bitmapY", "persistent": true}}' # 删除bitmap virsh qemu-monitor-command DOMAIN '{ "execute" : "block-dirty-bitmap-remove", "arguments" : { "node" : "drive-virtio-disk0", "name" : "bitmap0" } }' # 重置bitmap virsh qemu-monitor-command DOMAIN '{ "execute": "block-dirty-bitmap-clear", "arguments": {"node": "drive-virtio-disk0","name": "bitmap0"}}' # 查询虚拟机所有磁盘的块信息,含bitmap virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "query-block" }' # 查询虚拟机指定磁盘的bitmap(查询第一块磁盘使用[0],第二块用[1],以此类推) virsh qemu-monitor-command DOMAIN --pretty '{ "execute": "query-block" }' | jq .return[0] | sed -n '/dirty\-bitmaps/,/]/p'

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11667.html