最近在作xen上虚拟机的迁移,说实话这个问题已经困扰小编我好久好久了,每次都是以失败了结。今天,就在激动人心的今天终因而迁移成功了,不过最后又发现了一个小问题,最后再说。今天就写下这篇博客以此记念并记录当时的操做。linux
之前一直都是本身遇到问题,在网上百度,谷歌查找满天飞的资料,最后发现也没几篇文章可以对得上号,不少问题其实你们都应该遇到过,最后确定也解决了,不过你们都习惯了搭便车,晒出本身最后怎么解决的却没几个,不是忘记就是过高兴了。但愿今天的这篇文章,可以给之后遇到一样问题的你一点帮助。vim
废话就很少说了,直接上操做,总结吧。centos
1、实验环境服务器
先说明一下,网上不少迁移的教程都是用三台xen主机作的,一台作共享存储器能够是nfs也能够是isis,其它两台分别是源主机和目的主机。我这边的话由 于种种缘由只安装了两台机器,这次实验是基于两台电脑来作的。主机A既是nfs服务器也是xen源主机,主机B是xen目的主机,环境以下:架构
2、迁移前的准备dom
1.首先,必须保证你全部实验的机器的体系架构同样(操做系统彻底一致,版本,位数什么的),xen版本同样,必须一致,重中之重,小编在这里可栽了很多跟头。ssh
2.下载一个迷你,小型的系统镜像,centos也好,WinXP也好,主要用于一下子安装domain客户虚拟机用函数
3.确保源主机和目的主机都有足够的空间。oop
4.确保两台机器之间可以ping通。测试
tips:若是ping的时候ping不通,请检查一下,网线是否插好,IP地址是否在同一网段,还有防火墙是否关闭,每台机器的网线是否插在正确的网口(小编以前的台式机有两个网口,插在了亮红灯的上面,一直ping不一样,后来换在发萤黄色的网口上,就ping通了)。
5.安装nfs服务
sudo apt-get install nfs-kernel-server
sudo apt-get install nfs-common
安装好后修改vim /etc/exports文件,添加 /share *(rw,sync,no_root_squash)
注意这里的/share 目录就是一会要拿来作共享存储的目录。咱们必须在源主机和目的主机都创建这个相同的目录,mkdir /share
启动nfs服务,service nfs-kernel-server start ,而后利用mount命令进行挂载测试便可。
mount -t nfs IP地址:要挂在的路径 本机路径,举个例子 mount -t nfs 169.254.9.88:/share /share这样我就能在我本机的/share的目录下访问169.254.9.88主机上的/share目录了
6.安装SSH服务
利用xl migrate domainid 目的主机IP地址,其实这里是利用SSH链接的,因此咱们要配置ssh。
sudo apt-get install openssh-client
sudo apt-get install openssh-server
启动ssh服务 /etc/init.d/shh start
生成密钥对 ssh-keygen -t rsa
发送公钥 ssh-copy-id -i id-rsa.pub root@对方IP地址,出现提示直接yes便可,一切没问题会让你输入对方目的机器的root用户的密码,若是不知道密码能够利用sudo passwd root 来修改root用户的密码(目的主机上操做)。
tips: root@IP地址,默认链接root用户,固然也能够换成其余用户如songmin@ip地址,这样就会提示你输入songmin用户的密码,或者你直接 ssh-copy-id -i id-rsa.pub ip地址,这样是默认链接root用户的。
一切操做完成后,就可使用ssh ip地址去远程链接对方目的主机了,注意这里是默认链接root用户,若是出现错误多是你的网线没插,或者输入密码错误,又或者是root用户默认不容许远程的登陆。若是是第三个缘由,请修改目标主机的vim /etc/ssh/sshd_config文件将PermitRootLogin without-password 这里改成PermitRootLogin yes保存退出后重启ssh服务/etc/init.d/ssh restart 便可生效。
3、迁移步骤
1.建立一个创建在共享存储上的虚拟机域
安装Apache(http)服务,具体的操做请网上自行查阅,篇幅过小不够写,安装好后,我将/var/www做为了根目录。
2.建立存放domainU的文件cd /share 在/share目录下进行
dd if=/dev/zero of=cen.img oflag=direct seek=102399 bs=1M count=1 这里建立了100G
3.将下载好的iso镜像复制到/share 目录,我用的是centos-6.3.iso
4. 创建iso目录,mkdir /var/www/iso
挂载目录 mount -o loop /share/xx.iso /var/www/iso
将vmlinuz,initrd.img解压 cp /var/www/iso/isolinux/{vmlinuz,initrd.img} /share
5.编写配置文件
先将工做目录切换到xen下,cd /etc/xen
而后vim cen.cfg,写入如下配置信息
注意,我这里的配置文件是安装好以后的了,请你们把kernel和ramdisk前面的注释符去掉,将bootloader那一行前面前面加上注释。而后保存退出。
而后 xl create -c cen.cfg 安装便可。一路根据提示就好了,不清楚能够参考网址:
http://luochen2015.blog.51cto.com/9772274/1751540
建立好以后,xl list 看一下,刚建立的虚拟机是否在运行。
6.在目标主机上挂载共享目录
mount -t nfs 169.154.12.45:/share /share
7.进行迁移
xl migrate cen 169.254.12.125
出现下图,说明没什么问题啦。
而后在目的主机上 xl list 发现多了一个虚拟机,而源主机上已经找不到刚才迁移的虚拟机了。
四.总结
我以前遇到不少问题,形成我没有迁移成功在这里详细总结一下。
1.virtual-manager不支持xen的迁移
一开始作实验实验的时候,我是利用virtual-manager这个图形化界面建立虚拟机的。它支持xen和KVM+qemu两种链接方式。在上面建立好虚拟机右键,你会发现有一个迁移的选项,但并不能点击。这是由于你没有在virt-manager链接其余主机,因此不能迁移,链接也是用的ssh,配好ssh以后,就能够链接其余的xen主机啦。
当我点击迁移时,报错是这样说的,链接驱动器不支持这个功能。但kvm是能够迁移得,截图以下:
2.迁移时虚拟域配置文件没有,或者格式不正确。
经过virt-manager建立的xen虚拟机的配置文件位于/var/lib/xen下,通常运行时才会有个对应的xml格式配置文件。而经过virt-manager建立的kvm+qemu虚拟机的配置文件放在/etc/libvirt/qemu下。
一开始我还不知到用xl create 配置文件来建立虚拟机,就只有用virt-manager来建立。
因而我就直接用xl migrate IP地址开始迁移,报错提示说缺少配置文件。
而后我又 xl migrate -C IP地址,仍是报错,说的是配置文件的格式不被识别。
后来我发现这样是不行的,因而就放弃了用virt-manager建立虚拟机,也所以开始了漫长的建立虚拟机之路。
3.没有配置SSH
4.建立的虚拟机不对
我尝试使用virt-install,virsh,virt-manager,xen-tools, xl create等建立虚拟机。后来在不断的尝试中我发现使用virt-install和virtual-manager建立是同样的,迁移时会不识别配置文件。而xen-tool建立的虚拟机也没有成功建好。最后在不断的试验中终于利用xl create建立好了虚拟机
5.不会写用 xl create 建立虚拟机的配置文件
一开始我并不知道这个配置文件怎么写,也尝试将xml格式的转化过来,不过最后都失败了,后来查阅了一些资料,慢慢研究才终于懂得了配置文件怎么写。
6.存放虚拟机的文件没有共享或目的主机不存在这个文件
当虚拟机成功建好,ssh配置好,配置文件也没有错以后,我再一次进行迁移实验。最终结果仍然是失败。提示:xx.img no sunch file or direction
决绝办法就是cp 复制到目标主机,这样的结果就是太慢了,耗时,耗力。
拷过去以后,再次迁移又报错说 :message to long ,思考了半天应该是没有用共享存储的问题,而要迁移的虚拟机也应该创建在共享存储上。
7.看源码没突破
遇到上述的那个问题的时候,师兄建议我去分析源码,因而我就分析了好长一段时间的源码,大概1个周,不过最后我也没有分析出个因此然,而后也不知道问题在哪儿,浪费了很长一段时间。
能够参考http://blog.csdn.net/bearox/article/details/69388926,我还评论交了很久。
虽然源码使用C语言+Python写的,但我以为看起来仍是有点费力,毕竟一开始我都不知道从哪一个文件哪一个函数开始是迁移相关的代码,也不知道函数中莫名出现的变量是从哪儿来的。毕竟要看懂别人的思想和套路仍是要花时间琢磨。
途中还遇到一个:qemu signature :internal error 这个问题我不知道是为何,后来直接从新作了一边实验,就没出现这个问题而是其余问题了。
8.系统体系架构问题
通过一段时间分析源代码无果以后,咱们导师就让师兄指导我作一下实验。因而我又放弃分析源码,开始从头作一遍实验。
这一次出现的问题是mmap faild
和师兄一块儿检查讨论了很久,后来发现本身两台机子的操做系统为数居然不一致,一个是32位,一个是64位。这样迁移确定是有影响的。因而就决定从新装一遍环境。装成同样的以后,就成功迁移了。
9.最后还有一个很奇怪的现象,就是成功迁移过去的虚拟机,在目的主机上运行一段时间后,居然莫名奇妙的就消失了,xl list 就没有对应显示运行的信息了,如今还不知道是怎么回事。