Ubuntu Server P2V迁移至vSphere环境后修复引导

发布于 2021-12-20  441 次阅读


vCenter Converter是VMware自家的P2V工具,可以在物理机开机状态下将其P2V到vSphere虚拟化环境中。它的操作过程挺简单,点完向导后工具就能自动完成整个P2V操作,读完条就能在vCenter或者ESXi中看到生成的虚拟机。

网上搜vSphere P2V的文章,基本所有的搜索结果都是和这个工具相关的。然而vCenter Converter Standalone的最新版6.2.0.1是2018年发布的,很多新一点的OS已经不能很好地通过vCenter Converter正常P2V迁移了。

就拿Linux 5.x内核的Debian虚拟机为例,迁移进度到97%的时候vCenter Converter提示迁移失败,错误信息中看到FATAL: kernel too old Error running vmware-updateGrub.sh,说是因为内核太老没法执行更新GRUB引导的脚本。

访问vCenter看了下,P2V生成的虚拟机还在,只是开机的时候提示Error loading operating system,没法正常引导OS。

结合vCenter Converter的错误信息进行分析,应该是converter-helper-vm内核版本太老,因此无法跑新版本内核的Grub引导创建脚本,导致P2V后找不到引导项。

converter-helper-vm是个基于ttylinux的LiveCD。由于我没那个水平来改造它,所以还是手动来修复引导吧。

1.演示环境

这次的演示环境所使用的ESXi版本为当前(2021年12月)被绝赞撤回的ESXi 7.0 U3(测试环境,升都升了就懒得重装)。待修复引导的虚拟机信息如下:

  • 发行版:Debian 11
  • 引导模式:Legacy BIOS
  • 分区信息:/dev/sda1 -> /

总之是个分区非常简单的虚拟机,包括/boot在内的所有东西都在同一个分区中。

2.操作步骤

下面的操作步骤对DEB系发行版应该都有效,RPM系发行版由于没测试过所以不好说。

2.1.一些准备

编辑虚拟机设置,在“虚拟机选项”标签页中展开“引导选项”,勾选“下次引导期间强制进入 BIOS 设置屏幕 ”复选框。如果虚拟机的引导模式是UEFI的话,那就勾选类似的那个复选框。

编辑虚拟机的虚拟硬件,将用于修复引导的LiveCD或者安装镜像连接到虚拟机的DVD驱动器中。镜像肯定推荐使用和虚拟机版本相同的,但如果实在没有,那么视情况换其他的也没问题。

这里由于点错,加载了1个Ubuntu Server的安装镜像。

2.2.进入救援模式

Ubuntu Server镜像加载后,移动光标选中“Rescue a broken system”回车,启动镜像的救援模式。

接着可以一边敲击回车键一边盯着屏幕发一会儿呆,相关的配置选项全部默认,网络也无需配置。

2.3.选择文件系统根目录

到这里,就要开始根据实际情况进行选择了。

从虚拟机的分区中选择1个分区作为根目录在救援模式挂载。这里当然是选择/dev/sda1。分区比较复杂的场合下,也可以选择挂载点为/的那个分区。/boot分区可以待会儿手动挂载一下。

Ubuntu Server P2V迁移至vSphere环境后修复引导

回车后会弹出一个对话框。虽然里面有能够修复GRUB引导的选项,但是由于虚拟机P2V后可能需要修改下fstab,所以还是选择Execute a shell in /dev/sda1,在该分区内释放shell。

Ubuntu Server P2V迁移至vSphere环境后修复引导

选择后会弹出对话框进行确认,回车确认完毕后,就能chroot到/dev/sda1分区并进行操作了。

2.4.手动挂载分区(可选)

如果/boot目录或者/boot/efi目录是用其他分区挂载的,那么首先需要手动用mount命令挂载下。

2.5.修改fstab

执行P2V之后,各分区的UUID将会改变。需要检查fstab文件,更新一下UUID或者暂时改成以分区名的形式挂载。

2.6.修复引导

确保/boot目录(UEFI模式下还有/boot/efi目录)中的原有内容能够正常读写后,可以进行引导的修复了。

首先执行命令在虚拟磁盘中安装引导。该命令中的参数为/boot分区位于的磁盘名称。这里的/boot分区是通过/dev/sda1一并挂载的,对应的磁盘就是/dev/sda

grub-install /dev/sda

然后执行这个命令更新GRUB配置文件。

update-grub

命令执行完成后如果没有报错,那么就可以执行命令退出chroot了。

exit

2.7.重启虚拟机

回到救援模式选项菜单,选择“Reboot the system”重启虚拟机。重启时记得断开虚拟DVD驱动器的连接,如果是Legacy BIOS引导的话还需要把启动顺序改回去。

Ubuntu Server P2V迁移至vSphere环境后修复引导

2.8.验证效果

不出意外的话,虚拟机可以正常启动。通过df -h命令查看挂载情况,各个分区应该都能正常挂载。如果不正常,那就改fstab重新挂载。

3.个人吐槽

这年头找个能将当前主流的Linux发行版不停机P2V迁移到vSphere环境中的工具实在太难了。VMware自家的vCenter Converter早已不再更新,现在还能拿它的最新版苟延残喘一下,几年后估计这个工具彻底没法用了。

不知道VMware或者哪个社区会不会再推出新的P2V工具实现这个功能,不然的话就只能ssh+dd手操,想想就觉得好——麻烦。(╯°□°)╯︵ ┻━┻