迁移前的准备工作
- 记录下 VMID 和 VM 信息的对应关系——Proxmox VE 关机以后这些数据很难找到
- 关闭所有虚拟机
- 把所有 LVM 类型的存储上的硬盘迁移到 local 类型存储上,以便提取文件
如果你像我一样面前摆着一块离线的 Proxmox VE 硬盘,想知道 VMID 和虚拟机名的对应关系,那么可以前往/var/lib/pve-cluster/config.db
,用 SQLite 3 打开。
转换磁盘格式(第一遍)
你可以用 Proxmox VE 面板的 Move Disk 功能直接把硬盘转换成 VMDK 格式。或者如果你喜欢手动操作的话,在/var/lib/vz/images/{VMID}
文件夹下找到对应的磁盘镜像文件,然后用 qemu-img
做转换:
|
qemu-img convert -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 100/vm-100-disk-0.qcow2 vm-100-disk-0.vmdk |
(虽然这里写了 adapter_type=lsilogic
,但是和之后具体使用什么虚拟 adapter 没有直接关系。)
如果遇到以下 bug,那么请更新 qemu-utils
:
|
error while converting vmdk: compat6 cannot be enabled with hwversion set |
传输镜像到 ESXi
用网页管理面板或者打开 SSH 服务以后用 SCP 传输都行,SCP 速度比网页上传快得多。目标位置:/vmfs/volumes/{your_disk_name}/
注意 qemu-img 转换出来的 vmdk 是 thick provision 的,请确保目标存储设备上有足够空间。
转换磁盘格式(第二遍)
从普通 vmdk 转换成 flat 的 vmdk 以能被 ESXi 使用。
|
vmkfstools -d thin -i origin.vmdk converted.vmdk |
注意这样转换出来的是两个文件:一个 converted.vmdk
是元数据,一个 converted-flat.vmdk
是硬盘数据,二者必须保持一致的命名,如果要移动必须一起移动。不要自己给硬盘文件取名的时候在后面加-flat
,这会导致问题。
后续设置
Windows
Windows 自带 VMWare SATA 和 SCSI 控制器的驱动。
如果开了 Secure Boot 以后开机自动进 recovery,使用以下命令解决:
|
bcdedit /set recoveryenabled no |
(PowerShell 下面需要加引号。)
如果迁移前后网卡 MAC 地址相同的话,不需要重新配置 IP 地址。但是 vmxnet3 网卡驱动需要单独安装。
Linux
如果 initramfs 里面没有打包 SATA/SCSI 控制器驱动,第一次启动可能需要使用 IDE 硬盘然后手动重新生成 initramfs。
配置了静态 IP 的虚拟机可能需要重新配置,因为网卡名变了。
参考: