现在是老环境的虚拟机需要往新环境迁移。
面临的问题:
- 新老环境存储不同
- 部分代码不同
- 网络环境不同
- win2003的虚拟机老环境没有装virtio驱动,新环境用的virtio
解决方案:
现在迁移的总体方案
1、在新环境各个用户的账号下创建相同规格(或者不同规格)虚拟机,这样可以保证数据库数据是没有问题的,也不会多出垃圾数据;创建相同的卷;需要记录虚拟机uuid和卷uuid,以下称为:{new_instance_uuid}和{new_volume_uuid}
如果规格完全相同,则迁移后界面显示的规格和实际规格就没有问题
如果规格不同,则迁移后存在底层实际是老环境的规格,而界面显示是新的规格
2、将老环境虚拟机的实际资源拷贝到新环境下:
具体操作:
a、获取需要迁移的虚拟机的uuid,以下称为:{old_instance_uuid},通过cinder list | grep {instance_uuid}查询到存储卷的id,以下称为{old_volume_uuid}。
b、拷贝文 件/var/lib/nova/instances/{old_instance_uuid}/disk 到/var/lib/nova/instances/{new_instance_uuid}/disk ,拷贝之前记得备份,如果虚机是2003的系统,记得先安装virtio驱动,安装方法在后面。
c、拷贝文件/var/lib/nova/instances/volume-{old_volume_uuid}到新环境的计算节点下(新建目录之下,待传到rbd上后可删除)
d、拷贝文件/var/lib/nova/instances/_base/{base_uuid}到新环境对应的目录
获取{base_uuid}的方法:
qemu-img info disk 查看backup file路径对应的文件
3、待资源都拷贝到新环境之后,作如下替换操作:
a、由于存 储不同(新环境使用ceph rbd,老环境是glusterfs),首先修改拷贝过来得文件名称为volume-{new_volume_uuid};然后删除rbd中已存在的 volume-{new_volume_uuid},***重新往rbd中上传改过名称的用户存储文件volume-{new_volume_uuid}。
具体操作如下:
aa:修改名称:
- mv volume-{old_volume_uuid} volume-{new_volume_uuid}
bb:删除rbd存储数据:
- rbd rm volumes/volume-{new_volume_uuid}
(此处需在计算节点操作,因为计算节点安装了ceph客户端)
cc:上传老环境的改过名的存储文件到rbd中:
- qemu-img convert -f raw -O raw volume-{new_volume_uuid} rbd:volumes/volume-{new_volume_uuid}
(同样计算节点操作)
4、目前新环境使用的virtio的网卡(支持千兆),老环境没有使用,因此win2003需要安装virtio驱动才能正常使用网络,经过测试必须在disk文件中安装才能生效,因此对于需要迁移的win2003,需要一个一个去安装驱动。
安装步骤:
a、将老环境的虚拟机的disk拷贝到备份目录,并同时将virtio驱动拷贝,2003的virtio驱动virtio-win-1.5.2-2003.vfd
命令如下:
- /usr/libexec/qemu-kvm -m 1024 -drive file=disk,index=0,boot=on -fda virtio-win-1.5.2.vfd -boot d -net nic,model=virtio -net user -nographic -vnc :90
使用vnc登陆机器,安装virtio驱动(设备管理器里更新驱动,选择软盘)
装好后拷贝到新环境对应的目录下
原文出自:http://blog.csdn.net/ivy_feifei/article/details/41543461