光纤挂断导致IO卡死的本质是底层块设备不可用,内核持续重试超时并阻塞,使大量进程陷入D状态、SSH无响应;需从设备可见性、内核日志、IO栈状态三方面排查。

存储光纤挂断引发的IO卡死,本质是底层块设备突然不可用,系统内核会持续重试、超时、阻塞,最终大量进程陷入不可中断睡眠(D状态),SSH无法响应。排查需从设备可见性、内核日志、IO栈状态三方面快速切入。
确认光纤链路与设备是否“消失”
先看系统是否还识别得到后端存储设备:
- 执行 ls /sys/class/fc_host/,检查HBA卡是否存在;若目录为空或报错,说明HBA驱动未加载或物理链路彻底中断
- 运行 cat /sys/class/fc_host/host*/port_state,正常应为 Online;若显示 Linkdown、Unknown 或读取失败,基本确认光纤链路断开
- 执行 lsscsi 或 ls /dev/sd*,对比故障前后设备数量;若多块LUN(如
/dev/sdb、/dev/sdc)集体消失,而非单个磁盘异常,高度指向光纤通路问题
查内核日志锁定关键错误信号
光纤中断会在内核日志中留下明确痕迹,重点搜索以下关键词:
- dmesg -T | grep -i "fc\|fcp\|qla\|lpfc\|link down\|loss of sync" —— HBA厂商驱动(QLogic/Emulex/Broadcom)报出的链路中断、帧丢失、端口重置等事件
-
dmesg -T | grep -A5 -B5 "I/O error" —— 查看首次报错时间点,通常紧随 link down 之后出现大量
end_request: I/O error或rejecting I/O to offline device -
dmesg -T | grep -i "stuck task" —— 若出现
INFO: task XXX blocked for more than 120 seconds,说明内核已因设备无响应开始标记进程卡死
观察IO栈阻塞状态与进程冻结现象
设备失联后,上层IO请求会在内核块层堆积,表现为典型“假死”:
- 运行 iostat -x 1,若所有磁盘的
%util显示为 100% 且await持续飙升(>1000ms)、avgqu-sz疯涨(>50),但r/s和w/s接近0,说明请求全卡在队列里发不出去 - 执行 ps aux | awk '$8 ~ /D/ {print $0}',列出所有D状态进程;若大量
dd、rsync、数据库进程或kblockd线程处于D态,证实IO路径已僵死 - 检查 cat /proc/diskstats 中对应设备行(如sdb)的第10列(
ms_reading)和第14列(ms_writing)是否长时间不更新,同时第4列(reads_completed)和第8列(writes_completed)停滞,表明设备已无响应
辅助验证与现场处置要点
排除软件干扰,聚焦物理层:
- 登录带外管理(IPMI/iDRAC/iLO),查看HBA卡温度、电压、告警灯状态;部分RAID卡或FC交换机面板会有红灯直连提示
- 检查光纤模块两端(服务器HBA口 & 存储前端口)的物理指示灯:绿色常亮为正常,熄灭或黄色闪烁即为链路中断
- 勿盲目重启:若确认是光纤拔掉或模块损坏,应先恢复物理连接或更换模块;重启主机可能加重内核IO超时逻辑,延长恢复时间
- 恢复后执行 echo 1 > /sys/block/sdb/device/rescan(替换为实际设备名)尝试重新探测LUN,再检查文件系统是否需要
xfs_repair或e2fsck


















