(一) 概述
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,碰到问题的时候,再使用上面介绍的手动方式。