Skip to content

ESXi 7.0 iSCSI存储无法挂载Input/output error排查实战

背景环境

  • 环境:VMware vSphere 7.0集群
  • 规模:7台ESXi主机
  • 存储:iSCSI SAN存储,挂载两块50TB大容量LUN
  • 故障现象
    • 其中6台主机正常连接并挂载两块50TB存储
    • 唯独一台主机(10.1.20.59)出现异常:能看到两个50TB设备,但其中一块盘的"数据存储"列为空(显示"未消耗"),无法自动挂载
    • 尝试操作:重启ESXi主机无效,GUI中"新建数据存储"看不到保留签名选项

排查过程

1. 初步检查:是否为快照/签名问题?

bash
esxcfg-volume -l

预期应显示VMFS UUID/label,但结果无输出,说明ESXi根本未识别到VMFS文件系统。

2. 深入检查:分区表读取

bash
ls -l /vmfs/devices/disks/t10.c658eccdd...*
partedUtil getptbl /vmfs/devices/disks/t10.c658eccdd047701befdb5a83701b8bf0d0000000

结果只有主设备名无分区文件,partedUtil返回unknown,ESXi读不到GPT信息。

3. 核心诊断:冒烟测试

bash
hexdump -C -n 512 /vmfs/devices/disks/t10.c658eccdd047701befdb5a83701b8bf0d0000000

关键结果Input/output error

决定性证据:iSCSI链路虽然显示"已连接",但底层链路实际假死。

4. 日志确认

查看/var/log/vmkernel.log发现:

ScsiDeviceIO: ... Cmd(0x45) ... failed H:0x0 D:0x2 P:0x0 Valid sense data: 0x2 0x4 0x1
D:0x2 (Check Condition): 存储端拒绝请求
Sense Key 0x2 (Not Ready): 存储端未准备好
ASC 0x4 / 0x1: Logical Unit Is in Process Of Becoming Ready

解决方案三板斧

第一步:强制踢掉卡死的iSCSI会话

bash
esxcli iscsi session remove -A vmhba64

⚠️ vmhba64为iSCSI软件适配器名称,请根据实际情况修改

第二步:重新扫描适配器

等待3-5秒后执行:

bash
esxcfg-rescan vmhba64

验证修复:

bash
hexdump -C -n 512 /vmfs/devices/disks/xxxx

第三步:刷新VMFS卷

bash
vmkfstools -V

执行完成后,回到vCenter刷新,存储自动归位,状态变绿。

深度复盘:为什么重启ESXi没用?

存储端状态未清除:重启只重置ESXi端,存储阵列认为该IQN会话仍在"活跃"中,拒绝新连接。

SCSI Reservation(锁):锁持久化在磁盘元数据,重启不会发送解锁指令。

命令行更彻底esxcli iscsi session remove相当于协议层面发送强制Logout/Reset信号,逼迫双方重新进行干净的"三次握手"。

关键要点

遇到ESXi存储显示连接但无法挂载,且hexdump报Input/output error时:

  • 不要尝试格式化(会导致数据丢失)
  • 不要盲目相信重启
  • 使用命令行强制重置iSCSI会话是最高效手段

用心记录,持续学习 | CNB