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会话是最高效手段