直接用 dmesg 和 journalctl 联动查 i/o 错误,核心是分层定位:先确认错误是否真实发生,再判断是驱动/固件层异常还是物理链路中断,最后通过 smartctl、nvme、storcli 等工具交叉验证硬件状态。

直接用 dmesg 和 journalctl 联动查 I/O 错误,核心不是堆命令,而是分层定位:先确认错误是否真实发生、再判断是驱动/固件层异常还是物理链路中断,最后交叉验证硬件状态。
快速筛出真实 I/O 错误线索
内核日志里大量“IO”字样只是噪音,真正要抓的是带时间戳、有上下文、能对应到具体设备的错误。执行:
-
dmesg -T -l err,warn | grep -i "sd\|nvme\|ata\|block\|io" | grep -E "(fail|timeout|reset|link.*down|phy.*error|aborted|queue.*full)"—— 过滤掉泛泛的 warning,只留具备故障特征的关键词 - 若发现类似
[Wed May 22 14:22:03 2026] nvme0n1: I/O timeout, reset controller或[Wed May 22 14:23:18 2026] sd 2:0:0:0: [sdb] tag#12 FAILED Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK,说明已进入物理链路异常阶段 - 配合
dmesg -w插拔线缆或触发 I/O(如dd if=/dev/zero of=/mnt/array/test bs=1M count=100),实时观察是否复现 link down / phy error / port reset 类报错
用 journalctl 补全启动与服务维度上下文
dmesg 只告诉你“内核看到了什么”,journalctl 才能告诉你“系统当时在做什么”。重点检查三类日志:
-
journalctl -b -k --since "2 hours ago"—— 查看本次启动后内核日志的完整时间线,比 dmesg -T 更易对齐其他事件 -
journalctl -b -u multipathd -u iscsid -u targetcli—— 若使用多路径、iSCSI 或 SCSI Target,这些服务的日志会明确记录路径切换失败、session drop、login timeout 等链路级异常 -
journalctl -b -u systemd-udevd—— udev 规则错配会导致设备节点反复创建/销毁,表现为 dmesg 中连续出现sdX: device offline→sdX: attached,但实际物理链路并未中断
交叉验证物理链路状态
光看日志不够,必须结合硬件可观测性工具确认物理层是否真实断开:
- 对 NVMe 阵列:
sudo nvme list看设备是否还在;sudo nvme smart-log /dev/nvme0n1查Media and Data Integrity Errors和Error Information Log Entries - 对 SAS/SATA 阵列:
sudo sg_logs -a /dev/sg0(需先sg3_utils)查 PHY error counter;sudo sas2ircu 0 display(LSI 卡)或sudo storcli64 /c0 show(Avago)看 link rate、negotiated speed、phy state - 通用链路检查:
ls -l /sys/class/scsi_host/host*/device/target*/*/block/看设备节点是否存在;cat /sys/class/scsi_host/host*/proc_name确认 HBA 型号;cat /sys/class/scsi_host/host*/link_state查当前链路状态(如running或offline)
锁定故障点的典型信号组合
单看某条日志容易误判,要结合多个信号交叉印证:
-
阵列控制器掉线:dmesg 出现
host0: lost interrupt+ journalctl 中multipathd[xxx]: sdb: remove path+storcli64 /c0 show显示Controller Status = Not Responding -
SAS 线缆/背板接触不良:dmesg 频繁刷
phy-2: link down→phy-2: link up+sg_logs -a /dev/sg0中Invalid Word Count持续上升 + 物理插拔后恢复 -
NVMe SSD 固件异常:dmesg 报
nvme0n1: controller is down+nvme smart-log中Warning Comp. Temp. Time高 +journalctl -u nvme-firmware-update显示上次升级失败











