我的访客机器有2个分区(80GB + 1TB)。 他们都在LVM上。 我想以最less的停机时间将所有磁盘传输到另一台计算机。 我用nc转了另一台机器。 这需要4天,在转移过程中,我的虚拟机closures了。
我试图在传输脏页之后创build快照。 但是用LVM AFAIK不可能。 我的目标机器没有LVM设置和空闲的未分区空间。 所以在目标机器上的磁盘必须是原始的文件映像。
<disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/vg-datastore/lv-vm-1138'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </disk> <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none'/> <source dev='/dev/vg-datastore-sata/lv-vm-1138-2'/> <target dev='vdb' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </disk>
源主机:
目标主机:
KVM / libvirt通过存储迁移(无共享设置)支持虚拟机实时迁移,尽pipe存在一些限制。 您的主要问题是存储池具有不同的configuration,所以我不确定libvirt是否会毫无问题地迁移VM映像。
执行实时迁移+存储副本的命令是:
virsh migrate --live --copy-storage-all --persistent qemu + ssh:// root @ / system
这个命令假设你有一个到远程主机的有效的基于libvirt的连接。
如果在迁移虚拟磁盘时遇到问题,可尝试创build存根目标虚拟磁盘文件,并执行(在目标主机上)类似于fallocate /dev/vg-datastore/lv-vm-1138 -l 80G和/dev/vg-datastore-sata/lv-vm-1138-2 -l 1T 。
无论如何,由于主机之间的差异,这可能是一个颠簸的道路。
迁移虚拟机映像的更简单的方法是使用增量磁盘复制方法,使用blocksync 。 简而言之:
请注意,链接的blocksync程序是基于这个原始脚本的私人分支版本(顺便说一句,这是该脚本的改进版本)。 我明显地承担了代码没有责任 ,我强烈build议您在生产虚拟机/磁盘文件上使用它之前彻底testing它 。 与往常一样,在做任何事情之前,你必须有一个确认好的备份。
编辑:如下面的评论build议,另一个伟大的软件来同步块设备/虚拟镜像文件是bdsync 。 这个方法基本上是一样的:在虚拟机运行的时候,首先获取磁盘文件的“种子”副本,然后停止虚拟机并做最后的拷贝。 以前我甚至向bdsync开发者提过一个类似的问题, 在这里看到更多的信息 。