使用qemu-img将openwrt img转vmdk,并在esxi上二次转换为精简置备磁盘

原帖地址:https://zhuanlan.zhihu.com/p/597950130

一、准备工作

  • qemu-img工具
    • linux软件仓库中一般带有,直接安装即可,以CentOS7为例(请先安装epel源):yum -y install qemu-img
    • windows可在此链接下载,需经常使用的话,可以配置到系统变量中

二、镜像格式转换

概念理解:本文中下载到的固件原始文件系统是squashfs(其他还有jffs2、ext4等等),可以理解为和Ghost镜像一样的东西,编译时输出的是.img.gz格式的压缩包,所以我们需要进一步解压得到img格式的镜像;
而vmdk是VMware的虚拟磁盘格式,我们要做的就是将img转换为可以被ESXi识别的vmdk虚拟磁盘格式。

需要注意的是,使用qemu-img工具将img转换出的vmdk虚拟磁盘,在VMware Workstation中可以直接使用,但是在ESXi中无法使用,因此需要使用vmkfstools再次转换成ESXi可以识别的格式。

1.将img转换为vmdk(第一次转换)

.img.gz解压出的待转换的img镜像

  • 转换命令(文件名以openwrt.img为例):
    qemu-img convert -f raw openwrt.img -O vmdk openwrt.vmdk
    ↑大写O
  • raw与img的不同之处,参考此链接

转换出的vmdk镜像,此时文件实际大小为78.3MB

  • 将转换出的vmdk虚拟磁盘上传至ESXi

2.使用vmkfstools再次转换(第二次转换)

  • 需要先开启ESXi主机的安全shell,否则无法使用ssh连接
  • 进入此前创建存放openwrt.vmdk的目录
    储存→更多储存→点击对应的储存卷,即可找到详细路径:

储存→更多储存→点击对应的储存卷,即可找到详细路径:

[root@esxi0:~] cd /vmfs/volumes/62f333fd-30d7d57c-e63f-f01faff10c72

[root@esxi0:/vmfs/volumes/62f333fd-30d7d57c-e63f-f01faff10c72] ls
ISO           ikuai         openwrt_lan   openwrt_lan1  openwrt_wlan
  • 在ESXi主机上,使用vmkfstools将上传的openwrt.vmdk再次转换
    • 转换命令vmkfstools参数
      • -i 参数为源文件
      • -d参数为vmdk磁盘存储方式(精简置备thin,厚置备延迟清零zeroedthick,厚置备立即清零eagerzeroedthick,参考官方详解
      • 此处以源文件 openwrt.vmdk,输出文件 openwrt_lan.vmdk(精简置备)为例
      • *个人更建议直接厚置备立即置零,openwrt镜像也不大,理论上来说厚置备立即置零性能会好一丢丢
      • vmkfstools -i openwrt.vmdk -d thin openwrt_lan.vmdk
[root@esxi0:/vmfs/volumes/xxxxxx/openwrt_lan] vmkfstools -i openwrt.vmdk -d thin openwrt_lan.vmdk
Destination disk format: VMFS thin-provisioned
Cloning disk 'openwrt.vmdk'...
Clone: 100% done.

[root@esxi0:/vmfs/volumes/xxxxxx/openwrt_lan] ls
openwrt.vmdk   openwrt_lan-flat.vmdk  openwrt_lan.vmdk

可见转换后有两个文件,一个是openwrt_lan.vmdk,此时它实际上只是一个配置文件,如果感兴趣查看一下里面的参数;另一个是openwrt_lan-flat.vmdk,这个才是虚拟磁盘文件。但是在esxi中是看不到-flat文件的,所以不要误将其删除。
可以将转换前的vmdk删除,以免后期维护时搞不清楚用的是哪个vmdk磁盘。

三、创建虚拟机

  • 创建虚拟机就比较简单了,新建虚拟机,填写信息,一直下一步。
    • 唯一需要注意的一步是,不用新建磁盘,将此前转换的vmdk挂载即可
    • 2023-01-10更新:此处创建虚拟机时,先创建虚拟机,接着再把之前转换好的vmdk磁盘移动至此虚拟机的目录,最后编辑虚拟机设置添加此vmdk磁盘。

新建好的虚拟机以能够成功启动为正确结果。

  • 若不使用vmkfstools进行二次转换,会发生什么?
    会报如下错误:
Power On VM
键       haTask-5-vim.VirtualMachine.powerOn-1854359
描述     打开该虚拟机电源
虚拟机   openwrt_lan
状况     失败 - “scsi0:0”的磁盘类型 2 不受支持或无效。请确保磁盘已导入。

错误:
“scsi0:0”的磁盘类型 2 不受支持或无效。请确保磁盘已导入。
无法为“scsi0:0”(/vmfs/volumes/603bd81b-d2c0b1ec-7d01-009027e08bb8/openwrt_lan/openwrt.vmdk) 创建虚拟 SCSI 设备。
模块“DevicePowerOn”打开电源失败。
无法启动虚拟机。

四、OpenWRT启动后的设置

  • 将创建的OpenWRT开机,待开机信息滚动完毕后,敲一下回车,进入交互界面:

1.设置IP

配文件路径参考OpenWRT配置文件路径以及功能说明

  • 修改网络配置文件:/etc/config/network (见下图)
    • 修改ipaddr字段,即OpenWRT的IP地址
    • 添加 gateway字段,即OpenWRT的网关地址
      本次安装作为旁路网关,因此网关填写上一级路由的IP
    • 添加dns字段,即OpenWRT本身的dns,若不设置,其本身将无法解析域名

保存并退出(vim可使用快捷键Shift+zz)

以上操作,若对命令行不熟悉,可以只修改IP,使用IP进入web界面后再修改

2.重启网络

  • 重启网络命令:./etc/init.d/network restart
  • 网络重启后,ping一下外网,若能ping通,说明刚才设置的网关和DNS都已经生效

3.修改密码

  • 命令:passwd
    然后输入两遍新密码,即可完成修改
    大坑!!ESXi的web console里面,右Shift键无效!所以不可以使用右Shift键输入特殊字符!我就说死活密码都不对!!

4.Web登录

  • 使用上面修改的ipaddr字段的IP:192.168.4.201
    若能够访问web页面,此次安装就成功了,可以在web页面中进行其他应用的配置。

原帖地址:https://zhuanlan.zhihu.com/p/597950130