物理机转虚拟机(P2V)概述、操作方法及生产环境经验总结

(一) 概述

1. P2V是什么

P2V即物理机转虚拟机,要求将物理机原封不动的转化成虚拟机,保持文件系统、任何文件都不发生变化。

2. 为什么要做p2v,p2v的价值是什么

p2v将物理机环境搬到虚拟机环境,适用于以下场景:

(1) 物理机利用非常低,转化成虚拟机可以提供资源利用率;

(2) 物理机的软件环境如果非常复杂,将物理机转化成虚拟机,不需要重新配置软件环境;

(3) 因为转化成虚拟机,可以在虚拟化层面做快照和高可用,提高系统的可靠性;

3. p2v的技术实施方案

(1) 静态方案

就是将物理机关机,使用克隆软件克隆,再在虚拟机上还原;kvm的virt-p2v,vmware 3.5以前都属于这样的解决方案;

(2) 动态方案

物理机处于运行状态,使用专用的agent,将物理机文件在线拷贝到虚拟机中,vmware4.0以后采用动态方案实施p2v

(3) 两种方案的优缺点和难点比较

静态方案

优点:因为是关机操作,对现有的系统不改造,及时实施失败,也不影响现有系统;

缺点:物理机的系统,没有虚拟机的磁盘驱动,比如kvm 的virtio vmwae的vmdk,需要将驱动导入到系统中,负责克隆到虚拟机中的系统不能正常启动,windows会蓝屏,linux会报无法识别硬盘的错误;

动态方案

优点:开机情况下完成物理机到虚拟机转化,转化的时候不需要加载驱动;

缺点:要在现有系统安装agent;有一定的几率转化不成功。

额外的话:目前也有一些第三方公司,帮助企业将业务迁移到云上,很重要一个技术点就是P2V。目前几个比较大的公有云,也提供P2V服务,这些大多使用的都是动态方案,因为这样对业务影响比较小,但是也要求一定的技术实力和实践。

(二) windows系统物理机转虚拟机(p2v)操作方法

经验总结:

操作前的准备工作很重要

1. 清空垃圾站;

2. 删除不需要的软件;

3. 清空各种缓存文件,尤其是浏览器的,曾经碰到因为浏览器的缓存文件过多,导致p2v恢复的时候不成功的案例。

工具:

1. ghost 软件,建议使用高版本;

2. winpe 及能引导winpe的pxe环境,环境搭建请参考微软相关文档;

操作方法:

1转化成ide硬盘方式

第一步在物理机,以下简称p机,运行附件中的ide.reg注册表文件,文件内容如下:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\primary_ide_channel]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\secondary_ide_channel]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*pnp0600]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\*azt0502]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="atapi"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\gendisk]
"ClassGUID"="{4D36E967-E325-11CE-BFC1-08002BE10318}"
"Service"="disk"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#cc_0101]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_0e11&dev_ae33]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1039&dev_0601]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1039&dev_5513]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1042&dev_1000]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_105a&dev_4d33]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0640]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0646]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0646&REV_05]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0646&REV_07]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0648]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1095&dev_0649]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1097&dev_0038]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10ad&dev_0001]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10ad&dev_0150]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10b9&dev_5215]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10b9&dev_5219]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_10b9&dev_5229]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="pciide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_1106&dev_0571]
"Service"="pciide"
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_1222]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_1230]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_2411]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_2421]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7010]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7111]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7199]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="intelide"
;Add driver for Atapi (requires Atapi.sys in Drivers directory)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\atapi]
"ErrorControl"=dword:00000001
"Group"="SCSI miniport"
"Start"=dword:00000000
"Tag"=dword:00000019
"Type"=dword:00000001
"DisplayName"="Standard IDE/ESDI Hard Disk Controller"
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\ 
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,61,00,74,00,61,00,70,00,69,00,2e,\ 
  00,73,00,79,00,73,00,00,00
;Add driver for intelide (requires intelide.sys in drivers directory)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\IntelIde]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000004
"Type"=dword:00000001
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\ 
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,69,00,6e,00,74,00,65,00,6c,00,69,\ 
  00,64,00,65,00,2e,00,73,00,79,00,73,00,00,00
;Add driver for Pciide (requires Pciide.sys and Pciidex.sys in Drivers directory)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PCIIde]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000003
"Type"=dword:00000001
"ImagePath"=hex(2):53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\ 
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,70,00,63,00,69,00,69,00,64,00,65,\ 
  00,2e,00,73,00,79,00,73,00,00,00

根据系统不行,拷贝windows 2003 32位系统、64位系统、windows 2008系统的*.sys文件到windows\system32\driver目录下面。

