qemu-kvm-0.12 adds block migration feature
虽然都是root.img 但是在不同的目录上,因为是测试调试,所以直接将qmp输出到标准输出。
VM1:/usr/libexec/qemu-kvm --enable-kvm -name VM1 -drive file=root.img,if=virtio,boot=on -monitor stdio -vnc 0.0.0.0:0
VM1已经启动,正常进入系统。可以通过5900端口连接到VM1中
VM2:/usr/libexec/qemu-kvm --enable-kvm -name VM2 -drive file=root.img,if=virtio,boot=on -monitor stdio -vnc 0.0.0.0:1 -incoming tcp:localhost:10010
VM2是监听虚拟机,只有进程单虚拟机并没有启动,vnc的连接状态是僵死,可能描述不正确,端口在,也不拒绝连接,就是挂起。
在VM1上执行:migrate -d -b tcp:localhost:10010
使用info migrate查看当前状态
(qemu) info migrate
Migration status: active
transferred ram: 74028 kbytes
remaining ram: 74252 kbytes
total ram: 147840 kbytes
transferred disk: 10484736 kbytes
remaining disk: 1024 kbytes
total disk: 10485760 kbytes
在VM2上的状态:
(qemu) Receiving block device images
Completed 100 %
在VM1上的状态:
(qemu) info migrate
Migration status: completed
当在VM2中达到100%时,VM2的vnc5901就可以连接了,而5900就挂起,可以kill掉VM1的进程,因为虚拟机现在已经迁移到VM2中。
这个就是KVM迁移相对比较底层的状态操作。
同理,使用libvirt迁移的时候,其实也是在目标机器上创建一个完全相同配置的虚拟机,开启一个监控监听,然后源机器将数据块(包括ram和disk)迁移到目标机器上,达到100%时,destroy source。