前言
PVE和ESXI都是比较常见的虚拟化系统。
PVE和ESXI的优缺点,网络上已经总结的很详细了。这里就不说了。
之前用的服务器是家用平台,6代i5处理器,装ESXI各种不兼容。而且只支持4根低电压ddr3的台式机内存条,内存兼容性差,且ddr3内存容量低。
最近组装了一台新的服务器,冲着ESXI去的,选购配件的时候就着重了兼容性。
中间过程略去,这里主要记录下虚拟机迁移的过程。
LINUX系统迁移
网上的教程,全部都是从esxi迁移到pve的,而且大多是直接复制粘贴的教程,毫无修改,从pve到esxi的几乎没见到。
那首先来看几篇ESXI->PVE的教程吧,
方法一: ESXI导出虚拟机->上传虚拟机到PVE->使用PVE自带工具qm importovf导入到PVE->修改部分数据使其兼容。
方法二:ESXI导出vmdk文件(相当于磁盘)->上传到PVE->PVE新建虚拟机->挂载上传的vmdk文件为虚拟机的磁盘,并做为启动盘
方法一中可以看出来,最重要的就是qm importovf这个工具,查看下importovf的作用和用法:
root@pve111:~# qm help importovf
USAGE: qm importovf <vmid> <manifest> <storage> [OPTIONS]
Create a new VM using parameters read from an OVF manifest
<vmid> <integer> (1 - N)
The (unique) ID of the VM.
<manifest> <string>
path to the ovf file
<storage> <string>
Target storage ID
-dryrun <boolean>
Print a parsed representation of the extracted OVF parameters,
but do not create a VM
-format <qcow2 | raw | vmdk>
Target format
可以看出来是根据ovf文件在PVE中创建新的虚拟机,不适用于导出虚拟机。
那再查下qm下还有哪些方法吧:
root@pve111:~# qm
ERROR: no command specified
USAGE: qm <COMMAND> [ARGS] [OPTIONS]
qm cloudinit dump <vmid> <type>
qm guest cmd <vmid> <command>
qm guest exec-status <vmid> <pid>
qm guest passwd <vmid> <username> [OPTIONS]
qm guest exec <vmid> [<extra-args>] [OPTIONS]
qm clone <vmid> <newid> [OPTIONS]
qm config <vmid> [OPTIONS]
qm create <vmid> [OPTIONS]
qm delsnapshot <vmid> <snapname> [OPTIONS]
qm destroy <vmid> [OPTIONS]
qm list [OPTIONS]
qm listsnapshot <vmid>
qm migrate <vmid> <target> [OPTIONS]
qm move_disk <vmid> <disk> <storage> [OPTIONS]
qm pending <vmid>
qm reboot <vmid> [OPTIONS]
qm reset <vmid> [OPTIONS]
qm resize <vmid> <disk> <size> [OPTIONS]
qm resume <vmid> [OPTIONS]
qm rollback <vmid> <snapname>
qm sendkey <vmid> <key> [OPTIONS]
qm set <vmid> [OPTIONS]
qm shutdown <vmid> [OPTIONS]
qm snapshot <vmid> <snapname> [OPTIONS]
qm start <vmid> [OPTIONS]
qm stop <vmid> [OPTIONS]
qm suspend <vmid> [OPTIONS]
qm template <vmid> [OPTIONS]
qm unlink <vmid> --idlist <string> [OPTIONS]
qm cleanup <vmid> <clean-shutdown> <guest-requested>
qm importdisk <vmid> <source> <storage> [OPTIONS]
qm importovf <vmid> <manifest> <storage> [OPTIONS]
qm monitor <vmid>
qm mtunnel
qm nbdstop <vmid>
qm rescan [OPTIONS]
qm showcmd <vmid> [OPTIONS]
qm status <vmid> [OPTIONS]
qm terminal <vmid> [OPTIONS]
qm unlock <vmid>
qm vncproxy <vmid>
qm wait <vmid> [OPTIONS]
qm help [<extra-args>] [OPTIONS]
输入qm help 可以查看每个命令的简单介绍和用法,这里看了一遍,没有合适的,这条路放弃。
方法二来说具有一定的可行性。
从PVE导出虚拟机磁盘 -> 上传到ESXI -> ESXI创建新的虚拟机 -> 将上传的磁盘挂载为启动盘
按照这个流程只要解决第一步和最后一步就行了。
最后一步当中,经过测试只能挂载vmdk格式的文件,貌似ESXI还会校验vmdk文件,能自动识别是不是虚拟磁盘。
所以只要解决第一步:从PVE中导出虚拟磁盘,且为vmdk格式。
先来看下从PVE中导出虚拟机试试,网页管理端中有 克隆、转换成模板、迁移、备份等。
- 克隆是直接创建一个一样的虚拟机,肯定不行。
- 转成模板之后也没有其他操作
- 迁移是在PVE集群中迁移,没有其他操作。
- 备份之后的格式是vma格式,貌似只有PVE能用。
上述都不能用,只好找其他方法。
PVE中的存储池是分功能的。
比如 磁盘映像、ISO镜像、容器、容器模板等。
那么只要找到磁盘映像存放位置应该就行。
可以看到PVE中磁盘映像都是raw格式存储,并且大概率是使用一个文件。
使用搜索功能查下镜像119的磁盘映像,119装的是centos7系统,里面跑着的是harbor仓库。
root@pve111:~# find / -name vm-119-disk-0
/dev/vg-x600/vm-119-disk-0
/run/schroot/mount/alpine-f3c692a3-96bb-4537-ad61-fd2ae001832d/dev/vg-x600/vm-119-disk-0
root@pve111:/dev/vg-x600# ls -l /dev/vg-x600/*119*
lrwxrwxrwx 1 root root 8 Dec 8 18:05 /dev/vg-x600/vm-119-disk-0 -> ../dm-28
可以看到,119的磁盘映像指向/dev/dm-28
root@pve111:/dev# ls -l /dev/dm-28
brw-rw---- 1 root disk 253, 28 Dec 8 18:05 /dev/dm-28
b格式代表外接设备,如磁盘等
大概率这个就是raw格式的虚拟磁盘(猜的)。
使用qemu-img
命令试着转换下。
qemu-img convert -f <原格式> -O <目标格式> <原文件路径> <目标文件路径>
这里 -f <原格式>可以忽略。qemu-img会自动识别
这里输入
root@pve111:/dev# qemu-img convert -f raw -O vmdk /dev/dm-28 /dev/vm119.vmdk
等待了一分钟左右,报错了:qemu-img: error while writing sector 49012725: No space left on device
硬盘空间不足。。。
这次直接拷贝到nfs挂载的nas上
root@pve111:/mnt/pve/NFS_103/frompve# qemu-img convert -f raw -O vmdk /dev/dm-28 /mnt/pve/NFS_103/frompve/vm119.vmdk
这次不到30秒搞定了。。。可能两台设备之间是万兆连接的,之前本地拷贝是在固态和垃圾固态之间拷贝。
转换好之后将vmdk文件上传到ESXI,我这里启用了nfs共享,就不用上传了。
下面就是创建虚拟机。
系统类型和之前一致。硬盘删除掉,mac地址和之前一致,方便dhcp服务器分配ip,新机器内存大,用不完,多给点内存。
然后编辑设置->添加现有硬盘—>选择上传的vmdk文件。控制类型选择和之前PVE里面一样的。点击保存,会自动多分配一点硬盘空间,再次打开即可看到。
如果控制器类型不一致的话在启动时ESXI会提示,比如我PVE里面使用的是vitro SCSI控制器,ESXI里面也选择SCSI,提示控制器类型不对,无法启动,改成IDE控制器正常。需要用户自己选择试下,错了也没事。
点击启动后正常引导,进入系统:
查看下ip地址是否正确:ifconfig
启动harbor:
docker-compose start
浏览器查看下harbor:
迁移成功!
windows系统的话,经过测试,依然可行,迁移后安装vmtools,流畅运行。
总结
PVE中转换虚拟磁盘为vmdk格式 -> 从PVE导出虚拟磁盘 -> 上传到ESXI -> ESXI创建新的虚拟机 -> 将上传的磁盘挂载为启动盘
3.1 查找虚拟磁盘位置
如图,一般来说在local-lvm中可以查到虚拟磁盘的名称,如果添加了多个磁盘的,后缀会从0开始累加。
使用find / -name vm-100-disk-0
查找虚拟磁盘的位置
一般来说都在/dev路径下。
查找到对应的虚拟磁盘文件,比如vm-119-disk-0
的磁盘映像实际是/dev/dm-28
3.2 转换虚拟磁盘为vmdk格式
qemu-img convert -f <原格式> -O <目标格式> <原文件路径> <目标文件路径>
这里 -f <原格式>可以忽略。qemu-img会自动识别
如:
qemu-img convert -f raw -O vmdk /dev/dm-28 /dev/vm119.vmdk
3.3 下载vmdk文件,并上传到esxi。
使用文件传输工具连接PVE进行下载。
mac下可以使用 Royal TSX等软件
windows下可以使用Bitvise等软件
将下载的vmdk文件上传到ESXI的数据任一存储文件夹。
我是PVE和ESXI都挂载了NAS的nfs共享,PVE直接将转换后的vmdk文件存入NAS中,ESXI直接读取。
3.4 ESXI中创建虚拟机
根据之前虚拟机的系统类型进行设置,
删除自动生成的硬盘。
mac地址可以改为和原来的一样的,网络驱动器类型选择兼容的就行,无法识别的话关机重新改也行。
注意事项
- PVE中,原来的虚拟机硬盘设置使用的是scsi控制器,ESXI中设置SCSI控制器时不识别,提示错误的硬盘类型,改为IDE0后正常启动。
- windows系统迁移中,ESXI中启动方式记得改成和PVE中一样的,PVE默认是seabios启动,ESXI默认是UEFI启动。两边启动方式不一致时会导致启动失败。
参考
vmware-VM迁移至Proxmox VE教程
https://foxi.buduanwang.vip/virtualization/375.html/
linux – 如何从Proxmox迁移到VMWare?
https://bbs.csdn.net/topics/394369679
PVE使用qemu-img转换磁盘格式
https://foxi.buduanwang.vip/linux/370.html/