在线迁移存储

http://www.udpwork.com/item/12674.html

Block Copy指的是虚拟机存储迁移。迁移时,采用Snapshot+Block stream完成存储迁移。首先通过对虚拟机进行在线外部快照,然后通过BlockStream技术合并快照,完成存储热迁移。BlockStream可以将backing file合并至active


示例:

qemu 运行虚拟机

qemu-system-x86_64 -m 1024 1.img

ctrl+alt+2切换到qemu命令行下

使用info block 查看块设备信息

块设备为 ide-hd0 使用的镜像是1.img

创建一个外置快照

再使用info block 查看块设备,此时ide0-hd0 使用的文件已经是刚才创建的快照文件了,下面还有一行注意,backing file 1.img说明 这个快照文件是依赖原来的镜像文件的

接下来使用 block_stream 命令把backing file 合并到快照中

此时马上使用info block查看可以看到快照还是依赖原来的镜像文件,稍等一会再使用info block查看,此时快照已经不再依赖原来的镜像文件了

此时存储迁移已经完成


迁移后的镜像格式只能为qcow2,源文件格式可以为qcow2和raw


已测试从本地文件系统迁到本地文件系统,本地文件系统和nfs之间相互迁


xml格式

http://www.libvirt.org/formatsnapshot.html


测试代码

python

import libvirt

conn=libvirt.open("qemu:///system")

p = conn.lookupByName()

flags=libvirt.VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY

p.blockJobAbort("/var/lib/oe-instances-disk/7733b525-62d4-44b9-bf06-a2fe361d8f63",0)


xml="

<domainsnapshot> \

  <name>snap1</name> \

  <description>snap1-desc</description> \

  <disks> \

    <disk name='hdb' snapshot='external'> \

      <source file='/root/1359.img'/> \

    </disk> \

  </disks> \

</domainsnapshot> "


p.snapshotCreateXML(xml, flags)

p.blockPull("hdb", 0, 0)

p.blockJobInfo("hdb", 0)


//获取进度信息,输出

 p.blockJobInfo("hdb", 0)

{'end': 21474836480L, 'bandwidth': 0L, 'type': 1, 'cur': 7534346240L}

>>> p.blockJobInfo("hdb", 0)

{'end': 21474836480L, 'bandwidth': 0L, 'type': 1, 'cur': 7556366336L}

>>> p.blockJobInfo("hdb", 0)

{'end': 21474836480L, 'bandwidth': 0L, 'type': 1, 'cur': 7577337856L}

>>> p.blockJobInfo("hdb", 0)

{'end': 21474836480L, 'bandwidth': 0L, 'type': 1, 'cur': 12414615552L}

>>> p.blockJobInfo("hdb", 0)

{}








posted @ 2015-09-30 14:52  sjun  阅读(808)  评论(0编辑  收藏  举报