dmesg -l err,warn | grep -i "io\|block\|sd\|nvme\|ata\|mmc\|usb-storage"可精准筛选io驱动相关错误警告,先用-l过滤级别压降90%噪音,再关键词定位真实故障,配合-dmesg -w实时监控、smartctl/journalctl交叉验证,确保问题不遗漏。

直接用 dmesg -l err,warn | grep -i "io\|block\|sd\|nvme\|ata\|mmc\|usb-storage" 就能快速筛出 IO 驱动相关的错误和警告。关键不在命令多复杂,而在过滤准、时机对、上下文全。
聚焦真实报错,别被启动杂讯淹没
内核日志里大量是 info 级别的设备识别信息,真正影响 IO 的错误基本集中在 err 和 warn 级别。用 dmesg -l err,warn 先压掉 90% 噪音,再加关键词过滤更高效:
-
sd[a-z]:匹配传统 SATA/SCSI 磁盘(如 sda、sdb) -
nvme[0-9]n[0-9]:匹配 NVMe 设备(如 nvme0n1) -
ata[0-9]:匹配 ATA 主机控制器和设备 -
usb-storage:匹配 USB 大容量存储驱动异常 -
block、io、timeout、reset、failed:通用 IO 异常动词
识别典型 IO 驱动故障模式
IO 驱动出问题,内核不会说“驱动崩溃了”,而是暴露底层行为失常。盯住这些信号:
-
end_request: I/O error, dev sdb, sector 123456:磁盘读写失败,可能是坏块或链路不稳 -
nvme 0000:01:00.0: I/O 999 timeout, completion polled:NVMe 请求超时,常见于固件 bug 或 PCIe 链路降速 -
ata1: softreset failed (device not ready):SATA 设备无响应,优先查电源、线材、SMART 状态 -
usb-storage: probe of 1-1:1.0 failed with error -5:USB 存储设备枚举失败,-5 是 EIO,多因供电不足或兼容性问题 -
blk_update_request: I/O error, dev mmcblk0, sector 0:eMMC/SD 卡底层 IO 错误,可能卡已损坏或接触不良
确保看到最新、最完整的 IO 日志
IO 故障往往瞬时发生,环形缓冲区小、日志易被覆盖。操作前注意三点:
- 执行
dmesg > /tmp/dmesg-before.log先存档,再做排查 - 复现问题前用
dmesg -c清空缓冲区(它会先输出再清,不丢线索) - 插拔设备、触发 IO 压力时,用
dmesg -w | grep -i "sd\|nvme\|ata"实时盯住,避免翻历史找不着
单靠 dmesg 不够,必须交叉验证
dmesg 告诉你“哪里坏了”,但不说明“为什么坏”或“坏到什么程度”。下一步要立刻补查:
-
smartctl -a /dev/sdb(或nvme smart-log /dev/nvme0)看磁盘健康状态 -
cat /proc/diskstats | grep sdb查 IO 错误计数(字段 10、11 是 read/write errors) -
lspci -vv -s 0000:01:00.0 | grep -A10 "Kernel driver"确认驱动是否加载、有无 IRQ 冲突 -
journalctl -k --since "1 hour ago" | grep -i "io\|block"补充 systemd-journald 持久化记录(若已启用)











