• 全文目录

  • 1:相关概念

  • 2:手工迁移

  • 2.1 P2V之再生龙

  • 2.2 其它工具(有本中文读物)

  • 3:自动迁移(适用于v2v)

  • 3.1 shell迁移(试用)

  • 3.2 ansible迁移(试用)

  • 3.3 windows图形化工具?(想的美)

  • 4:额外引用

  • 5:在不停机的情况下如何p2v

  • 5.1 借助vmware的力量

  • 5.2 借助赛门铁克(smantec)之力

1:关于迁移涉及到的诸多概念

Icon                

有幸接触到一篇关于迁移方案调研的文档,此文档详细罗列了当下迁移所涉及到的相关概念及相关工具,虽然没有提及迁移步骤,但阅读此文深感自己底蕴不足;

为了避免整体抄袭之嫌,这里摘录部分个人认为重要的概念

 A 整体迁移时间:从源主机开始迁移到迁移结束的时间

 B 停机时间:迁移过程中,源主机、目的主机同时不可用的时间

 C 对应用程序的性能影响:迁移对于被迁移主机上运行服务性能的的影响程度

 D 离线迁移:

离 线迁移(offline migration):也叫做常规迁移、静态迁移。在迁移之前将虚拟机暂停,如果共享存储,则只拷贝系统状态至目的主机,最后在目的主机重建虚拟机状态, 恢复执行。如果使用本地存储,则需要同时拷贝虚拟机镜像和状态到目的主机。到这种方式的迁移过程需要显示的停止虚拟机的运行。从用户角度看,有明确的一段 服务不可用的时间。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。

 E 在线迁移:

在 线迁移(online migration):又称为实时迁移 (live migration)。是指在保证虚拟机上服务正常运行的同时,虚拟机在不同的物理主机之间进行迁移,其逻辑步骤与离线迁移几乎完全一致。不同的是,为了 保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。

Icon                

下面这些内容我觉得讲得太好了,所以整体就贴过来了,完全尊重作者的著作权

F linux迁移相关难点

磁盘分区名被硬编码。磁盘虚拟化时,可能会使用不同类型的虚拟磁盘设备,这将会导致磁盘名字的变化。比如 Xen 虚拟机中的半虚拟化设备使用 /dev/xvda 而标准的 Linux 半虚拟化设备使用 /dev/vda。准备迁移的 Linux 系统中存在对 /dev/hd* 和 /dev/sd* 磁盘分区名分散的关联,比如在 /etc/fstab 文件,启动初始化文件系统 ramfs 和一些解析磁盘设备的开机启动脚本文件中。V2V 迁移工具需要在整个磁盘上查找并修改这些关联。有一个简单的方法来避免这种情况: Linux 系统上主流的文件系统和交换分区类型可以使用 Lables 或 UUID 作为分区名。迁移时这些信息是被重点保护的,系统应该小心使用这些信息,一定不要使用设备作为分区名。另外,LVM 分区名和设备无关,在迁移中也不受影响。

作者批注:上面汇总的特别好,也就是说如果你是linux虚拟机,fstab挂载设备最好是uuid,或者你的虚拟机当时创建的时候是lvm;如果是windows的话,你需要改虚拟机xml文件磁盘对应的内容

网络硬件设备的改变。当系统迁移时,网络设备很可能产生变化。比如虚拟网络设备和物理网络设备的转化或者不同类型的网络设备之间的转变。但是是他们的 Mac 地址没有变化。MAC 地址是 IEEE 分配给物理设备制造商的,两个物理设备不会有相同的 MAC 地址;然而虚拟网络设备可能出现这种情况。所以在做虚拟机迁移时,你必须记录每一个网络设备的 MAC 地址,保证 MAC 地址和网络设备的对应关系。

作者批注:这块在迁移的时候我没有过多关注,因为我的场合下允许虚拟机在迁移后MAC被更改,除非说某些业务指定MAC地址。当然了更改虚拟机MAC地址也不是什么难事,只是我对这个点以后还真没有过多关注过

