使用qemu-img将openwrt img转vmdk,并在esxi上二次转换为精简置备磁盘
一、准备工作
- 运行正常的ESXi
- OpenWRT固件
* 本文使用的是Sirpdboy编译的固件:20210601-Ipv4P-Mini-x86-64-generic-squashfs-combined.img.gz* 【20220115版本】链接:https://www.123pan.com/s/dS5A-By4qd 提取码:SeY7* 本固件的Github主页,用于固件说明以及下载地址更新* 本固件在恩山论坛的更新日志
20230606更新:现在主要用ImmortalWrt了,官方页面直接编译,很稳~
qemu-img工具
- linux软件仓库中一般带有,直接安装即可,以CentOS7为例(请先安装epel源):
yum -y install qemu-img
- windows可在此链接下载,需经常使用的话,可以配置到系统变量中
- linux软件仓库中一般带有,直接安装即可,以CentOS7为例(请先安装epel源):
二、镜像格式转换
概念理解:本文中下载到的固件原始文件系统是squashfs(其他还有jffs2、ext4等等),可以理解为和Ghost镜像一样的东西,编译时输出的是.img.gz格式的压缩包,所以我们需要进一步解压得到img格式的镜像;
而vmdk是VMware的虚拟磁盘格式,我们要做的就是将img转换为可以被ESXi识别的vmdk虚拟磁盘格式。
需要注意的是,使用qemu-img工具将img转换出的vmdk虚拟磁盘,在VMware Workstation中可以直接使用,但是在ESXi中无法使用,因此需要使用vmkfstools再次转换成ESXi可以识别的格式。(应该是厚置备与精简置备的关系?)
1.将img转换为vmdk(第一次转换)
转换命令(文件名以openwrt.img为例):
qemu-img convert -f raw openwrt.img -O vmdk openwrt.vmdk
↑大写欧
- raw与img的不同之处,参考此链接
- 将转换出的vmdk虚拟磁盘上传至ESXi
2.使用vmkfstools再次转换(第二次转换)
- 需要先开启ESXi主机的安全shell,否则无法使用ssh连接
- 进入此前创建存放openwrt.vmdk的目录
储存→更多储存→点击对应的储存卷,即可找到详细路径:
[root@esxi0:~] cd /vmfs/volumes/603bd81b-d2c0b1ec-7d01-009027e08bb8
[root@esxi0:/vmfs/volumes/603bd81b-d2c0b1ec-7d01-009027e08bb8] 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挂载即可
- 2022-01-21更新:此处创建虚拟机时,先创建虚拟机,接着再把之前转换好的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页面中进行其他应用的配置。
5 条评论
亲,按照您这个操作后编辑的时候提示请输入大于原始容量的磁盘大小,但是输入后又报错无法重新配置虚拟机 OpenWrt。设备“2”的操作无效。按照网上其他的方法进行扩容 (vmkfstools -X 800M openwrt.vmdk)报错Failed to extend disk : One of the parameters supplied is invalid (1)
[...]参考:https://http.ooo/7.html[...]
我也启动不了·也没有报错
ubuntu qemu-img 6.0 + esxi 7.0.3b + openwrt-21.02.1-x86-64-generic-ext4-combined-efi.img测试转换后esxi启动不起来
是openwrt起不来吗?贴个报错看看。