我想知道在两台KVM主机之间移动虚拟机的正确方式是什么, 而不使用任何共享存储
将磁盘文件和XML转储从源KVM机器复制到目标机器就足够了吗? 如果是这样的话,需要运行哪些命令来将vm导入到目的地?
操作系统是在Dom0和DomU上的Ubuntu。
提前致谢
virsh dumpxml VMNAME > domxml.xml
并将此xml复制到dest。 主办 virsh define domxml.xml
启动虚拟机。
virsh net-dumpxml > netxml.xml
和virsh net-define netxml.xml && virsh net-start NETNAME & virsh net-autostart NETNAME
) 由于我现在还不能评论,所以我必须以这种方式向dyasny的回答发表这个附录。
如果虚拟机具有要保留的快照,则应该为VM的快照列表中的每个快照使用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
virsh snapshot-delete --metadata $dom $name
中删除它们
资料来源:
是的,只需复制XML文件和虚拟磁盘映像就足够了,但这显然排除了“实时”迁移。 在此过程中,VM必须closures。
一旦复制到目的地,必须重新加载或重新启动libvirtd
来识别新的XML文件。
这些说明适用于使用LVM提供的磁盘的虚拟机,并假定Python位于每台主机上
从https://gist.github.com/rcoup/1338263下载blocksync.py脚本,并将源主机和目标主机放在/ home / user文件夹中。
您还需要在这两台机器上具有“sudo”权限才能访问“root”。
或者,你可以做所有事情的根,但只有你的SSH密钥给你至less目标机器的根访问权限。 **在这种情况下,请从命令行中删除用户名。
ssh [email protected]
sudo virsh --all
sudo virsh dumpxml larry> larry.xml
将转储的定义复制到新机器(“目标”主机),例如:
scp -p larry.xml 10.10.10.38:larry.xml
你可以改变内部IP到你的目的地dom0服务器名称**注意:最好使用目标IP地址,例如:
scp -p larry.xml [email protected]:larry.xml
如果你不能复制,由于钥匙猫larry.xml并复制它然后你可以ssh到其他机器,并创build文件并粘贴它。
使用find虚拟机磁盘的大小和名称
sudo lvs - 单元B
。
**上面的命令应该以字节显示大小。 **机器的磁盘名称位于列表的第一列,其卷组位于第二列,大小位于最后。 **确定设备名称为/ dev // **使用'll'命令进行检查例如,在此输出中:vm_larry vg1 -wi-ao —- 69793218560B
LV VG Attr LSize池原点数据%元%移动日志Cpy%同步转换 lv_root vg1 -wi-ao ---- 53687091200B lv_swap vg1 -wi-ao ---- 17179869184B vm_vsrv1 vg1 -wi-ao ---- 193273528320B vm_vsrv10 vg1 -wi-ao ---- 64424509440B vm_vsrv11 vg1 -wi-ao ---- 161061273600B vm_vsrv12 vg1 -wi-ao ---- 204010946560B vm_vsrv2 vg1 -wi-ao ---- 140110725120B vm_vsrv3 vg1 -wi-ao ---- 128849018880B vm_larry vg1 -wi-ao ---- 69793218560B vm_vsrv5 vg1 -wi-ao ---- 257698037760B vm_vsrv6 vg1 -wi-ao ---- 64424509440B vm_vsrv7 vg1 -wi-ao ---- 161061273600B vm_vsrv8 vg1 -wi-ao ---- 64424509440B vm_vsrv9 vg1 -wi-ao ---- 214748364800B
ls -l / dev / vg1 / vm_larry
是:lrwxrwxrwx。 1 root root 8 Jan 31 13:57 / dev / vg1 / vm_larry – > ../dm-11
ssh [email protected]
创build一个卷定义文件,例如:
vi larry.domainname.com.au-vol.xml
要么
nano larry.domainname.com.au-vol.xml
用以下几行:注意 – 你将需要从原始虚拟机中获取字节的大小,并放在下面的脚本中。 源机器上的大小命令是sudo lvs –units B
<volume type='block'> <name>larry.domainname.com.au</name> <capacity unit='bytes'>69793218560</capacity> <allocation unit='bytes'>69793218560</allocation> <target> <path>/dev/centos/larry.domainname.com.au</path> <permissions> <mode>0600</mode> <owner>0</owner> <group>6</group> <label>system_u:object_r:fixed_disk_device_t:s0</label> </permissions> </target> </volume>
注意:这个定义是针对VM larry的69793218560 Bytes磁盘,根据实际VM的需要进行更改。
注意:名称和path的最后部分应该匹配,并将用作新的磁盘名称。
使用定义创build新磁盘
sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml
它会说从larry.domainname.com.au-vol.xml创build的Vol larry.domainname.com.au
使磁盘设备文件可访问:
sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au
sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au
编辑复制的xml定义,例如:
vi larry.xml
在文件中查找磁盘定义(search“source dev =”),并用刚刚创build的设备(可以使用ls / dev / centos /查看虚拟机)replace设备,例如:/ dev / drbd4 – > / dev / CentOS的/ larry.domainname.com.au
**在接口节中find任何对“br1”的引用,并将其更改为“br0”,例如,您正在更改源桥,所以行就像这样
login到源主机,例如
ssh [email protected]
最好的做法是在执行最终同步之前closures源主机上的VM,但不需要完成。 (virshclosuresNameOfMachine)
如果尚未在源主机上,请从https://gist.github.com/rcoup/1338263下载blocksync.py脚本
如果您的用户名是用户名(例如),则将两个机器中的blocksync.py脚本复制到/ home / user和chown user:user并chmod 755该脚本。
scp -p blocksync.py [email protected]:blocksync.py
sudo -E python blocksync.py / dev / vg1 / vm_larry [email protected] /dev/mapper/centos-larry.domainname.com.au -b 4194304
注意:第一个设备名是针对源主机的,由'lvs'命令确定; 这个来自[[chewie]]源主机。
注意:这将破坏目标磁盘的内容,请确保/dev/mapper/centos-larry.domainname.com.au是正确的!
注意:同步将需要很长时间 – 每GB约100秒,即:60 GB的磁盘需要90分钟。
但是,您可以在VM正在使用时进行同步; 随后的同步速度可以高达25%
该脚本将打印出它正在使用的参数(可能有一个关于已弃用模块的消息,这没关系)。 接下来,它显示它正在使用的ssh命令并运行它(当它这样做时,您将看到授权人员唯一的消息)。 在同步期间,它将显示复制的块的总数和平均速度。 最后,它打印出一个完成消息的秒数。
您可以使用CTRL C取消同步,稍后再次运行命令重新启动
ssh [email protected]
virsh定义larry.xml
sudo virsh开始larry
sudo virsh autostart larry
注意:可能需要更改VM的详细信息以适应新的环境。