内核不支持某些虚拟设备。某些 Linux 发行版没有 virtio 虚拟设备的驱动, 可能是因为 Linux 发行版早于虚拟设备发布了;或者虚拟设备的驱动是闭源的;或者是在系统编译时去掉了。因此,有时我们另外需要一个完全不同的内核(比如 Xen 早期的版本就是这样的)。无论如何,在客户机上安装一个新的内核并且使之可以启动是一个很大的冒险,最好避免这样做。

作者批注:这几天我们有个环境的linux虚拟机改成virtio无法开机,换成ide之后进系统执行yum update升级下就好了,具体原因待查

Xwindow 需要重新配置。与磁盘、网络设备一样,系统迁移后显示设备也会变化。理想的情况是 Xwindow 会自动处理这个的变化,探测所有的显示设备并且使用它发现的第一个设备。但是这不意味着所有的 Linux 发行版都会以这种方式工作。

作者批注:低版本windows确实会存虚拟机迁移过去之后在设备管理器有一堆打着问号的设备,通常只要保证重要组件正常就行,像声卡这类通常可以忽略;如果是完美主义者,可以安装驱动

网络环境的变化。静态 IP 地址和静态 DNS 解析在虚拟机迁移中 是一个麻烦的事情。尽管不是必须的,但是最好配置系统从 DHCP 服务器自动获得所有的网络配置信息。

作者批注:在迁移武汉大学的时候,因为要求虚拟机原内网IP不变,而我们平台的交换机DHCP功能需要占用一个IP,而恰好有的迁移虚拟机与DHCP使用的IP冲突,所以当时是将交换机DHCP关掉,然后登陆虚拟机配置的静态IP,而且这样做还有一个好处:虚拟机在网络这块更加稳定,因为DHCP服务可能会DOWN...,而且我个人比较推崇静态IP

CPU 的扩展指令集发生变化。迁移后的系统中,新的虚拟 CPU 或主板和旧的会有一些不同。CPU 的扩展指令集如 SSE,Vectors, NX 可能被加入或去掉。CPU 的型号和制造商信息可能被改变。因此,如果你想要优化虚拟系统上的软件,这可能是浪费时间并且导致系统崩溃。最好是使用通用的软件,让程序在每次启动的时候检查运行环境和是否需要优化。实际上,实时迁移的状况比这个还要复杂,因为处理器可能在程序的运行的过程中被改变。目前为止还没有一个方案能很好的解决这个问题。

作者批注:鄙人对这块没看懂,好像是针对CPU驱动。截止目前没有遇到这块导致问题

如你所见,P2V 和 V2V 最大的问题在于硬件的改变。Linux 发行版本身应该可以处理所有的硬件变化:在系统启动的时候去检查所有的硬件,操作系统内核识别新的设备并寻找新的驱动处理它们 ,所有应用软件都不要和硬件绑定,设计一个很好的模式来应对突然的环境变化

常见迁移工具

软件

支持类型

特点

是否开源

virt-v2v

V2V

只支持离线迁移

virt-p2v

P2V

只支持离线迁移

clonezilla

P2V/V2V

只支持离线迁移,通过将P或V备份出来,然后再手工导入V

VMware Converter

V2V/P2V

支持离线和在线迁移,迁移到vmware较好

XenConvert

V2V/P2V


Hyper-V

P2V


NetIQ PlateSpin Migrate

V2V/P2V

类似传统备份容灾工具

Doubletake Move

V2V/P2V

支持在线迁移,类似传统备份容灾工具

Quest vConverter

V2V/P2V

类似传统备份容灾工具

RACEMI

V2V/P2V

支持在线迁移,迁移到aws

 



 2.1 P2V之再生龙

课外题:最早接触的P2V工具是在宁夏运维VMware集群期间,有幸接触到人家自己的P2V配套工具,论界面友好、操作步骤以及人性化设计,比再生龙比起来好用十万倍

上图

