Oamc

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 层就很难清理了,能不用就不用