驱动文件可以在http://down.51cto.com/data/1871930下载。

第二步 pxe方式启动winpe,运行ghost,制作镜像。

第三步在kvm虚拟机,以下简称v机,pxe方式启动winpe,运行ghost,恢复镜像。

第四步启动v机,系统会重新加载驱动,然后提示重启,完成。

2 转化成virtio硬盘方式

驱动文件可以在http://down.51cto.com/data/1871930下载

第一步在物理机,运行驱动文件中的1、2、3、4、5、.reg注册表文件,有的文件可能提示不能成功导入,拷贝windows 2003 32位系统、64位系统、windows 2008系统的*.sys文件到windows\system32\driver目录下面,右击安装相应驱动下的viostor.inf。

第二步 pxe方式启动winpe,运行ghost,制作镜像。

第三步在v机,pxe方式启动winpe,运行ghost,恢复镜像。

第四步启动v机,系统会重新加载驱动,在这个过程中,提示需要安装virtio驱动,按照提示安装,然后根据提示重启,完成。

三 转化成VMDK硬盘方式

驱动文件可以在http://down.51cto.com/data/1871930下载

第一步在物理机,运行驱动文件中的1、2、3、4、5、.reg注册表文件,有的文件可能提示不能成功导入,拷贝windows 2003 32位系统、64位系统、windows 2008系统的*.sys文件到windows\system32\driver目录下面。

第二步 pxe方式启动winpe,运行ghost,制作镜像。

第三步在v机,pxe方式启动winpe,运行ghost,恢复镜像。

第四步启动v机,系统会重新加载驱动,在这个过程中,提示需要安装virtio驱动,按照提示安装,然后根据提示重启,完成。

(三) Linux 物理机服务器转化虚拟机操作

1. 克隆

linux 推荐用再生龙这个克隆软件,并且设置一个nfs,通过再生龙,将物理机克隆到nfs服务器上,具体操作请参考再生龙的相关操作

2. 还原

创建一个虚拟镜像文件,空间大于物理机

qemu-img create linux-p2v.qcow2.vda –f qocw2 300G

创建一个虚拟机,使用上一步创建的镜像文件,并按照要求设置cpu和内存

注意:这一步硬盘采用ide方式

网络引导,用再生龙将物理机镜像恢复到这台虚拟机中

关闭虚拟机

查看镜像分区和硬盘大小 virt-df –h linux-p2v.qcow2.vda

通过guestfish修改linux分区大小

guestfish –a linux-p2v.qcow2.vda

run

list-filesystem

e2fsck-f /dev/vda2

resize2fs-size /dev/vda2 30G

exit

3. 修改虚拟机硬盘为virtio

通过相应版本的安装光盘引导,进入相应版本的救援模式,加载virtio驱动

modproble virtio virtio_pci virtio_blk virtio_net

chroot /mnt/sysp_w_picpath

sed -i "s/hda/vda/" /boot/grub/device.map

mkinitrd --with virtio --with virtio_pci --with virtio_blk --with virtio_net -f /boot/initrd-$(uname -r).img $(uname -r)

重启

4. 修改内核的时间设置

因为虚拟机都会发生时间飘逸,所以需要设置下内核参数,使虚拟机的时间走的更精确些,同时建议设置NTP服务器。

按照官方文档,每个系统的内核时间参数设置如下:

Red Hat Enterprise Linux version

Additional guest kernel parameters

6.0 AMD64/Intel 64 with the para-virtualized clock

Additional parameters are not required

6.0 AMD64/Intel 64 without the para-virtualized clock

notsc lpj=n

5.5 AMD64/Intel 64 with the para-virtualized clock

divider=10[1]

5.5 AMD64/Intel 64 without the para-virtualized clock

divider=10 notsc lpj=n

5.5 x86 with the para-virtualized clock

Additional parameters are not required

5.5 x86 without the para-virtualized clock

divider=10 clocksource=acpi_pm lpj=n

5.4 AMD64/Intel 64

divider=10 notsc

5.4 x86

divider=10 clocksource=acpi_pm

5.3 AMD64/Intel 64

divider=10 notsc

5.3 x86

divider=10 clocksource=acpi_pm

4.8 AMD64/Intel 64

notsc divider=10

4.8 x86

clock=pmtmr divider=10

3.9 AMD64/Intel 64

Additional parameters are not required

3.9 x86

Additional parameters are not required

(四) virt-p2v

笔者刚开始做P2V的时候,virt-p2v作为专门的工具,还不好用,也不稳定,目前的virt-p2v已经好用很多,做KVM的virt-p2v的时候,建议优先使用virt-p2v,碰到问题的时候,再使用上面介绍的手动方式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券