首先介绍一下用再生龙的P2V大致过程(具体的操作步骤可以参考李哥自己总结的文档)

1:你要有一个再生龙ISO,下载链接:http://clonezilla.nchc.org.tw/clonezilla-live/download/download.php?branch=stable

2:你需要将源物理机或虚拟机关掉

3:你需要用光驱或者其它方式在物理机上利用ISO做引导

4:按照文档操作步骤将源设备硬盘或分区信息通过支持的协议放到KVM所在的虚拟机里

5:到KVM检查一下文件是否存在

6:用KVM起一个虚拟机,硬盘数量及大小与物理机一致,好吧,事实上是硬盘最好能大一点。

这里面要注意的是硬盘格式,如果是linux,推荐virtio  raw,如果是windows,推荐IDE raw

7:用ISO去导引这个虚拟机进行恢复。开机

8:如果恢复成功,那么恭喜你,向成功的方向已经迈出了坚定的一步。

9:如果是WINDOWS,赶紧看看缺不缺驱动。

--------------------------------这又是一条小分割线-----------------------------

上面只是转换成了一台虚拟机,如果我们要将它放至云平台上使用,需要这么做

如果是windows,你需要安装virtio驱动;如果是linux,请跳过10--15步

10:安装的驱动是:RHEV-toolsSetup_3.3_14,    关机;

 rhev下载连接:链接:http://pan.baidu.com/s/1c1WAhhe 密码:9ccn

virtio-win-0.1.102 下载连接:http://pan.baidu.com/s/1pKV7KJx 密码:237i

备注:这里提一下安装驱动的问题,如果你的宿主机不是redhat,你执行“RHEV-toolsSetup.exe”会提示你无法安装,不用担心,你直接进入 到tools目录下把对应的文件安装就可以了,windows吗,你懂得,双击下一步即可,遇到无法安装的忽略即可。

virtio-win这个包是假设你不想用rhev-toossetup安装的前提下,也可以用这个包的文件,在设备管理器里手动更新驱动

11:填写一加virtio硬盘,并将网卡模板改成virtio,    开机

13:查看设备管理器,确保磁盘驱动,网卡是virtio.    关机

14:删除刚才添加的硬盘,并将系统盘改成virtio.    开机

15:确保虚拟机可以正常开机,并且网络没有问题。关机

16:找到你的虚拟机硬盘所在位置。把格式转换成qcow2

17:之后以模板的形式上传到平台起虚拟机。或者在平台创建一台相等的虚拟机,通过替换硬盘文件。详见例1

再生龙迁移工具使用文档20151117.docx

 

注:这里写一点关于安装驱动的事;(不知道该放在什么地方好)

默认情况下,你在虚拟机里直接安装RHEV-setuptool,它会包含所有驱动,这个在windows2008试过;但是经过测试发现在windows2003中,出现了硬盘及网卡驱不起来的现象,你需要单独装这几个驱动,相应的驱动文件长这样“virtio-win-0.1.102.iso”,你需要查看一下你的设备管理器,然后根据操作系统类型来更新驱动;

 

例1:

如果你的块存储使用的是ceph,你这么做:

(如果你是高手,你一定会起直接装CEPH块挂载到本地,没错,确实应该是这样。不过,自动部署工具的计算节点的内核是2.6.32,然后你会痛苦的发现你居然得升级内核)

1:先把你在平台里的虚拟机关机。从你这台虚拟机的XML文件找到硬盘在CEPH中的位置,一般是volumes/volume-xxxxxx,就是用virsh dumpxml   instace-xxxxx |more

2:复制该ID号,找个小本记录下来;在CEPH先将它删除掉,用rbd rm -p volumes ID

3:COPY你的镜像到相应的计算节点,其实只要是任何一个CEPH节点都可以

4:上传该镜像,rbd  --p_w_picpath-format 2  import  -p volumes filename   ID

5:启动虚拟机,看看啥子情况

6:爆发吧小宇宙

