最近一段时间做了一些P2V迁移的事情,现在把过程中遇到的问题以及解决方法总结一些,以供有需要的同学进行参考。
目前遇到的这些问题大都是因为原来的物理机在安装系统的时候,启动方式选择的是UEFI方式,对于一些使用Legacy方式进行启动的物理节点,P2V之后都没有遇到特别难以搞定的事情。
本文中介绍的场景,P2V转换完毕都是运行在centos7.7宿主机上的KVM虚拟机。
windows环境的P2V
- 问题描述1
将windows物理节点,P2V成为虚拟机之后,在VMware环境可以正常启动,但是在kvm方式下启动异常。
解决方法1: 遇到的这个问题大多是因为windows系统采用GPT格式的启动分区,需要借助winPE进行引导修复,将GPT转为MBR方式进行引导。
首先下载一个带有winPE的镜像文件,比如Ton8PE_5.0_376.iso
然后创建一个虚拟机,将虚拟机的第一个启动项设置为此iso镜像,将windows系统KVM虚拟机的其它文件设置为其它的硬盘
启动虚拟机进行修复工作(具体大家可以自行查找资料,目前网络上对应的资料比较多)
Linux环境的P2V
对于Linux系统的虚拟机,没有找到修改启动分区的方法。因此只能对宿主机进行操作,是的宿主机支持UEFI方式启动。
对于宿主机为CentOS7.7的系统:
1)将edk2.git-ovmf-x64-0-20190308.984.g6c27a4d337.noarch.rpm软件包进行安装
2)在/etc/libvirt/qemu.conf文件中配置(注意路径与实际位置保持一致)
nvram = [
“/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd:/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd”
]
3)重启libvirtd服务 systemctl restart libvirtd
4)对于Linux系统的虚拟机,需要使用UEFI方式进行引导。配置文件需要增加如下内容
<os>
<type arch='x86_64'>hvm</type>
<loader readonly='yes' type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader>
<nvram template='/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd'/>
</os>
5)编辑虚拟机启动项
- 问题描述2
如何区分linux是UEFI方式启动还是Legacy方式启动。
解决方法2: 使用lsbk命令,如果系统盘存在/boot和/boot/efi两个分区,都是UEFI方式启动。如果只有一个/boot分区,是Legacy方式启动。
- 问题描述3
虚拟机启动报错
error: cant't find command 'linux16'.
error: cant't find command 'initrd16'.
解决方法3: 在虚拟机启动的时候按e进入启动项编辑模式,将"linux16 /vmlinuz…" 和 “initrd16 /vmlinuz…” 更改为 “linuxefi /vmlinuz…” 和 “initrdefi /vmlinuz…” 进入系统,然后将文件/etc/grub2-efi.cfg(这个是个链接文件)中的linux16更改为linuxefi,将initrdefi更改为initrdefi,然后保存退出。重启虚拟机看看是否可以正常进入系统了。
- 问题描述4
使用virsh define 进行虚拟机声明的时候,提示“smm is not available with this QEMU binary”。
解决方法4: 这个原因是qemu-img版本太低导致的,qemu版本最好在2.8以上(qemu-img --version)。这里需要注意的是高版本的qemu-img名称为qemu-img-ev 因此需要安装qemu-img-ev qemu-kvm-common-ev qemu-kvm-ev qemu-kvm-tools-ev软件包来升级版本
- 问题描述5
虚拟机无法启动进入系统,如何进行启动项或者文件修改。
解决方法5: 首先创建一个可以正常启动的虚拟机,然后将启动失败的虚拟机文件挂载到可正常启动的虚拟机文件。根据原来物理机节点的分区结构进行挂载修改。这里操作有些复杂,针对lvm方式的分区还涉及到VG LV的修复问题,这里仅提供一个我解决问题时的方法,具体操作中大家遇到问题需要具体分析。
- 问题描述6
虚拟机(Red Hat Enterprise Linux Server release 6.5)无法启动进入系统,找不到引导盘。
解决方法6: 在Red Hat Enterprise Linux Server release 6.5的虚拟机遇到这个问题。最后发现是因为P2V之后盘符发生了变化。物理机中系统盘为sda,但是P2V虚拟化之后,启动盘变为了vda。这里通过将虚拟机文件挂载到一个正常的虚拟机之后,将radhat 虚拟机的 /boot/grub/device.map文件里面的内容
# this device map was generated by anaconda
(hd0) /dev/sda
修改为
# this device map was generated by anaconda
(hd0) /dev/vda
然后redhat 6.5的虚拟机就可以正常启动了。
在P2V的过程中遇到的小问题比较多,有些上网查找资料就可以解决就简单提了一下或者没有列举出来。
本文主要是针对自己发现有用的方法进行了总结。P2V操作复杂,遇到的问题也是千奇百怪,要具体问题具体分析。
欢迎大家多多交流!