前阵子为了出国留学的体验,换上了软路由,使用的是 Proxmox VE + OpenWrt 的组合。总体上来说还是挺好用的,有点美中不足的是网卡不开直通的话只能跑到 40MB/s 左右的速度。据说 ESXi 性能会好点,于是就想尝试一下。

安装

本来安装没啥好说的,做好安装 U 盘后按照步骤安装就行。不过因为我这台软路由的 SATA 有点特殊,并不是独立的 SATA 通道,而是走了一个类似 RAID 的控制器,安装遇到了下面这个问题:

最开始按照网上的说法,先用一个 mSATA 转 USB 把系统装在硬盘里,然后启动系统,禁用新版的 AHCI 驱动后把硬盘插回机器启动,然而结果似乎并不行。

之后我找到了网上一大佬做的带 RAID 驱动的 ESXi 安装包,问题依旧。

就这么试了整整一天,结果在 BIOS 里面把 SATA 的运行模式从 AHCI 调整到 Intel RST Premium 后,按照第一种方法安装,即可正常使用。附上禁用 AHCI 驱动的命令:

esxcli system module set --enabled=false --module=vmw_ahci

存储

默认 ESXi 是需要单独定硬盘存储镜像和虚拟机的,这里可以使用命令在系统盘的空闲空间中直接建立存储空间。

首先在 ESXi 后台查看硬盘的标识。

括号里的字符串就是硬盘的标志。

然后使用命令查看硬盘分区:

partedUtil getptbl /vmfs/devices/disks/硬盘标识

会得到下面的输出:

gpt
14593 255 63 234441648
1 64 8191 C12A7328F81F11D2BA4B00A0C93EC93B systemPartition 128
5 8224 520191 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
6 520224 1032191 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
7 1032224 1257471 9D27538040AD11DBBF97000C2911D1B8 vmkDiagnostic 0
8 1257504 1843199 EBD0A0A2B9E5443387C068B6B72699C7 linuxNative 0
9 1843200 7086079 9D27538040AD11DBBF97000C2911D1B8 vmkDiagnostic 0

这里需要记住输出第二行的第四个数字:234441648,这个数字每个人都不一样。

然后执行下面命令重新分区:

partedUtil setptbl /vmfs/devices/disks/硬盘标识 gpt \
"1 64 8191 C12A7328F81F11D2BA4B00A0C93EC93B 128" \
"5 8224 520191 EBD0A0A2B9E5443387C068B6B72699C7 0" \
"6 520224 1032191 EBD0A0A2B9E5443387C068B6B72699C7 0" \
"7 1032224 1257471 9D27538040AD11DBBF97000C2911D1B8 0" \
"8 1257504 1843199 EBD0A0A2B9E5443387C068B6B72699C7 0" \
"9 1843200 7086079 9D27538040AD11DBBF97000C2911D1B8 0" \
"2 7086080 15472639 EBD0A0A2B9E5443387C068B6B72699C7 0" \
"3 15472640 X AA31E02A400F11DB9590000C2911D1B8 0"

最后一行的 X 需要替换为前面步骤得到的数字减去48后的结果。

之后使用命令创建存储即可:

vmkfstools -C vmfs5 -b 1m -S 存储名称 /vmfs/devices/disks/硬盘标识

镜像转换

因为我自己编译的固件配置里没有生成 vmdk 文件,并且我也不想重新调整编译参数,所以这里使用 qemu-img 把 img 转换为 vmdk 文件:

qemu-img convert -f raw -O vmdk openwrt.img openwrt.vmdk

修改主机名

ESXi 默认的主机名是 localhost.localdomain,不好看也不好记,直接改掉:

esxcfg-advcfg -s 新主机名 /Misc/hostname

授权

默认的试用授权每 60 天需要续一次,比较麻烦,直接用网上找到的码:0U0QJ-FR1EP-KZQN9-J1C74-23P5R

问题

因为一次非正常断电,再次打开虚拟机出现了这个错误:对象类型需要托管的 I/O。

原因似乎是非正常断电导致镜像文件损坏,修复一下即可。

先执行:

vmkfstools -x check /path/to/your/machine.vmdk

如果提示「Disk needs repair.」,执行下面的命令修复:

vmkfstools -x repair /path/to/your/machine.vmdk

经测试转换磁盘到 thin 格式可以解决问题:

vmkfstools -i source.vmdk destination.vmdk -d thin

自动关机

因为有了之前的问题,所以对于每天要断电的宿舍来说,自动关机的确很必要。

首先在存储中上传关闭虚拟机和关机脚本。

#!/bin/ash
echo "shutting down VMs..please wait.."
/sbin/powerOffVms
echo "done."
#!/bin/ash
echo "shutting down the host now.."
/bin/poweroff

分别命名为「auto-shutdown.sh」和「auto-poweroff.sh」。

然后为脚本添加执行权限:

chmod +x /vmfs/volumes/Storage/auto-shutdown.sh
chmod +x /vmfs/volumes/Storage/auto-poweroff.sh

在「/etc/rc.local.d/local.sh」的「exit 0」之前添加:

/bin/kill $(cat /var/run/crond.pid)
/bin/echo "20 15 * * * /vmfs/volumes/Storage/auto-shutdown.sh" >> /var/spool/cron/crontabs/root
/bin/echo "25 15 * * * /vmfs/volumes/Storage/auto-poweroff.sh" >> /var/spool/cron/crontabs/root
/bin/busybox crond

注意这里的时间是 UTC 时间。

最后执行下面命令备份一下「rc.local」。

auto-backup.sh

关于直通

最开始我是把除了管理口外所有网卡全部直通给 OpenWrt。

直到后来我发现虚拟网卡同样可以跑满千兆网络,于是就把所有网卡直通取消,直接用虚拟网卡。

VMware 牛 B!

最后来张图