这个例子非常适合于v2v,武汉大学就是这么搞的

 

例2:

有一种适合大量虚拟机转换且效率相对上面方法高的方法,我也是听闻某人间高手,大概思路如下,仅供参考

1:首先你得用再生龙得到物理机或者虚拟机文件,也就是那些目录

2:直接在平台起相应的虚拟机,记住硬盘的大小要相匹配

3:接下来应该是虚拟机挂光驱,但是平台不支持此项功能;所以你需要有一个virt-manage,并且能够连接到这台虚拟机的相应计算节点;

4:然后你还需要将你的平台虚拟机与存储你目录的网络打通,实现方法没有规定,只要能通;我能想到的是,我的笔记本直接接入平台的管理网,然后起一个redhat6.5虚拟机,安装桌面与虚拟化,然后从管理网段中找一些没有被用到IP,以方便P2V用

5:上面方法没有亲自实验过,不过可以预料的是,windows一定要安装驱动,否则能不能开机将是一个大问题。关于驱动的描述下面有叙述

续:

书接上回

这里重点强调一下关于windows的p2v,通常你在起虚拟机用再生龙还原系统的时候,你的虚拟机硬盘类型建议是IDE,这样你还原后是可以直接开机的,如果你强制改成virtio,你会还到windows那熟悉的蓝屏笑脸冲你笑;解决这一办法就是先保证你的第一块盘,也就是系统盘是IDE,然后开机,安装RHEV-toolsetup;然后关机;这时候你要将你的网卡改成virtio,然后最重要的是你要额外填加一块virtio的硬盘,然后开机,这时候系统会发现新硬件并安装相应的驱动;之后关机,删除第二块硬盘,并将系统盘改成virtio,然后开机。如果可以正常引导。恭喜你,P2V就算成功了。

    以上根据实际情况整理而出,都是血淋淋的教训,那是个不眠之夜,花费数小时,牺牲了好多脑细胞才搞定的。

希望可能帮到有缘人

 

                   2015年12月14日

                     刘福于深圳


最后写一点关于迁移过程磁盘扩容的问题;

针对系统盘:首先,raw格式的文件是支持扩容的,所以当你有这方面需要可以直接搞:qemu-img resize [-q] filename [+ | -]size    ;对于linux类的话,如果你的系统盘分区是lvm可以轻松的扩展;对于windows类的话,想实现系统盘扩容,前提是你的操作系统要大于或等于2008,在磁盘管理里有扩展选择,windows2003肯定没戏;当然了不排除能借住第三方磁盘管理工具实现,这方面没研究

---------------------------------------------------------------------------------------------------------------------------------

针对2003磁盘扩容,偶然看到一篇文章说可以,目测是可以的。

本着发杨雷峰的精神,我把附件下载起来了,花了一个豆,心疼,

51CTO下载-ExtPart.zip

文章参考:http://leihenzhimu.blog.51cto.com/3217508/773483

---------------------------------------------------------------------------------------------------------------------------------

针对数据盘:如上所述,扩大分区方法总是有的。但是,据我迁移的经验来看,数据盘面临的问题不是扩大,而是缩小;原因是前边在创建数据盘的时候没有估量好实际使用量,导致过大。比如2T的数据盘可能只能了几百个G,这样在导数据盘的时候导2T是很痛苦的;关于如何缩小我没有大胆尝试


上面步骤是基于你利用一个ISO或者光盘去引导物理的的步骤,你也可以制作一个类似于PXE引导:

http://www.clonezilla.org/livepxe.php

http://www.syslinux.org/wiki/index.php?title=PXELINUX

我没试,有需要再搞吧



2.2 其它工具

暂略,我这人有个习惯,喜欢了一个工具,就会对其它工具排斥,所以这块就没有了。如果有大牛突然心情舒畅,欢迎在这里补充。

我决定基于这个文档做几个实验,然后将步骤罗列出来,待亲自补充

这里有一个红帽的转换工具说法手册,中文版本

