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

其实,我只是想实现虚拟机的增量备份而已。这里已经有这个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"} }

]

}

}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容