本文目录导读:

- 方法一:使用
systool或cat检查HBA卡状态 - 方法二:使用
fcping确认端到端连通性 - 方法三:分析系统日志与硬件错误
- 方法四:完整状态检测脚本(推荐)
- 适用场景与建议
- 补充:Windows环境检测
- 常见故障判断
要检测光纤通道(Fibre Channel, FC)是否正常,通常需要从物理层(链路状态)、协议层(协商速率) 以及设备层(HBA卡健康) 三个层面进行,以下是几种常见的脚本检测方法,适用于Linux/Unix环境。
使用 systool 或 cat 检查HBA卡状态
这是最直接的方法,检查FC HBA(主机总线适配器)的在线状态。
#!/bin/bash
# 检测FC HBA端口状态
echo "=== 检测FC HBA端口状态 ==="
# 检查是否有FC设备
if ! ls /sys/class/fc_host/ &>/dev/null; then
echo "错误:未检测到FC HBA设备或驱动未加载。"
exit 1
fi
# 遍历所有FC主机端口
for fc_host in /sys/class/fc_host/fc_host*; do
hostname=$(basename "$fc_host")
port_state=$(cat "$fc_host/port_state" 2>/dev/null)
port_speed=$(cat "$fc_host/speed" 2>/dev/null)
wwnn=$(cat "$fc_host/node_name" 2>/dev/null)
wwpn=$(cat "$fc_host/port_name" 2>/dev/null)
echo "端口: $hostname"
echo " WWNN: $wwnn"
echo " WWPN: $wwpn"
echo " 状态: $port_state"
echo " 速率: $port_speed"
# 关键判断:状态是否为Online
if [ "$port_state" = "Online" ]; then
echo " [OK] 端口在线,链路正常。"
else
echo " [FAIL] 端口离线或出现问题!"
fi
echo ""
done
关键字段解释:
port_state:Online表示正常。Offline、Linkdown、Bypass表示异常。speed:4 Gbit,8 Gbit,16 Gbit,如果显示unknown或0,可能存在问题。
使用 fcping 确认端到端连通性
fcping 是一个底层工具,用于测试FC网络中的设备是否可达。
#!/bin/bash
# 使用fcping检测光纤通道连通性
# 目标设备端口WWN(World Wide Port Name),请替换为实际值
TARGET_WWPN="21:00:00:24:ff:37:9a:5c"
HBA_INTERFACE="fc1" # 指定要使用的HBA接口
echo "正在使用fcping检测到 $TARGET_WWPN 的连通性..."
# 发送5个ping包
if fcping -c 5 -i "$HBA_INTERFACE" "$TARGET_WWPN" 2>&1 | grep -q "5 packets received"; then
echo "[OK] 端口 $TARGET_WWPN 可达,光纤通道通信正常。"
else
echo "[FAIL] 端口 $TARGET_WWPN 不可达或响应超时!"
fi
注意: 需要安装 libfc 和 fcping 工具,在RHEL/CentOS中:yum install libfc fcping。
分析系统日志与硬件错误
光纤通道问题通常会记录在系统日志中,要捕捉硬件层面的错误(如CRC错误、链路重置):
#!/bin/bash
# 检测FC HBA硬件错误和链路问题
echo "=== 检测FC HBA硬件错误 ==="
echo ""
# 方法A:从sysfs读取错误计数(适用于QLogic/Broadcom驱动)
for fc_host in /sys/class/fc_host/fc_host*; do
hostname=$(basename "$fc_host")
# 链路故障次数
link_fail=$(cat "$fc_host/link_failures" 2>/dev/null)
loss_of_sync=$(cat "$fc_host/loss_of_sync" 2>/dev/null)
loss_of_sig=$(cat "$fc_host/loss_of_signal" 2>/dev/null)
echo "端口: $hostname"
echo " 链路失败次数: $link_fail"
echo " 同步丢失次数: $loss_of_sync"
echo " 信号丢失次数: $loss_of_sig"
# 如果有非零值,说明存在问题
if [ "$link_fail" -gt 0 ] || [ "$loss_of_sync" -gt 0 ] || [ "$loss_of_sig" -gt 0 ]; then
echo " [WARN] 该端口存在硬件错误或链路抖动!"
fi
echo ""
done
# 方法B:从dmesg中查找最近的FC错误(最近10分钟)
echo "=== 系统日志中的FC异常(最近10分钟) ==="
dmesg --since "10 minutes ago" 2>/dev/null | grep -iE "(fc|fibre|link down|link up|fabric|login)" | tail -20
完整状态检测脚本(推荐)
以下是一个综合脚本,整合了上面所有关键检测点,适合定期巡检:
#!/bin/bash
# 光纤通道健康检查脚本
STATUS=0 # 0=正常, 1=警告, 2=错误
echo "========================================="
echo " 光纤通道 (FC) 健康检测报告"
echo "========================================="
echo "主机: $(hostname)"
echo "时间: $(date)"
echo ""
# 1. 检测HBA是否存在
if [ ! -d /sys/class/fc_host/ ]; then
echo "[CRITICAL] 未检测到任何FC HBA设备!"
exit 2
fi
# 2. 遍历所有端口
for fc_host in /sys/class/fc_host/fc_host*; do
hostname=$(basename "$fc_host")
port_state=$(cat "$fc_host/port_state" 2>/dev/null)
port_speed=$(cat "$fc_host/speed" 2>/dev/null)
wwpn=$(cat "$fc_host/port_name" 2>/dev/null)
echo "端口: $hostname WWPN: $wwpn"
# 状态检测
case "$port_state" in
"Online")
echo " 状态: Online [OK]"
;;
"Offline"|"Linkdown")
echo " 状态: $port_state [CRITICAL]"
STATUS=2
;;
*)
echo " 状态: $port_state [WARN]"
[ $STATUS -lt 1 ] && STATUS=1
;;
esac
# 速率检测(如果为未知或0,视为异常)
if [ "$port_speed" = "unknown" ] || [ "$port_speed" = "0" ]; then
echo " 速率: $port_speed [WARN]"
[ $STATUS -lt 1 ] && STATUS=1
else
echo " 速率: $port_speed [OK]"
fi
echo ""
done
# 3. 检测硬件错误
echo "--- 硬件错误检测 ---"
ERROR_COUNT=$(find /sys/class/fc_host/ -name "link_failures" -exec cat {} \; 2>/dev/null | paste -sd+ | bc)
SYNC_COUNT=$(find /sys/class/fc_host/ -name "loss_of_sync" -exec cat {} \; 2>/dev/null | paste -sd+ | bc)
if [ "$ERROR_COUNT" ] && [ "$ERROR_COUNT" -gt 0 ]; then
echo " 链路失败次数: $ERROR_COUNT [WARN]"
[ $STATUS -lt 1 ] && STATUS=1
fi
if [ "$SYNC_COUNT" ] && [ "$SYNC_COUNT" -gt 0 ]; then
echo " 同步丢失次数: $SYNC_COUNT [WARN]"
[ $STATUS -lt 1 ] && STATUS=1
fi
# 4. 汇总
echo ""
echo "========================================="
case $STATUS in
0) echo "检测结论: [PASS] 所有FC链路正常" ;;
1) echo "检测结论: [WARN] 部分链路存在异常,需要关注" ;;
2) echo "检测结论: [FAIL] 存在严重链路问题,请立即处理" ;;
esac
exit $STATUS
适用场景与建议
| 场景 | 推荐方法 |
|---|---|
| 快速检查HBA是否在线 | 方法一(systool/cat) |
| 测试存储阵列连通性 | 方法二(fcping) |
| 判断是否有硬件故障 | 方法三(dmesg + 错误计数器) |
| 定期巡检脚本 | 方法四(综合检查) |
补充:Windows环境检测
在Windows中,可以使用PowerShell调用WMI:
Get-WmiObject -Class MSFC_FibrePortHBAAttributes -Namespace "root\wmi" | Select-Object InstanceName, PortState, PortSpeed, PortType
或者使用 fcadmin 命令(需安装FC HBA管理工具)。
常见故障判断
Linkdown:物理连接断开,检查光纤、SFP模块。Offline:逻辑隔离,可能配置了Zoning或Port Down。Online但速率未知:兼容性问题或驱动程序未正确识别。- 链路错误计数持续增长:光纤信号质量不佳(衰减、脏污)。
通过这些脚本,基本可以自动检测出90%以上的光纤通道问题,建议将综合脚本加入crontab定期执行,并配置邮件告警。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播