Red_Hat_Enterprise_Linux-6-V2V_Guide-zh-CN.pdf

 

 

-----------------------------------------------------------------------------------------分割线又来了--------------------------------------------------------------------------------------

3.1 shell脚本迁移(试用版)

A:写这篇内容的背景因素

1:手工迁移太low

2:武汉大学手工迁移了太多,感觉以后如果再迁移的时候应该有个东西能够帮助迁移

3:额,心情舒畅,也算一条

B:运行这个脚本的前提

1:我们假设你有台物理机,然后上面有几台虚拟机;

2:然后你要把这几个虚拟机导到我们的云平台上;

3:其实就是v2v,其实过程很简单,基本也没啥也的,写shell脚本其实是大材小用了;

4:其实是想用ansible写来着,然后发现不会,只能先用shell练练

5:节点做下互信,这是能成功运行下面脚本的前提

6:欲导之,先建之。

7:假设你的虚拟机在EBS

8:虚拟机建好后直接关机

vim vm_to_openstack.sh

 #!/bin/bash
echo "                  <<永远相信美好的事情即将发生>>"
echo '' '
         首先,这是一个微不足道的小脚本;这仅仅能实现kvm虚拟机导入到openstack
         1 :如果是windows,可以在导入前安装rhev驱动,或者导入后安装;
         2 :你需要提前在云平台创建出一台与你将导入的虚拟机规格一致的虚拟机:主要指系统盘或数据盘大小,当然还有操作系统类型等 '' '
#指定源虚拟机磁盘所在目录:必改项
vm_base_storage_work= "/root/liufu"
#指定源虚拟机磁盘名称:必改项
vm_base_storage_name= "liufu.raw"
#来来来,做一个人灯合一
vm_base_storage_url=$vm_base_storage_work/$vm_base_storage_name
#明确一下源虚拟机磁盘类型:必改项
vm_base_storage_type= "raw"
#明确一下目标虚拟机在rbd的名称:必改项
openstack_vm_rbd_id= "volumes/volume-f3cadbd7-2fbf-4aa2-a097-8a50b1d01113"
#明确一下云平台管理节点IP:必改项
openstack_manage_ip= "183.169.128.151"
#明确一下管理节点的工作目录,就是放在哪:必改项
openstack_manage_work= "/root"
#vm_base_storage_convert_name=$openstack_manage_work/$vm_base_storage_name
#弹弹弹,把磁盘弹到管理节点
echo "1:准备开始scp文件"
scp $vm_base_storage_url $openstack_manage_ip:$openstack_manage_work
#判断,问美国大选谁能赢?
if [ "$vm_base_storage_type" != "raw" ];then
     echo "2:这不是一个raw格式文件,下面开始转换格式并导入到ceph里;完成后可以开启虚拟机。"
#    vm_base_storage_convert_name=$openstack_manage_work/$vm_base_storage_name "." $vm_type
     ssh $openstack_manage_ip "rbd  rm $openstack_vm_rbd_id"
    
  ssh $openstack_manage_ip "qemu-img convert -p
$openstack_manage_work/$vm_base_storage_name  -O rbd 
rbd:$openstack_vm_rbd_id"
     ssh $openstack_manage_ip "mv  $openstack_manage_work/$vm_base_storage_name /tmp "
else
echo "2:这是一个raw格式文件,将直接导入到ceph里;完成后可以开启虚拟机。"
ssh $openstack_manage_ip "rbd -p volumes rm $openstack_vm_rbd_id"
ssh $openstack_manage_ip "rbd  --p_w_picpath-format 2  import $openstack_manage_work/$vm_base_storage_name $openstack_vm_rbd_id"
ssh $openstack_manage_ip "mv  $openstack_manage_work/$vm_base_storage_name /tmp "
fi
echo "看,彩虹"
echo -e "\e[1;31m ========== \e[0m"
echo -e "\e[2;33m ========== \e[0m"
echo -e "\e[1;33m ========== \e[0m"
echo -e "\e[1;32m ========== \e[0m"
echo -e "\e[1;36m ========== \e[0m"
echo -e "\e[1;34m ========== \e[0m"
echo -e "\e[1;35m ========== \e[0m"

 

