我想知道在两个 KVM 主机之间移动虚拟机的正确方法是什么无需使用任何类型的共享存储
将磁盘文件和 XML 转储从源 KVM 机器复制到目标 KVM 机器是否足够?如果是,需要运行哪些命令才能将虚拟机导入目标?
Dom0 和 DomU 上的操作系统都是 Ubuntu。
提前致谢
答案1
- 将虚拟机的磁盘从
/var/lib/libvirt/images
源主机复制到目标主机上的相同目录 - 在源主机上运行
virsh dumpxml VMNAME > domxml.xml
并将此 xml 复制到目标主机 - 在目标主机上运行
virsh define domxml.xml
启动虚拟机。
- 如果磁盘位置不同,则需要编辑 xml 的设备/磁盘节点以指向目标主机上的映像
如果虚拟机连接到自定义网络,则需要在目标主机上的 xml 中编辑它们,或者重新定义它们
- 在源机器上
virsh net-dumpxml NETNAME > netxml.xml
- 将 netxml.xml 复制到目标机器
- 在目标机器上
virsh net-define netxml.xml && virsh net-start NETNAME & virsh net-autostart NETNAME
)
- 在源机器上
答案2
由于我尚无法发表评论,因此我必须通过这种方式将附录发布到 dyasny 的回答中。
如果虚拟机具有您想要保留的快照,则应该在源上virsh snapshot-dumpxml $dom $name > file.xml
为虚拟机的快照列表中的每个快照转储快照 xml 文件virsh snapshot-list --name $dom
。
然后在目标上使用virsh snapshot-create --redefine $dom file.xml
来完成快照的迁移。
如果您还关心哪个快照是当前快照,则可以在源上另外执行以下操作:
virsh snapshot-current --name $dom
并在目标上执行以下操作:
virsh snapshot-current $dom $name
然后,您可以使用virsh snapshot-delete --metadata $dom $name
每个快照删除源上的 xml 文件,或者您也可以从中删除它们/var/lib/libvirt/qemu/snapshots/$guestname
资料来源:
答案3
是的,只需复制 XML 文件和虚拟磁盘映像就足够了,但这显然会妨碍“实时”迁移。在此过程中必须关闭虚拟机。
一旦复制到目的地,libvirtd
必须重新加载或重新启动才能识别新的 XML 文件。
答案4
我在几台较旧的 KVM 服务器上遇到过这个问题,但当它发生时真的很烦人,并且会导致任何已安装的 VM 出现问题。就我而言,它经常将我的一台 VM 推入重置状态,因为磁盘空间慢慢耗尽。以下说明对 KVM/Distro 版本有些敏感。就我而言,我有 CentOS 7.5
CentOS Linux release 7.5.1804 (Core) and Qemu-KVM version 1.5.3
默认情况下,KVM 映像位于 /var/lib/libvirt/images/
您需要找到虚拟机的名称,为此使用 virsh list
virsh list
Id Name State
----------------------------------------------------
12 VM-Name paused
停止虚拟机 virsh stop VM-Name
对我来说,我先复制文件,而不是移动。将 qcow 文件复制到新位置
cp /var/lib/libvirt/images/VM-Name.qcow2 /home/VMImages/
编辑 VM xml 文件,引用新的“源文件”位置 virsh edit VM-Name
您将需要更改“源文件”此文件
重新启动 libvirtd 服务
service libvirtd restart
然后重新启动虚拟机,一切就绪了。
virsh start VM-Name