定位磁盘IO错误应聚焦dmesg报错源头,执行dmesg | grep -i “error|fail|timeout|i/o|buffer”筛选关键线索,如”Buffer I/O error on device sda1″、”end_request: I/O error”、”ata1.00: failed command”或”nvme … controller is down”,再联动smartctl检查SMART属性、/var/log/messages确认持续性,并结合iotop、lsof定位阻塞进程与业务文件。

定位磁盘 IO 错误,关键不是翻遍所有日志,而是聚焦内核层报错源头——dmesg 是第一入口。它记录了设备驱动与硬件交互时的真实反馈,比应用日志更底层、更可信。
盯住 dmesg 里的硬件级错误线索
执行 dmesg | grep -i "error|fail|timeout|i/o|buffer",重点识别这几类典型输出:
- “Buffer I/O error on device sda1”:明确指向某分区读写失败,通常伴随扇区号(如 “logical block: 123456”),这是后续验证的坐标
- “end_request: I/O error” 或 “blk_update_request: critical target error”:说明请求在块层已无法完成,问题大概率在硬件或驱动
- “ata1.00: failed command: READ FPDMA QUEUED”:SATA控制器层面报错,可能涉及线缆松动、电源不稳或硬盘固件异常
- “nvme 0000:01:00.0: controller is down”:NVMe盘掉线,需查 PCIe 链路状态和温度
交叉验证系统日志与硬件健康
仅看 dmesg 不够,要联动其他日志确认是否持续发生:
- 查
/var/log/messages或/var/log/syslog(视发行版而定)中相同时间点是否有重复报错,判断是偶发还是持续恶化 - 用
smartctl -a /dev/sdx检查 SMART 属性,特别关注:
• Reallocated_Sector_Ct(重映射扇区数)非零即存在物理坏道
• Current_Pending_Sector(待重映射扇区)持续增长,说明硬盘正在失效边缘
• UDMA_CRC_Error_Count(CRC校验错误)高值提示数据线或接口接触不良
区分错误类型:是硬件故障,还是文件系统或配置问题?
报错现象相似,但根源差异很大:
- 若 dmesg 报错集中在同一物理扇区(如反复出现 “sector 123456”),且 smartctl 显示该扇区已重映射 → 硬件老化,应尽快备份并更换磁盘
- 若报错随机出现在不同位置,且
smartctl -H显示“PASSED”,但fsck修复后暂时恢复 → 文件系统损坏,可能由异常断电或内核 bug 引起 - 若只在高负载时出现 timeout 类错误,而空闲时正常 → IO 调度器或队列深度不匹配,比如 SSD 用了 deadline 调度器,或 RQ-SIZE 设置过小
快速确认是否影响业务进程
错误发生时,立即检查哪些进程被阻塞:
- 运行
iotop -oP,观察是否有进程 IO 状态卡在 “D”(不可中断睡眠),这通常是等待磁盘响应未果 - 用
lsof +D /mount/point查看挂载点上打开的文件,结合报错设备名(如 sda1),定位具体业务文件(如数据库表文件、日志文件) - 执行
cat /proc/[pid]/stack(需 root),若栈回溯中频繁出现generic_make_request或blk_mq_start_request→ 确认该进程正陷入底层 IO 等待
文章来自机圈观察员网,发布者:,转载请注明出处:https://www.jqgcy.com/xitongjiaocheng/31957.html