ESXi 常见故障处理
本页目录
场景
ESXi 主机上出故障了,虚拟机起不来、连不上、卡死、磁盘满了、虚机莫名重启。 这篇按「现象 → 定位 → 处理」整理,都是实际会遇到的。
前置条件
- 能登上 ESXi 的网页控制台(管理网络出问题时用 DCUI)
- 有 SSH 权限:网页 → 主机 → 管理 → 安全 → 访问策略 → 启用 SSH
- 记下这台主机的 IP 和管理口(vmk0)
- 重要操作前先看一遍「虚拟机 → 操作 → 备份」有没有在做
配置
1. 虚拟机无法开机
先看事件,ESXi 的报错基本都在里面:
虚拟机 → 选中 → 监控 → 事件
常见几种:
"msg.vpx.vm.powerOn.timeout" 启动超时,宿主机负载高或磁盘慢
"msg.vmx.powerOn.failed" 配置文件或磁盘有问题
"msg.disk.filter.pd.sesparse.outOfSpace" 空间不足
"msg.hostPort.vmmi网卡不存在" 网卡被删了
按顺序查:
# 1. 宿主机有没有进入维护模式或重启了
esxcli system stats uptime get
# 2. 存储是否可访问(最常见原因)
esxcli storage filesystem list
esxcli storage core path list
esxcli storage vmfs extent list
# 3. 磁盘文件在不在
ls -lh /vmfs/volumes/datastore1/虚拟机目录/
# 4. CPU/内存有没有被占满
esxcli system stats cpu load get
esxcli hardware memory get
# 5. 虚拟机的 .vmx 有没有语法错误
vi /vmfs/volumes/datastore1/虚拟机目录/虚拟机.vmx
.vmx 里常见的问题:
# 网卡类型在当前版本不存在(换过硬件版本)
ethernet0.virtualDev = "vmxnet3" ← 改成 vmxnet2 或 e1000e
# 残留的网卡配置指向已删除的端口
ethernet0.present = "TRUE"
# 磁盘路径写错
scsi0:0.fileName = "[datastore1] 目录/磁盘.vmdk"
改完 .vmx 后必须重新注册才生效:
虚拟机 → 操作 → 取消注册
然后 文件 → 打开或浏览数据存储 → 找到 .vmx → 登记为虚拟机
2. 虚拟机连不上 / 网卡不通
# 物理口链路是否 up
esxcli network interface list
# vmk0 管理网络配置
esxcli network ip interface list
esxcli network ip route list
# 虚拟交换机和上行口
esxcli network vswitch standard list
esxcli network vswitch standard portgroup list
# ARP 和邻居
esxcli network arp table list
# 防火墙(ESXi 默认拦很多)
esxcli network firewall ruleset list
分层排查,按这个顺序排除:
| 步骤 | 检查 | 正常结果 |
|---|---|---|
| 1 | 物理口 up 吗 | Link Status: up |
| 2 | vSwitch 有上行口吗 | 上行口数量对得上 |
| 3 | 端口组 VLAN 对吗 | 和物理交换机配置一致 |
| 4 | 虚机网卡连上端口组了吗 | 适配器 1 勾了端口组 |
| 5 | 虚机里看到 IP 吗 | 有 IP 才谈通不通 |
| 6 | ESXi 防火墙挡了吗 | 临时关掉测试 |
快速判断是不是 ESXi 防火墙:
主机 → 管理 → 安全与配置 → 防火墙 → 关闭全部(临时)
关掉虚拟机能通就说明是防火墙挡的,接着在防火墙里放行具体端口,别长期全关。
虚拟机里的虚拟网卡没连上端口组,是最容易漏的一步:
虚拟机 → 硬件 → 虚拟网卡 → 勾上端口组(原来可能是「不连接」)
3. 宿主机紫屏 / 卡死
ESXi 紫屏(Purple Screen)通常是硬件或驱动问题。
# 崩溃转储(重启后还在)
ls -lh /var/core/
/usr/lib/vmware/vmware-core-dump /var/core/vmware-core-*.dump | less
常见原因:
| 现象 | 大概率原因 |
|---|---|
蓝屏 PFN corruption |
内存条坏了或双通道没插满 |
紫屏 NMI watchdog |
固件或 CPU 稳定性 |
紫屏 LINT1 / PCIE |
插槽、PCIe 卡、供电 |
紫屏 I/O error |
阵列卡、磁盘、RAID 卡固件 |
紫屏 TSL / e1000e |
网卡驱动,换成 e1000 或更新网卡固件 |
处理顺序:
# 1. 看硬件健康
esxcli hardware cpu global get
esxcli hardware memory get
# 2. 阵列卡状态(LSI/Broadcom 用这个)
/opt/lsi/MegaRAID/merlincli "/c0 show all" | grep -E "State|Firmware"
# 或 storcli
/opt/storcli/storcli64 /c0 show all
# 3. 日志里有没有硬件报错
grep -iE "hardware|error|fail" /var/run/log/hostd.log | tail -50
# 4. 禁用有问题的设备
esxcli device compass list
esxcli device compass set -s vmnic1 -e false
排查内存:
# 看内存条和通道
esxcli hardware memory get
# 4 条内存只插了 2 条,通道没插满,性能会掉一半
4. 磁盘空间告急
# 数据存储剩余空间
esxcli storage filesystem list
# 占用最大的虚拟机目录
du -h -d 2 /vmfs/volumes/datastore1/ | sort -h | tail -20
# 找大文件(日志、快照、旧备份)
find /vmfs/volumes/datastore1/ -size +5G -type f -exec ls -lh {} \; 2>/dev/null | head -20
空间不足的常见来源和处理:
虚拟机快照没删 → 占的是原始盘大小的增量,删快照才真正释放
日志文件太大 → /var/log 下的一堆 .gz
旧 ISO 镜像 → 装完没删的安装介质
模板机留了副本 → 模板机本身占一份,克隆出来每台又占一份
孤儿虚拟磁盘 → 删了虚拟机但 .vmdk 还在
删快照的正确顺序(先删虚拟机里的快照,再合并):
虚拟机 → 快照 → 管理快照 → 删除
不要直接去数据存储里删 -delta.vmdk,会毁掉虚拟机。
清孤儿磁盘(虚拟机已删、磁盘还在):
# 先在 vCenter/ESXi 上确认虚拟机确实已删
grep -i "orphan" /var/log/vmkernel.log | tail -20
5. 虚拟机莫名重启 / 卡顿
# 宿主机整体负载
esxcli system stats uptime get
esxcli hardware cpu global get
# 存储延迟(重点看这个)
esxcli storage core device stats list
虚拟机被自动重启,先查是不是触发了 HA:
主机 → 监控 → 事件 看 "VM heartbeat" 和 "APPD"
HA 把虚拟机重启掉,说明宿主机之间的心跳断了。常见原因:
- 管理网络抖动(虚拟化流量和管理流量混在一条链路上)
- 网卡做了链路聚合但交换机侧没配对
- 交换机 STP 收敛慢,导致短暂断链
卡顿(不重启但慢)多看存储:
esxcli storage core device stats list | grep -A 10 "Device"
关注 KAVG(内核延迟)、GAVG(设备延迟)和 QAVG(队列)。KAVG 大而 GAVG 小,说明是宿主机内部排队——通常是虚拟机数量太多或 CPU 超分配。
CPU 超分配检查:
主机 → 监控 → 资源 → CPU
「已用容量」超过 100% 就是超分配了
6. 虚拟机时间漂移 / 证书告警
# 当前时间
esxcli system time get
# NTP 状态
esxcli system ntp service list
esxcli system ntp server list
时间不对会导致:
- vCenter 里虚机时间慢慢偏
- TLS 证书有效期校验失败
- 快照、备份的时间戳错乱
修:
主机 → 管理 → 时间和日期 → 编辑 NTP 设置
服务器:ntp1.corp.local
服务模式:仅主机(和 NTP 服务器同步)
启动时同步:勾上
改完要重启一下服务,或者等下一个同步周期。
7. 存储掉线 / 阵列卡异常
# 阵列卡状态
/opt/lsi/MegaRAID/merlincli "/c0 show all" | grep -E "State|Firmware"
/opt/storcli/storcli64 /c0 show all | grep -E "State|Size"
# 存储路径状态(Path State 必须是 Optimal)
esxcli storage core path list
# 如果是 degraded,看哪条路径断了
esxcli storage core path list | grep -A 5 "degraded"
阵列卡固件不匹配是重灾区。ESXi 6.5/6.7 对 Broadcom/LSI 卡有明确的固件白名单, 固件太老或太新都可能导致阵列卡被 ESXi 挂掉、存储直接失联。
# 看 ESXi 认到的卡和驱动
esxcli hardware pci list | grep -i -A 3 "LSI\|Broadcom\|RAID"
处理:进阵列卡的 CLI(Ctrl+R 或 storcli)升级固件到 ESXi 兼容列表里的版本。 升级固件前一定要先备份配置,阵列卡固件升级失败会导致数据全丢。
验证
- 虚拟机能正常开机,
esxcli里没有新报错 - 虚机网络能通:
ping宿主机网关 → 虚机 IP → 业务地址 - 存储路径都是
Optimal - 数据存储剩余空间回到安全线(至少 20%)
- 事件里没有持续刷新的 warning
- 时间同步正常,
esxcli system ntp service list显示 synced
回滚
- 改
.vmx前先备份:cp xxx.vmx xxx.vmx.bak - 改阵列卡固件前必须导出配置:
/opt/lsi/MegaRAID/merlincli "/c0 save_configfile xxx.cfg" - 动存储前先确认有备份,别用「快照合并」当备份用
- 禁用网卡/设备前记下原状态,方便装回去
坑
.vmx改完不重新注册就不生效,这是最常见的「我改了怎么没用」- 删快照要在虚拟机里删,直接删
-delta.vmdk会毁数据 - 阵列卡固件升级失败可能掉盘,升级前一定导出配置
- ESXi 装在 U 盘上,U 盘拔了或坏了,整机起不来
- vmk0 管理网络配错,只能去机房接显示器用 DCUI 改
- 内存条不插满通道,性能掉一半,但很多人不知道
- 虚拟化流量和管理流量走同一条链路,HA 容易误判
- ESXi 7 免费版没有 vCenter API,很多备份软件不支持
/var/log里的日志会一直涨,磁盘小的机器记得配 log rotation- 用
esxcli改配置时,Web 界面的缓存可能覆盖你的改动,改完刷新一下网页确认 - 快照链超过 3 层就很难清理了,能不用就不用