Icon                

注意事项:

在 上面脚本实现的基准上,如果原是qcow2格式,会在convert的时候直接通过rbd导进去,这个命令是参考openstack网站上的一篇博客,但 是经实验发现这样做有一个问题是:导入的镜像的p_w_picpath-format为1,也就是说,在我们的产品里,ceph在导入的时候如果不指定这个参数,默认 就是1(据说最新的ceph版本默认为2),而在1的情况下,这个盘不支持快照,不支持快照。请注意。另外声明,这个脚本不打算处理这个问题,由此带来的 项目问题,本人不负责哟。

http://superuser.openstack.org/articles/how-to-migrate-from-vmware-and-hyper-v-to-openstack/

 

3.2 Ansible迁移


首先,将附件下载下来或者按照下文结构和内容整合一下,内容都在里面了。

运行脚本背景

这个代码是要运行在你的虚拟机所在节点,,假设它是linux,并且安装了ansible

然后只需要在group_vars这个文件里把相关的参数设置好,然后在vm_to_openstack.yml这个文件里根据你原虚拟机磁盘格式进行选择,一次只能开一个;然后就没有


后期待添加内容:

1:虚拟机拥有一块或者多块数据盘的情况

2:自动在云平台创建虚拟机


结构目录

[root@host-192-168-12-17 ansible]# tree  /etc/ansible/

/etc/ansible/

├── ansible.cfg

├── group_vars

│   └── all

├── hosts

├── roles

│   ├── qcow2

│   │   └── tasks

│   │       ├── main.yml

│   │       └── qcow2_to_openstack.yml

│   └── raw

│       └── tasks

│           ├── \

│           ├── main.yml

│           └── raw_to_openstack.yml

└── vm_to_openstack.yml


 

[root@host-192-168-12-17 ansible]# cat group_vars/all

#指定磁盘文件所在的路径,注意最后的“/”要加上

src_file_dir: /etc/ansible/

#指定磁盘的文件名称

file_name: cirros-0.3.3-x86_64-disk.qcow2

#指定要scp的对方节点所要放置的目录

to_openstack_dir: /opt/test/

#指定在云平台创建好待替换虚拟机在ceph的ID

volume_rbd_id: volumes/volume-c0480649-a931-4e75-b3f9-e95a64816baa

 

[root@host-192-168-12-17 ansible]# cat  hosts

[openstack]

1.1.1.1 ansible_ssh_user=root ansible_ssh_pass=xxxxx

 

[root@host-192-168-12-17 ansible]# cat roles/raw/tasks/raw_to_openstack.yml

---

- name: copy vm data volumes to openstack node

  copy: src="`src_file_dir``file_name`"  dest=` to_openstack_dir `

  shell: rbd rm  `volume_rbd_id`

  ignore_errors: yes

- name:  import vm base

  shell: rbd --p_w_picpath-format 2 import  "`to_openstack_dir``file_name`" `volume_rbd_id`

 

[root@host-192-168-12-17 ansible]# cat roles/raw/tasks/main.yml

---

- include: raw_to_openstack.yml

 

[root@host-192-168-12-17 ansible]# cat roles/qcow2/tasks/qcow2_to_openstack.yml

---

- name: copy vm data volumes to openstack node

  copy: src="`src_file_dir``file_name`" dest=` to_openstack_dir `

 

- name:  rm volume in ceph

  shell: rbd rm  `volume_rbd_id`

  ignore_errors: yes

 

- name: convert this qcow2 file

#  shell: qemu-img convert -p "`to_openstack_dir``file_name`"  -O rbd   rbd:`volume_rbd_id`

  shell: qemu-img convert -p -f qcow2 -O raw  "`to_openstack_dir``file_name`" "`to_openstack_dir``file_name`.liufu"

 

