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

2023-08-14

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

准备

  1. 先通过 Homebrew 安装 qemu:

Terminal window
1
# 安装完成后是使用 qemu-img 调用
2
brew install qemu
  1. 开启 ESXi ssh 服务:

    1. 登录 ESXi
    2. 选择「管理」
    3. 选择「服务」
    4. 找到「TSM-SSH」并启用

使用

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

Terminal window
1
qemu-img convert -f raw arpl.img -O vmdk arpl.vmdk

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

Terminal window
1
scp arpl.vmdk [email protected]:/vmfs/volumes/SSD/mirrors/

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

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

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

kernel is not a valid elf file

因为还需要再转换一次,ESXi 才能正常识别。让我们先通过 SSH 连接 ESXi: ssh [email protected],然后执行:

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

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

Terminal window
1
vmkfstools -i arpl.vmdk synoboot.vmdk -d thin

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

Terminal window
1
rm arpl.vmdk

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

信息

环境

  • HPE-ESXi-6.7.0-Update3
  • System: macOS 13.4.1

参考