dmesg 不直接记录网线故障,但能捕获 scsi 子系统因物理链路中断(如光纤拔掉、sas松动、hba失联等)触发的内核报错,通过 hostbyte/driverbyte 组合暴露问题,配合 grep 可快速定位硬件连通性故障。

dmesg 本身不直接记录网线故障(那是物理层,无协议交互),但它能捕获 SCSI 子系统因底层链路中断触发的内核级报错——比如光纤拔掉、SAS线松动、HBA卡失联、多模/单模SFP混用导致 PHY 层无法协商。这些错误会通过 hostbyte 和 driverbyte 组合暴露出来,而 grep 是快速筛出关键线索的核心工具。
一、先抓出带 SCSI 错误标识的原始日志
SCSI 报错在 dmesg 中固定格式为:[时间] sdX:Y:Z:W: [devname] tag#N FAILED Result: hostbyte=XXX driverbyte=XXX
执行这条命令可一次性命中所有典型 SCSI 故障线索:
dmesg | grep -iE "failed.*result|scsi.*error|hostbyte=|driverbyte=|DID_(NO_CONNECT|TIME_OUT|BAD_TARGET|PARITY|ERROR)|DRIVER_(SENSE|OK|ABORT)"
- ✅ 覆盖关键词:
FAILED Result(错误主干)、hostbyte/driverbyte(字段名)、常见符号常量(如DID_NO_CONNECT) - ✅ 不区分大小写(
-i),支持正则扩展(-E) - ✅ 避免漏掉缩写或空格变体(如
hostbyte = DID_NO_CONNECT)
二、按错误组合定位物理链路问题
重点不是看“有没有错”,而是看 哪个字节组合指向硬件连通性失败。用 grep 配合上下文(-A1 -B1)能看清前因后果:
dmesg | grep -A1 -B1 -i "hostbyte=DID_NO_CONNECT\|hostbyte=DID_TIME_OUT\|hostbyte=DID_PARITY"
对应典型物理链路场景:
-
hostbyte=DID_NO_CONNECT- 含义:HBA 卡根本没探测到目标设备
- 物理原因:光纤完全断开、SAS线未插紧、HBA BIOS 中禁用了端口、交换机 zone 配置错误
- 辅助验证:
lsscsi -v看设备是否还在列表;systool -c fc_host -v查光纤端口 link_state
-
hostbyte=DID_TIME_OUT- 含义:命令发出去但没收到响应,超时放弃
- 物理原因:链路高延迟(弯曲光纤、劣质光模块)、信号衰减(距离超限)、中间设备(FC交换机端口拥塞或故障)
- 注意:若伴随
driverbyte=DRIVER_OK,基本可排除硬盘本身问题
-
hostbyte=DID_PARITY- 含义:传输中校验失败,数据被破坏
- 物理原因:电缆屏蔽不良、接头氧化、电磁干扰、SAS线过长或非标线材
三、关联网卡类日志交叉印证(防误判)
SCSI 链路有时依赖网络协议(如 iSCSI、FCoE),此时网卡异常也会引发 SCSI 超时。顺手检查网卡状态是否同步异常:
dmesg | grep -iE "(eth|enp|ib|link.*down|carrier lost|firmware|phy.*timeout)" | tail -n 20
-
若同时看到:
igb 0000:05:00.0: Cannot get PHY settings, err=-110(PHY 通信失败)-
sd 2:0:0:0: [sdb] FAILED Result: hostbyte=DID_TIME_OUT
→ 基本锁定是 iSCSI 所用网卡物理链路出问题(网线/SFP/交换机端口)
-
这时再查:
ethtool eth1看Link detected: no或Speed: Unknown!,就坐实了。
四、过滤后快速聚焦时间与设备
加 -T 显示真实时间,再用 awk 或 sed 提取最近 5 分钟、且含 SCSI 错误的块:
dmesg -T | awk -v cutoff="$(date -d '5 minutes ago' '+%b %d %H:%M:%S')" \
'$0 > cutoff && /FAILED.*Result|hostbyte=|scsi.*error/{flag=1; next} flag && /^$/ {flag=0; print ""} flag' | head -n 50
- 更轻量做法(推荐日常用):
dmesg -T | grep -i "failed.*result\|hostbyte=" | tail -n 15
直接看最新几条,多数链路故障是突发、持续发生的,最新日志最具参考性。
不复杂但容易忽略:SCSI 错误日志从不“单独出现”,它总是和物理层信号(link down/up、PHY timeout)、驱动加载失败(firmware missing)、HBA状态变化(fc_host online/offline)成组出现。用 grep 把这几类关键词串起来筛,比盯着一行 DID_NO_CONNECT 猜半天更可靠。











