Xenserver虚拟机迁移到KVM
Contents
需求
有一批节点都是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里面同时要保障迁移之后服务还是可以正常使用。
Xenserver 虚拟机配置
为了方便后续在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节点上。
在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重新安装一下,具体为什么我没有进一步去研究如果你感兴趣的话也可以研究一下看看。