ESXi 中禁止主机占用 USB 网卡的正规方法
EXSi 版本:8.0U2
最近想把一个4G网卡分给ESXi中的软路由做备用外网,想法很好,甚至第一次实践也很好,就简单地插上去,分配,然后虚拟机检测到一个网卡,上网。
但是,重启或者再次插拔之后,ESXi主机似乎是反应过来了,把这个网卡给驱动起来了,变成了一个物理网卡,配套虚拟交换机那种。这时候当然就不能再分配给虚拟机了。
按理说这样其实也不是不能用,只需要把这个物理网卡分配成原来的主虚拟交换机的备用上行链路,或者干脆新建一个新的虚拟交换机,弄两个虚拟网卡连接到软路由,都行。但是这玩意儿其实没那么稳定,重启或者重新插拔就会挂掉,然后已经建好的备用链路或者虚拟网卡都废掉,同时Web界面连删除这些后台有问题的虚拟网卡/交换机都做不到,只能ssh进去删。
为此我甚至无师自通了
esxcli
命令的窍门:其实就是一级一级的查看--help
,看到感兴趣的子命令就添加进去再--help
,挺容易懂的。
网上还有其他办法,有的是改配置文件强制直通 usb 控制器,但用到这里有点过于麻烦了。也有说卸载USB驱动的,但为了一个网卡,卸载驱动也太不优雅了。
最终,搜到了这样一篇比较优雅的办法,同时发现这个办法其实就在ESXi 的发布文档里面:
首先,esxcli hardware usb passthrough device list
看到你的网卡(当然这一步他的状态肯定是没有直通),记录几个序列号。
然后,用这个命令禁用:
esxcli system settings advanced set -o /USB/quirks -s 0x0bda:0x8153:0:0xffff:UQ_NET_IGNORE
USB/quirks
这个选项其实在界面里面也能设置,两边是同步的。0x0bda:0x8153
是网卡的供应商和型号ID,当然需要按你自己的写,0:0xffff
是硬件版本编码,因为这个命令本身是用来应对各种非常细节的问题的,所以可以只对某一种版本应用,当然我们写成0:0xffff
那就是从0
到0xffff
的全部了,UQ_NET_IGNORE
看字面就明白,是检测网卡的时候忽略这玩意儿的意思。
然后重启,之后就可以把这个网卡分配给某个虚拟机了。不用该配置文件,也不用自己编写启动脚本,安全启动的机器上也能用。
如果重启之后还是没有直通,可以再用esxcli hardware usb passthrough
系列的命令enable
一下,这时候应该是生效的。之前的时候你enable
也不行。
理论上来说,这样用的效果可能没有直通USB控制器那么好,但你都用USB网卡了,要啥网速?难道直通USB控制器的USB网卡就能打败PCIE了?