Xenserver虚拟机迁移到KVM

有一批节点都是xen的管理起来成本比较高,后续是想要统一都使用kvm来进行日常的管理和维护。这篇文章就是记录如何将Xenserver上的虚拟机迁移到kvm上。

  • Xenserver 7.x 节点 192.168.122.20
  • Gentoo KVM 192.168.122.1
  • nginx vm 192.168.122.22

目标是将在xenserver中 nginx这个虚拟机迁移到kvm里面同时要保障迁移之后服务还是可以正常使用。

为了方便后续在kvm上管理虚拟机要对当前的虚拟机进行一些简单的配置。

给虚拟机启动console的功能

修改/etc/default/grub文件在GRUB_CMDLINE_LINUX这行添加如下内容:

GRUB_CMDLINE_LINUX=".... net.ifname=0 biosdevname=0 console=ttyS0,115200n8"

生成新的grub配置

grub2-mkconfig -o /boot/grub2/grub.cfg

首先查看虚拟机的磁盘:

xe vm-disk-list name-label=nginx

这里的uuid RO就是我们要导出的磁盘

Disk 0 VDI:
uuid ( RO)             : 622bd53f-56fc-4e41-954c-c7e164a092bc
       name-label ( RW): nginx 0
    sr-name-label ( RO): Local storage
     virtual-size ( RO): 10737418240

导出磁盘:

xe vdi-export uuid=622bd53f-56fc-4e41-954c-c7e164a092bc filename=nginx.vhd format=vhd

将生成的vhd文件拷贝到kvm节点上。

先要转换磁盘格式:

qemu-img convert -p -f vpc nginx.vhd -O qcow2 nginx.qcow2

拉起一个vm

sudo virt-install \
--name nginx --memory 4096 \
--vcpus 4 \
--disk /home/chris/workspace/qemu/disk/nginx.qcow2 \
--network network=default,model=virtio \
--cpu=host-passthrough \
--import \
--os-variant centos7 \
--graphics=vnc,password=000000,listen=0.0.0.0,port=5900

实际启动的时候发现不能正常启动,这里再去修一下引导,用archlinux的iso去启动。

设置livecd里面的密码和启动sshd服务:

echo root | passwd --stdin && systemctl start sshd

查看分配的ip:

ip a 

远程链接过去之后创建挂载点:

mkdir -pv /mnt/centos

挂载磁盘:

mount /dev/mapper/centos-root /mnt/centos
mount /dev/vda1 /mnt/centos/boot

干掉原来boot下面的所有内容:

rm -rf /mnt/centos/boot/*

接下来我们要进入到chroot里面重新去安装一下内核以及grub:

mount --bind /proc /mnt/centos/proc
mount --bind /dev /mnt/centos/dev
mount --bind /sys /mnt/centos/sys
mount --bind /run /mnt/centos/run
chroot /mnt/centos /bin/bash

安装grub 内核以及生成新的grub配置文件:

. /etc/profile
yum install grub2 -y
grub2-install /dev/vda
yum install kernel -y
grub2-mkconfig -o /boot/grub2/grub.cfg

退出chroot环境:

exit

卸载挂载后重启:

umount -R /mnt/centos
reboot

重启之后就可以正常进入系统了,同时服务也是能够正常启动的。

这种手动迁移算是比较糙的干法了,如果说是虚拟机节点比较多的话这种就不是很合适了。 还需要考虑到的一个问题是Xenserver本身的保留的硬盘不是很多迁移的时候最好是搞一个nfs服务器直接将xenserver导出的磁盘到这个nfs服务器上然后再给kvm节点挂载一个这样比较方便。

另外一个就是需要重新搞一下bootloader的这个问题,还是比较麻烦要到livecd重新安装一下,具体为什么我没有进一步去研究如果你感兴趣的话也可以研究一下看看。