在 macOS 中将 img 镜像转换成 vmdk 格式

每次想把网上下载的 img 镜像转换成 [[ESXi]] 使用的 vmdk 格式总是要另外开 [[Windows]] 电脑用 StarWind 软件进行转换，特别麻烦，因此问 [[ChatGPT]] 找了一个无需借助 Windows 的方式。

准备

先通过 [[brew]] 安装 qemu:

Copy
# 安装完成后是使用 qemu-img 调用
brew install qemu

开启 ESXi [[ssh]] 服务:

登录 ESXi

选择「管理」

选择「服务」

找到「TSM-SSH」并启用

使用

先把 img 镜像转换成 vmdk 格式:

Copy
qemu-img convert -f raw arpl.img -O vmdk arpl.vmdk

然后把转换后的文件通过 [[scp]] 上传到 ESXi 中:

Copy
scp arpl.vmdk root@esxi.immwind.com:/vmfs/volumes/SSD/mirrors/

如果现在把刚刚上传的 vmdk 镜像添加到虚拟机作为系统盘启动， ESXi 会出现报错:

无法打开虚拟机 DSM 的电源。“sata0:0” 的磁盘类型 2 不受支持或无效。请确保磁盘已导入。

当你以为是磁盘问题把磁盘类型改成 IDE 时，发现前面的报错消失，能正常启动了，先不要高兴，惊喜在后面:

kernel is not a valid elf file

因为还需要再转换一次，ESXi 才能正常识别。让我们先通过 SSH 连接 ESXi: ssh root@esxi.immwind.com，然后执行:

Copy
# 进入之前镜像上传的位置
cd /vmfs/volumes/SSD/mirrors
# 执行转换
vmkfstools -i arpl.vmdk synoboot.vmdk

默认情况下使用 vmkfstools 转换后的硬盘类型是:厚置备，延迟置零，如果想改成 精简置备，可以加上 -d thin 参数:

Copy
vmkfstools -i arpl.vmdk synoboot.vmdk -d thin

待转换完成后，使用 ls 命令查看会发现除了 synoboot.vmdk 之外还多了一个 synoboot-flat.vmdk，不要误删了，这个才是真正存放数据的文件。不过可以把之前上传的 arpl.vmdk 文件可以删除，以免后续维护时造成混淆:

Copy
rm arpl.vmdk

现在可以把 synoboot.vmdk 加到虚拟机中作为系统盘启动，和通过 StarWind V2V Image Converter 转换的效果一样。

信息

环境

HPE-ESXi-6.7.0-Update3

System: macOS 13.4.1

参考

克隆或转换虚拟磁盘或 RDM