- name:  import vm base

  shell: rbd --p_w_picpath-format 2 import  "`to_openstack_dir``file_name`.liufu" `volume_rbd_id`

 

#- name: clean this data volumes

#  shell: mv "`to_openstack_dir``file_name`.liufu" /tmp

#  shell: mv "`to_openstack_dir``file_name`" /tmp

[root@host-192-168-12-17 ansible]# cat roles/qcow2/tasks/main.yml

---

- include: qcow2_to_openstack.yml

 

[root@host-192-168-12-17 ansible]# cat vm_to_openstack.yml

- name: install elasticsearch

  hosts: openstack

  user: root

  roles:

#    - { role: raw }

    - { role: qcow2 }

 

 

4:额外引用

引用几篇文章

关于如何快速的将上TB的p2v的镜像上传到openstack平台的方法

点评:老范这篇文章是基于先将虚拟机镜像上传到glance,然后再基于此镜像创建虚拟机,然后再将模板删除。他主要描述的是上上传glance的时候如果避免体积太大导致上传超时。本人不推荐这本方法,但也不排斥,条条大路通罗马。

基于fuel的openstack新老集群迁移方案

点评:这篇文章巧妙的在从老集群的ceph导出的时候直接导入到新集群的ceph,这样就能避免因为两端的管理节点磁盘不足导致的无法迁移。我没有用过这种方法,所以不确定数据在这种情况下到底是怎么流向的,也许真的是导出的时候直接不需要落盘直接通过网络导入,恩,没想明白。。。

武汉大学迁移

Windows2008r2破解登陆密码

点评: 我的文章,恩,没毛病

 

5:在不停机的情况下如何做p2v

5.1  巧借vmware之力

有个项目要做p2v,并且要求业务不中断。。。擦

后来在英明神武的项目经理指示中,可以借鉴vmware力量

经过实验证明此方案可行,所以在这里大致归纳一下步骤

1:部署一套vmware环境

一台配置比较好的物理机,装esxi,装vcenter server(可选);vcenter我个人觉得没必要装,到时候convert的时候直接指向这台esxi主机,嗯,应该是这样的,一会实验一下。

注:如果你装了vcenter server,默认的登录名是[email protected]

相关包下载:http://192.168.254.252/liufu-test/vmware/

1.1:刻录esxi光盘

刻录这个文件 VMware-VMvisor-Installer-6.0.0-2494585.x86_64.iso,只有几百兆,CD光盘就可以

本着发挥雷蜂精神,刻录工具已经准备好了:http://192.168.254.252/liufu-test/tools/    里面的ONES.rar是免安装的,非常简小强悍的刻录工具,打开后选择刻录常见镜像就成。另外一个nero得安装,挺麻烦的,不过 很强大

1.2 :安装esxi

首先把服务器的盘建议划成一个大的raid,它好像没有系统盘和数据盘的区分。嗯,先这样做

然后光盘引导,安装

默认,等

 

默认是dhcp,如果想改的话,进去就可以修改。我习惯进到troubleshooting options里把shell 和ssh打开

1.3 在笔记本上安装client

安装包也在上面提到的路径里,双击下一步就完成了

1.4 连接至esxi

2:部署一套openstack

3:网络上的要求

物理机  vmware  笔记本  openstack这四得网络可达

4:在笔记本上安装vmware convert工具,然后填写相关信息导到vmware里

 http://192.168.254.252/liufu-test/vmware/vmware%20converter/

一定要装英文版那个,中文版那个问题,老报错。把物理机的防火墙什么的统统关掉

巴巴一大堆,按提示操作就成

5:上面成功后,你在vmware里就有了一台虚拟机,之后就简单了,安装virtio驱动和其它东西。之后关机

6:将虚拟机导出,目前能想到的方法如下:1:可以导到本地;2:导到ftp、nfs什么上面,笔记本空间有限;3:或许可以直接登陆esxi主机上,然后直接把文件scp至管理节点

