1. ESXi 主机排障为什么绕不开这些命令
如果你正在维护 VMware ESXi 主机,尤其是遇到虚拟机网络不通、iSCSI 存储掉线、NAS 挂载失败、SSH 连不上这类问题时,图形界面(vSphere Client)有时候会转圈、报错信息也不够具体。这时候真正能救场的,是 ESXi 命令行里那一套esxcfg-*和vmkiscsi-tool工具。它们能直接告诉你虚拟交换机怎么配的、物理网卡挂到哪、防火墙端口开没开、iSCSI target 有没有连上。
这篇内容面向 ESXi 主机运维和虚拟网络排障场景,把esxcfg-vswitch、esxcfg-firewall、esxcfg-nas、vmkiscsi-tool这几个高频命令的典型用法、输出解读、逐条验证动作整理成一份可复制的排障清单。同时我会说明怎么借助 TaoToken 的统一 Key/API 通道,把配置核对、命令输出整理、多主机比对这些重复动作串起来,减少来回切换工具的时间。适合已经能 SSH 登录 ESXi 主机、但面对一堆esxcfg参数容易记混的运维同学。
需要先说明一点:ESXi 7.0 之后部分esxcfg-*命令被esxcli体系逐步替代,但很多存量环境(5.5/6.0/6.5/6.7)里这些命令依然是最直接的排障入口。下面每条都给出可复制命令和验证动作,你可以在实验环境先跑一遍再上生产。
2. 前置准备:SSH 通道与 TaoToken 统一 Key 通道
排障第一步是能稳定登录 ESXi 主机。默认情况下 ESXi 的 SSH 服务是关闭的,你需要在 DCUI(直接控制台)或 vSphere Client 里先启用。启用后直接用终端登录:
ssh root@<esxi-host-ip>登录后先确认版本,不同版本命令行为有差异:
vmware -v输出类似VMware ESXi 6.7.0 build-xxxxxxxx,记下主版本号,后面查命令兼容性会用到。
接下来是我实际排障时觉得效率提升明显的一步:把命令输出、配置核对、多主机比对这些文本处理动作,通过 TaoToken 的统一 API 通道接进来。TaoToken 提供统一的 Key 和 API 入口,你可以用同一个 Key 调用模型对话能力,把esxcfg-vswitch -l的输出粘进去让它帮你比对差异、生成核对清单,或者把报错信息整理成排查步骤。
具体操作路径:
- 先到 TaoToken 控制台 创建 API Key;
- Key 管理页在 API Keys;
- 接入文档参考 TaoToken 文档;
- 想直接对话验证模型效果,用 模型对话。
API 基础地址是https://taotoken.net/api,不带 UTM 参数,配置时直接填这个。
注意:TaoToken 在这里的角色是帮你整理和核对配置文本、生成排障清单,不是替代 ESXi 本身的命令执行。命令还是要在 ESXi 主机上跑,TaoToken 负责把输出变成可读的结论。
如果你长期做编码或 Agent 类工作,可以看 Coding Plan;Claude Code 相关接入参考 ClaudeCodeAnthropic。
3. 可复制配置:虚拟交换机与网卡命令清单
3.1 esxcfg-vswitch 查看与创建虚拟交换机
先看当前虚拟交换机全貌:
esxcfg-vswitch -l输出会列出每个 vSwitch 的名称、端口数、上行链路(vmnic)、以及挂在上面的 portgroup。重点看三列:Uplinks是否为空、Portgroups里有没有你预期的网络标签、MTU是否符合存储网络要求(iSCSI/vMotion 常要 9000)。
查看物理网卡状态:
esxcfg-nics -l输出里Link为Up才算物理链路正常,Speed和Duplex也要确认。如果某块网卡Link是Down,先查交换机侧端口和线缆,别急着改 vSwitch 配置。
创建一个新虚拟交换机并挂两块物理网卡:
esxcfg-vswitch -a vSwitch1 esxcfg-vswitch -A internal vSwitch1 esxcfg-vswitch -L vmnic1 vSwitch1 esxcfg-vswitch -L vmnic2 vSwitch1逐条解释:-a新建 vSwitch;-A在 vSwitch 上新建 portgroup,名字叫internal;-L把物理网卡挂上去。执行完再跑一次esxcfg-vswitch -l,确认vSwitch1的 Uplinks 里出现 vmnic1 和 vmnic2。
删除操作要格外小心,别把管理网络所在的 vSwitch 删了:
esxcfg-vswitch -u vmnic1 vSwitch2 esxcfg-vswitch -D internal vSwitch1 esxcfg-vswitch -D vSwitch1-u是移除上行链路,-D是删除 portgroup 或整个 vSwitch。删之前一定先esxcfg-vswitch -l确认这个 vSwitch 上没有管理口或 vMotion 口。
3.2 创建 vmkernel 接口用于 vMotion 和 iSCSI
vMotion 和 iSCSI 都需要 vmkernel 接口,通常不配网关:
esxcfg-vswitch -a vSwitch2 esxcfg-vswitch -A "vm kernel" vSwitch2 esxcfg-vswitch -L vmnic3 vSwitch2 esxcfg-vmknic -a "vm kernel" -i 172.16.1.141 -n 255.255.252.0esxcfg-vmknic -a创建 vmkernel 接口,-i是 IP,-n是子网掩码。创建后用下面命令确认:
esxcfg-vmknic -l输出里能看到vmk0、vmk1等接口及其对应 portgroup 和 IP。如果 IP 没出现,检查 portgroup 名字是否和-a时一致,大小写和空格都算。
3.3 esxcfg-firewall 防火墙端口排查
查看所有已知服务及开关状态:
esxcfg-firewall -s查询具体服务,比如 SSH 客户端:
esxcfg-firewall -q sshclient输出会显示该服务是enabled还是disabled,以及对应端口。开启和关闭:
esxcfg-firewall -e sshclient esxcfg-firewall -d sshclient-e启用,-d禁用。排障时如果发现某个端口不通,先用-q确认服务状态,再查物理网络和上游防火墙,别一上来就改 ESXi 防火墙规则。
3.4 esxcfg-nas 挂载与重连 NAS
添加 NAS 数据存储:
esxcfg-nas -a isos -o nas.example.com -s isos-a是本地标签,-o是 NAS 服务器地址,-s是共享名。列出当前 NAS 连接:
esxcfg-nas -l如果 NAS 显示不可用或挂载丢失,强制重连:
esxcfg-nas -r esxcfg-nas -l-r会重新连接所有已配置的 NAS 设备,再-l看结果。如果还是失败,检查 NAS 侧导出权限和 ESXi 主机到 NAS 的网络连通性。
3.5 vmkiscsi-tool 连接 iSCSI target
启用软件 iSCSI:
esxcfg-swiscsi -e查询状态用-q,禁用用-d。添加 target IP:
vmkiscsi-tool -D -a 172.16.1.133 vmhba40-D表示对发现地址操作,-a添加,vmhba40是 iSCSI 适配器名,用esxcfg-scsidevs -a可以查到。列出当前 target 连接:
vmkiscsi-tool -l -T vmhba40输出里能看到 target 名称、状态、IP。如果状态不是connected,检查网络、target 侧 ACL、CHAP 认证配置。
4. 验证请求与成功结果解读
配置改完后,逐条验证比一次性重启服务更安全。下面是我常用的验证顺序。
先看虚拟交换机整体:
esxcfg-vswitch -l成功标志:目标 vSwitch 的 Uplinks 列出正确 vmnic,Portgroups 包含你创建的标签,MTU 符合预期。
再看 vmkernel 接口:
esxcfg-vmknic -l成功标志:vmk 接口 IP、掩码、portgroup 三者对应正确。
防火墙:
esxcfg-firewall -q sshclient成功标志:输出Service sshclient is enabled或对应端口已放行。
NAS:
esxcfg-nas -l成功标志:共享显示为mounted或available,没有unavailable。
iSCSI:
vmkiscsi-tool -l -T vmhba40成功标志:target 状态为connected,且esxcfg-scsidevs -a能看到对应 LUN。
如果你想把多台主机的输出做比对,可以把这些命令结果保存成文本,通过 TaoToken 的 模型对话 粘贴进去,让它帮你列出差异项和可疑配置。API 调用方式参考 接入文档,基础地址https://taotoken.net/api。
5. 本篇常见错排查
错误一:esxcfg-vswitch -L报Invalid uplink
原因通常是 vmnic 名字写错,或者该网卡已被其他 vSwitch 占用。先用esxcfg-nics -l确认网卡名,再用esxcfg-vswitch -l看它挂在哪个 vSwitch 上。一块物理网卡不能同时挂两个 vSwitch 做上行链路。
错误二:创建 vmkernel 接口后 IP 不生效
检查 portgroup 名字是否和esxcfg-vmknic -a里的名字完全一致,包括空格。"vm kernel"和"vmkernel"是两个不同的 portgroup。另外确认 vSwitch 上已挂上行链路。
错误三:esxcfg-firewall -q查不到服务
服务名拼写要准确,比如sshclient不是ssh-client。可以用esxcfg-firewall -s列出所有已知服务名再查。
错误四:NAS 挂载后显示 unavailable
先vmkping <nas-ip>确认网络通,再检查 NAS 侧是否允许该 ESXi 主机 IP 访问共享。esxcfg-nas -r重连后如果仍失败,看/var/log/vmkernel.log里的 NFS 相关报错。
错误五:iSCSI target 添加后不显示 LUN
vmkiscsi-tool -l -T vmhba40看 target 是否 connected。如果 connected 但没有 LUN,检查 target 侧 LUN masking 和 ESXi 的 iSCSI 适配器是否已启用。必要时用esxcfg-swiscsi -s强制重新扫描。
错误六:改完配置忘了重启管理服务
部分配置变更后需要重启管理服务才生效:
service mgmt-vmware restart重启期间 vSphere Client 会短暂断开,属正常现象。生产环境建议在维护窗口操作。
6. 把命令清单接进你的日常排障流程
上面这些命令单独跑不难,难的是每次排障都要重新回忆参数、比对多台主机输出、整理成报告。我的做法是把常用命令存成一个脚本模板,输出统一保存到带时间戳的文件里,然后通过 TaoToken 的 API 通道把文本送进模型做差异分析和清单生成。这样多主机环境下的配置漂移能更快发现。
如果你还没配 Key,先到 API Keys 创建一个,接入细节看 TaoToken 文档。长期做运维自动化或 Agent 的,可以了解 Coding Plan。
最后提醒一句:esxcfg-vswitch -D和esxcfg-nas -d这类删除操作,执行前一定先-l确认目标,管理网络所在的 vSwitch 和 portgroup 千万别动。命令本身不复杂,复杂的是知道自己正在删什么。