只是想实现虚拟机镜像的增量备份

其实,我只是想实现虚拟机的增量备份而已。这里已经有这个Feature了,有但是你知道怎么使用吗?

大概浏览了一下,发现这几个关键词:

dirty bitmap,QMP。

大概意思是,用户可以通过QMP(QEMU Machine Protocol)的机制,给虚拟机的某个,或某几个Block Driver绑定一个Dirty Bitmap,这样就能实时获取这个Block Device的增量改变(Incremental Backup)。

怎么搞定这个问题?QMP介绍,QMP命令是怎么和具体函数绑定的?

添加一个QMP命令,需要做两个修改:1 修改qapi-schema.json,在里面添加QMP的命令。2 在代码源文件中添加相应的处理函数,这个处理函数的名字有讲究:qmp_[命令名],这样QMP命令就和相应的处理函数绑定到一起了。

增量备份相关的QMP的命令对应的处理函数在源文件:blockdev.c,的函数:qmp_transaction。顺着源码读下去,会发现最终就是在结构体:BlockDriverState的一个成员:dirty_bitmaps中添加一个BdrvDirtyBitmap。

文件docs/bitmaps.md中的例子:

{ "execute": "transaction",

"arguments": {

"actions": [

{"type": "block-dirty-bitmap-clear",

"data": {"node": "drive0", "name": "bitmap0"} },

{"type": "drive-backup",

"data": {"device": "drive0", "target": "/path/to/new_full_backup.img",

"sync": "full", "format": "qcow2"} }

]

}

}

现在可以很清晰的知道源码中的运行流程了。(真的不是用来写技术博客的!)

你可能感兴趣的:(只是想实现虚拟机镜像的增量备份)