我的客户机有 2 个分区(80GB + 1TB)。它们都在 LVM 上。我想以最短的停机时间将所有磁盘转移到另一台机器上。我用nc转移了另一台机器。这需要 4 天,在传输过程中我的虚拟机已关闭。
我尝试在传输脏页后制作快照。但是使用 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>
源主机:
- CPU:Intel(R) Xeon(R) CPU D-1520 @ 2.20GHz
- 操作系统:16.04.1 LTS
- 内核:4.2.0-34-generic
- qemu-kvm: 1:2.3+dfsg-5ubuntu9.2
- QEMU:2.3.0
- libvirt:1.2.16
目标主机:
- CPU:Intel(R) Xeon(R) CPU D-1520 @ 2.20GHz
- 操作系统:16.04 LTS
- 内核:4.4.0-28-generic
- qemu-kvm: 1:2.5+dfsg-5ubuntu10.2
- QEMU:2.5.0
- libvirt:1.3.1
KVM/libvirt 支持 VM 实时迁移和存储迁移(无共享设置),尽管有一些限制。您的主要问题是存储池具有不同的配置,因此我不确定是否
libvirt
会毫无问题地迁移 VM 映像。进行实时迁移 + 存储副本的命令是:
此命令假定您与远程主机有一个有效的基于 libvirt 的连接。
如果您在迁移虚拟磁盘时遇到问题,您可以尝试创建存根目标虚拟磁盘文件,并执行(在目标主机上)类似于
fallocate /dev/vg-datastore/lv-vm-1138 -l 80G
and的内容/dev/vg-datastore-sata/lv-vm-1138-2 -l 1T
。无论如何,由于主机之间的差异,这可能是一条崎岖不平的道路。
迁移 VM 映像的更简单方法是使用增量磁盘复制方法,使用
blocksync
. 简而言之:请注意,链接的
blocksync
程序是基于此原始脚本的个人分叉版本(顺便说一句,它是此脚本的改进版本)。我显然对代码不承担任何责任,我强烈建议您在将其用于生产虚拟机/磁盘文件之前对其进行彻底测试。与往常一样,在做任何事情之前,您必须有一个确认良好的备份。编辑:正如下面评论中所建议的,另一个同步块设备/虚拟图像文件的好软件是
bdsync
. 方法基本相同:在 VM 运行时获取磁盘文件的第一个“种子”副本,然后停止 VM 并进行另一个最终副本。过去我什至向bdsync
开发人员询问过类似的问题;请参阅此处了解更多信息。