6.1  导至本地方法

  这个方法测试还行,实际搞的话对笔记本要求太高,我可没那么大的空间。只能扩展一个usb3.0的移动硬盘了

6.2搭建ftp

注:实验证明,搭建ftp此路不通。原因是在导出的时候无法指定ftp服务器,虽然可以将ftp映射到本地,但映射的路径在vsphere client导出的时候认不到

http://www.cnblogs.com/zhi-leaf/p/5983550.html

如果根空间小,可以找个空间大的目录mount到ftp下

ln -s /var/lib/ceph/osd/ceph-0/liufu/ /var/ftp/pub/

mount --bind /var/lib/ceph/osd/ceph-0/liufu/

6.1 将ftp映射到笔记本

6.3 搭建nfs

注:这个方法实际证明也不行,导出速度太慢了,原因未查明

[root@node-1 ~]#yum -y install nfs-utils rpcbind

[root@node-1 ~]#vi /etc/exports

/var/ftp/pub/ 0.0.0.0/24 (rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)

[root@node-1 ~]#exportfs -r

[root@node-1 ~]#service rpcbind start

[root@node-1 ~]#service nfs start

[root@node-1 ~]#chkconfig rpcbind on

[root@node-1 ~]#chkconfig nfs on

showmount -e ip

windows挂载nfs

先在控制面板激活nfs工具,然后执行下面的命令

这时候就可以在我的电脑里看到这个盘,点击进去激活一下。之后就可以通过client导出了

6.4  直接登陆esxi主机将磁盘scp至管理节点

需要验证一下scp过去的文件能不能用,而且这个文件太大了,像这个500G(虚拟机磁盘大小确实是500G,但里面太多东西),光scp就需要一个半小时,而且直接占用500G,然后还得转成raw格式,又得占用500G;用客户端导出来的文件就没有这么大,好纠结

需要将esxi的防火墙打开,方法如下

登陆esxi主机

这个方法在low,直接废掉

 

7:将导出的内容上传到openstack 节点,如果将openstack做为nfs服务器

8:转格式,以此文件开机,确保虚拟机磁盘以virtio能开机

qemu-img convert -p -f vmdk -O raw liufu.vmdk liufu.raw

9:之后将此虚拟机搞到openstack里就结束了

rbd导的时候注意加p_w_picpath-format 2 参数

 

附1:kvm添加存储池

在我们kvm只有一个默认的存储池,就是/var/lib/libvirt/p_w_picpath ,如果你远程用virt-manage新建虚拟机只能在这一个目录操作,很不方便,下面提供添加指定目录的存储池方法

  virsh pool-define-as liufu  --type dir--target /root

  virsh pool-list --all

  virsh pool-build liufu

  virshpool-start liufu

   virshpool-autostart liufu

 

5.2  借助赛门铁克(smantec)之力

所谓,需求是推动社会进步的第一生产力,上面提到的那个项目明确要求要利用smantec软件来搞,目前他们只用这个软件做了备份,至于我们如何利用备份内容还原虚拟机是下面讨论的内容

首先,这个工具是收费的。然后呢,是图形化的

大概原理是:以windows举例,是否支持linux待查。安装软件,然后制定备份任务,可以将某一个分区或者所有分区备份出指定的位置,通常当你的文件损坏或者丢失后可以用备份内容来找回,但我们发现这个工具有一个吊炸天的功能:能够将备份内容转换成vmdk文件,酷!!!,这一点正是我们苦苦寻觅的核心,有了它,p2v将简单很多。

下面是详细步骤

1:在源物理机上安装

详见附件work

 

赛门铁克安装及p2v过程.docx

大概总结一下这个软件的使用流程:在物理机上安装此软件,然后在这个物理机上操作这个软件,先执行一次备份任务,其实这个任务结果可以放到远端的存储服务器上,之后通过其自带的功能将这个任务直接转换成vmdk文件,我们拿到这个文件之后在kvm上将其展开,安装rhev驱动等,最后保证虚拟机正常后将它传到openstack里去。