pve迁移vmware辅助脚本:
https://github.com/zhegeshijiehuiyouai/RoadToDevOps/tree/master/10-pve-vmware-tools/01-pve-to-vmware

思路:

从PVE导出虚拟机磁盘 -> ESXI创建新的虚拟机 -> PVE导出的磁盘上传到ESXI -> 将上传的磁盘转为精简置备并挂载为启动盘 -> 启动虚拟机安装VMware Tools

1、从PVE导出虚拟机磁盘

通过ssh连接到pve物理机,找到pve上虚拟机的磁盘并转格式。
pve每个虚拟机都有ID,可以根据ID来查找磁盘位置,这里要迁移的虚拟机ID为219。

root@lab-pve-1:/dev# find / -name vm-219-disk*
/dev/me4024-4-lvm/vm-219-disk-1
/dev/me4024-4-lvm/vm-219-disk-0

可以看到虚拟机挂载了两块盘,一块一块的弄。

root@lab-pve-1:/dev# ls -l /dev/me4024-4-lvm/vm-219-disk-0
lrwxrwxrwx 1 root root 8 Feb 10 18:40 /dev/me4024-4-lvm/vm-219-disk-0 -> ../dm-94

可以看到vm-219-disk-0指向了/dev/dm-94(注意:虚拟机关机重启后,软链接指向的文件可能会变化)

root@lab-pve-1:/dev# ls -l /dev/dm-94
brw-rw---- 1 root disk 253, 94 Apr 13 16:24 /dev/dm-94

b格式代表外接设备,如磁盘等。
qemu-img命令查看磁盘格式

qemu-img info <设备>

使用qemu-img命令转下格式

qemu-img convert -f <原格式> -O <目标格式> <原文件路径> <目标文件路径>

存放目标文件的目录一定要注意下磁盘空间大小,避免磁盘空间耗尽。

root@lab-pve-1:/dev# qemu-img info dm-94
image: dm-94
file format: raw
virtual size: 100 GiB (107374182400 bytes)
disk size: 0 B
root@lab-pve-1:/dev# qemu-img convert -f raw -O vmdk /dev/dm-94 /dev/vm219-0.vmdk

如果pve和esxi服务器网络通的话,转好后,可以通过scp直接拷贝到esxi服务器上,或者先下载到自己的电脑上,后面再上传。
重复上面的操作,将第二块盘/dev/me4024-4-lvm/vm-219-disk-1也转格式。

2、ESXI创建新的虚拟机

cpu和内存与原pve上的虚拟机保持一致,硬盘无所谓,因为一会要替换。建好虚拟机后,将其关机。

这里克隆出来的虚拟机有两块硬盘,将它们都删除。

pve虚拟机开启嵌套虚拟化vt pve vmware_pve虚拟机开启嵌套虚拟化vt

3、PVE导出的磁盘上传到ESXI

如果通过scp或其他命令已经将硬盘拷贝到了esxi服务器上的话,可以跳过本节,本节适用于下载到本地电脑后,再上传的情况。

找到刚才创建的虚拟机在vcenter/esxi上存放的目录,将导出的磁盘上传到此目录。我这里是vcenter的界面,存储是放在磁盘阵列里的,目录名为虚拟机名。

pve虚拟机开启嵌套虚拟化vt pve vmware_pve_02

提示转到esxi上去上传

pve虚拟机开启嵌套虚拟化vt pve vmware_pve_03

上传成功

pve虚拟机开启嵌套虚拟化vt pve vmware_esxi_04

再上传第二块盘

4、将上传的磁盘转为精简置备并挂载为启动盘

此时如果挂载上传的两块盘,会发现它们的类型为厚置备,占用空间大,将其转为精简置备。
通过ssh连接到esxi物理机,进入到虚拟机文件存放的目录

vmkfstools -i vm219-0.vmdk 172.16.32.33-jianwei-migrate.vmdk -d thin
vmkfstools -i vm219-1.vmdk 172.16.32.33-jianwei-migrate_1.vmdk -d thin

回到vcenter,找到新建的虚拟机,点击 操作 -> 编辑设置 -> 添加新设备 -> 现有磁盘 ,依次添加转为精简置备的两块盘。

5、启动虚拟机安装VMware Tools

此时重启后不管的话,由于硬盘驱动的原因会报错,解决方法是启动虚拟机后,立即到终端上立刻按下键,选择救援模式进入

pve虚拟机开启嵌套虚拟化vt pve vmware_pve虚拟机开启嵌套虚拟化vt_05

新增内核模块,支持vmware硬件:

vim /etc/dracut.conf.d/drivers.conf
add_drivers+="vmxnet3 vmw_pvscsi"

使用dracut命令重新构建kernel

dracut --verbose --force 

# 【注意】如果有多个内核,需要指定内核版本为grub2中第一个启动的内核
# 查看内核
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \' | awk -F "(" '{print $2}' | awk -F ")" '{print $1}' | sort -rV
# 生成指定版本的内核
dracut --verbose --force --kver 3.10.0-1160.21.1.el7.x86_64

因为安装vmware tools的时候,也会添加这两个模块,为了避免重复,生成新的initramfs后,删除新增的模块

rm -f /etc/dracut.conf.d/drivers.conf

解决网络问题
1、pve迁移过来的虚拟机都带有 cloud-init ,在重启时它会修改网卡配置,所以我们将它卸载掉

rpm -e --nodeps cloud-init

2、在vcenter上查到新虚拟机的mac地址,将虚拟机中网络配置文件的mac地址替换,例如centos7的配置文件为/etc/sysconfig/network-scripts/ifcfg-eth0。

pve虚拟机开启嵌套虚拟化vt pve vmware_esxi_06


修改之后重启服务器

reboot

【补充】

如果ip都配置正确后还是网络不通,选择虚拟机的 操作 --> 编辑设置 --> 网络适配器1 是否已连接,同时检查网卡状态是否勾选 打开电源时连接

pve虚拟机开启嵌套虚拟化vt pve vmware_pve_07

最后,记得安装VMware Tools

点击 “安装 VMware Tools …”

pve虚拟机开启嵌套虚拟化vt pve vmware_esxi_08

ssh到新建的虚拟机,执行

mount /dev/sr0 /mnt
mkdir /tmp/00
cp -ar /mnt/* /tmp/00
cd /tmp/00
tar xf VMwareTools-10.3.5-10430147.tar.gz # 解压出 vmware-tools-distrib
cd vmware-tools-distrib
./vmware-install.pl # 安装vmware tools,根据提示选择,最后会提示安装成功,成功后重启服务器