Libata错误信息解析

原文(Libata error messages)来源:
https://ata.wiki.kernel.org/index.php/Libata_error_messages

概述

内核产生所有的libata错误信息都使用以下标准格式:

ata3.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen
ata3.00: cmd ea/00:00:00:00:00/00:00:00:00:00/a0 tag 0
              res 40/00:00:01:4f:c2/00:00:00:00:00/00 Emask 0x4 (timeout)
ata3.00: status: { DRDY }

前缀

错误每一行都有前缀,前缀ata3.00解释为:

  • ata:该前缀指明这是条libata端口或设备信息
  • 3:端口号,从1开始记
  • 00:设备号,一般从0记,除非端口多路复用或是使用PATA主从设备

例子ata3.00指的是ata的第3个端口第一个设备

异常描述行 ###

异常描述行(第一行)给出异常处理状态(EH)概述

exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2 frozen

  • Emask:错误分类掩码(代码中的 AC_ERR_xxx )
  • SAct:SATA SActive 寄存器
  • SErr:SATA SError 寄存器
  • action: ATA_EH_xxx操作,如revalidate,softreset,hardreset(参见include / linux / libata.h)
  • frozen:如果存在,表示端口被冻结为EH
  • t3:这项也是可选的,表重试次数,t3表示3次

输入任务文件

cmd行(第二行)给出了发送到设备的ATA命令(taskfile)

cmd ea / 00:00:00:00:00/00:00:00:00:00 / a0 tag 0

上述命令按’/’及空格分割分5段解释:

  • ea:命令号
  • 00:00:00:00:00:(第一个)Feature : NSect : LBA L : LBA M : LBA H
  • 00:00:00:00:00:(第二个)HOB Feature : HOB NSect : HOB LBA L : HOB LBA M : HOBLBA H
  • a0:设备/头
  • tag : NCQ tag 号, NCQ如果没有激活或不适用,则为0。

输出任务文件与错误摘要 ###

这一行(第三行)包含当前ATA设备寄存器的dump信息及错误摘要:

res 40/00:00:01:4f:c2 / 00:00:00:00:00/00 Emask 0x4(time out)

与输入差不多,按6段解析:

  • 40:状态
  • 00:00:01:4f:c2 :依次为Error : NSect : LBA L : LBA M : LBA H
  • 00:00:00:00:00:依次为HOB Error : HOB NSect : HOB LBA L : HOB LBA M : HOBLBA H
  • 00:设备/头
  • Emask:ATA命令的内部错误掩码(对应源代码中的AC_ERR_xxx)
  • time out:错误摘要,这只是其中一种错误

所有的错误可能的分类列举如下:

  • host bus erro :主机总线错误,主机< - >芯片总线错误(如PCI,如果是在PCI总线上)
  • ATA bus error:ATA总线错误, 芯片< - >设备总线错误
  • timeout:超时, 控制器无法响应激活的ATA命令。这可能是任何原因。大多数情况下,这是由于一个不相关的中断子系统错误(尝试使用’pci = nomsi’或’acpi = off’或’noapic’启动),当我们期望硬件发中断时,它却无法发送中断。
  • HSM violation:HSM违规, 硬件无法以预期的方式响应。“HSM”代表Host State Machine,它是ATA所需的基于软件的有限状态机,它根据当前的ATA命令和其他硬件状态编程细节来预期某些硬件行为。
  • internal error:内部错误 ,硬件标记了一个不可能的情况,很可能是由于软件编程的错误导致。
  • media error:媒体错误,软件检测到媒体错误
  • invalid argument:无效参数, 由于某种原因,软件将ATA命令标记为无效
  • device error:设备错误,硬件表示上一个命令出错。此错误直接从ATA设备传送。如果你看到很多这些,那通常表明存在硬件问题。
  • unknown error:未知错误(不应该发生这种情况)

ATA状态与错误扩展

最后一行显示状态信息,这一行可以为status,也可以为ERR,关键看寄存器中的位怎么置的。

ATA状态扩展

status: { DRDY }

将输出任务文件中返回的ATA状态寄存器扩展为其组件位:

  • Busy:设备忙(所有其他位无效)
  • DRDY:设备就绪,正常的情况下一般为1。
  • DRQ:数据准备好通过PIO发送/接收
  • DF: 设备故障
  • ERR: 错误(有关详细信息,请参阅错误寄存器)

ATA错误扩展
如果错误寄存器中的任何位置1,则错误寄存器内容将扩展为其组件位,例如:

error: { ICRC ABRT }

  • ICRC:Ultra DMA传输时接口CRC错误 - 通常是线或电源问题,驱动程序设置错误的Ultra DMA模式也会导致该问题
  • UNC : 无法纠正的错误 - 通常是由于磁盘上的坏扇区造成的
  • IDNF :未找到请求的地址
  • ABRT : 命令已中止 - 或者命令不支持,无法完成或接口CRC存在问题(如上例,与ICRC一起出)

SATA SError扩展
如果SATA SError寄存器中的任何位置1,则SError寄存器内容将扩展为其组件位,例如:

SError:{PHYRdyChg CommWake}

这些寄存器的位通常是由SATA host接口设置的,以响应SATA链路上的错误。除非设备热插拔或拔出操作,否则这些位不会被设置。如果这些位被置上了,则强烈怀疑是硬件问题(通常是SATA线不行或电源不良或供电不足)。

  • RecovData:出现数据完整性错误,但接口已恢复
  • RecovComm:设备和主机之间的通信暂时丢失,但已重连上了
  • UnrecovData:发生数据完整性错误,但接口没有恢复
  • Persist:持久通信或数据完整性错误
  • Proto:检测到SATA协议不符合规范
  • HostInt:主设备总线适配器内部错误
  • PHYRdyChg:PhyRdy信号状态改变
  • PHYInt:PHY内部错误
  • CommWake:PHY检测到COMWAKE(PHY唤醒)
  • 10B8B:10b到8b的解码错误
  • Dispar:检测到不正确的差异
  • BadCRC:链路层CRC错误
  • Handshk: 帧传输返回接收到了R_ERR握手响应
  • LinkSeq:链路状态机错误
  • TrStaTrns :传输层状态转换错误
  • UnrecFIS:收到无法识别的FIS(帧信息结构)
  • DevExch:设备存在状态改变

其他

相关资源

上面文章提到了几个头文件,如下链接有相关信息:
https://code.woboq.org/linux/linux/include/linux/libata.h.html
也可以在linux源码里找到,如:
/usr/src/linux-source-3.13.0/include/linux/libata.h

enum
{/* reset / recovery action types */ATA_EH_REVALIDATE   = (1 << 0),ATA_EH_SOFTRESET    = (1 << 1), /* meaningful only in ->prereset */ATA_EH_HARDRESET    = (1 << 2), /* meaningful only in ->prereset */ATA_EH_RESET        = ATA_EH_SOFTRESET | ATA_EH_HARDRESET,ATA_EH_ENABLE_LINK  = (1 << 3),ATA_EH_PARK         = (1 << 5), /* unload heads and stop I/O */ATA_EH_PERDEV_MASK  = ATA_EH_REVALIDATE | ATA_EH_PARK,ATA_EH_ALL_ACTIONS  = ATA_EH_REVALIDATE | ATA_EH_RESET | ATA_EH_ENABLE_LINK,};    enum ata_completion_errors
{AC_ERR_DEV          = (1 << 0), /* device reported error */AC_ERR_HSM          = (1 << 1), /* host state machine violation */AC_ERR_TIMEOUT      = (1 << 2), /* timeout */AC_ERR_MEDIA        = (1 << 3), /* media error */AC_ERR_ATA_BUS      = (1 << 4), /* ATA bus error */AC_ERR_HOST_BUS     = (1 << 5), /* host bus error */AC_ERR_SYSTEM       = (1 << 6), /* system error */AC_ERR_INVALID      = (1 << 7), /* invalid argument */AC_ERR_OTHER        = (1 << 8), /* unknown */AC_ERR_NODEV_HINT   = (1 << 9), /* polling device detection hint */AC_ERR_NCQ          = (1 << 10), /* marker for offending NCQ qc */
};

收集的报错信息

上面文章提到的磁盘报错格式,与实际的可能不一致,文章里的字段说明也比较粗略,深入了解的话,需进一步弄懂每个字段含义,或者是了解ata协议才行,这个得慢慢来,下面是平时收集的一些信息,先贴出来,方便后续分析。

ata2.01: exception Emask 0x10 SAct 0x0 SErr 0x4050000 action 0xf
ata2.01: SError: { PHYRdyChg CommWake DevExch }


ata4.01: exception Emask 0x10 SAct 0x0 SErr 0x10002 action 0xf
ata4.01: SError: { RecovComm PHYRdyChg }


ata7.00: exception Emask 0x10 SAct 0x0 SErr 0x4050000 action 0xf
ata7.00: SError: { PHYRdyChg CommWake DevExch }
libata: notify userspace Error info msg, serror 0x4050000, error_class 0x0, ata_status 0x0, ata_error 0x0
ata7.00: hard resetting link


ata4.04: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x6
ata4.04: waking up from sleep
ata4.04: hard resetting link
ata4.04: SATA link up 6.0 Gbps (SStatus 133 SControl 330)


ata5: exception Emask 0x10 SAct 0x0 SErr 0x10000 action 0xe frozen
ata5: irq_stat 0x00400000, PHY RDY changed
ata5: SError: { PHYRdyChg }
ata5: hard resetting link
ata5: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
ata5.00: configured for UDMA/133

ata6.01: exception Emask 0x0 SAct 0xc SErr 0x0 action 0x0
ata6.01: failed command: READ FPDMA QUEUED
ata6.01: cmd 60/01:10:a2:86:d4/00:00:01:00:00/40 tag 2 ncq 512 in
ata6.01: status: { DRDY ERR }
ata6.01: error: { UNC }
ata6.01: configured for UDMA/133


ata6.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ata6.01: failed command: FLUSH CACHE EXT
ata6.01: cmd ea/00:00:00:00:00/00:00:00:00:00/a0 tag 8
ata6.01: status: { DRDY DF ERR }
ata6.01: error: { ABRT }
ata6.01: both IDENTIFYs aborted, assuming NODEV
ata6.01: revalidation failed (errno=-2)
ata6.01: hard resetting link

ata3.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ata3.00: irq_stat 0x40000000
ata3.00: cmd 25/00:00:b1:39:70/00:02:74:00:00/e0 tag 0 dma 262144 in
res 51/40:00:34:3a:70/00:00:74:00:00/00 Emask 0x9 (media error)
ata3.00: status: { DRDY ERR }
ata3.00: error: { UNC }


ata5.02: failed to read SCR 1 (Emask=0x40)
ata5.15: exception Emask 0x10 SAct 0x0 SErr 0x4410000 action 0xe frozen
ata5.15: irq_stat 0x00400000, PHY RDY changed
ata5.15: SError: { PHYRdyChg Handshk DevExch }
ata5.02: exception Emask 0x100 SAct 0x8000 SErr 0x0 action 0x6 frozen
ata5.02: failed command: READ FPDMA QUEUED
ata5.02: cmd 60/00:78:a0:53:11/01:00:00:00:00/40 tag 15 ncq 131072 in
res 40/00:78:a0:53:11/00:00:00:00:00/40 Emask 0x100 (unknown error)
ata5.02: status: { DRDY }


ata1.03: exception Emask 0x10 SAct 0x0 SErr 0x280100 action 0x2 frozen
ata1.03: irq_stat 0x08000000, interface fatal error
ata1: SError: { UnrecovData 10B8B BadCRC }
ata1.03:cmd 25/00:00:c7:d4:56/00:02:05:00:00/e0 tag 0 dma 262144 in
res 50/00:00:c6:d4:56/00:00:05:00:00/e0 Emask 0x10 (ATA bus error)
ata1.03: status: { DRDY }
ata1: hard resetting link

Libata错误信息解析相关推荐

  1. 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件

    导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件 参考文章: (1)导入数据任务(id:373985)异常, 错误信 ...

  2. 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件...

    小程序导入,别人导出的数据库json文件,错误信息如下: 导入数据库失败, Error: Poll error, 导入数据任务(id:373985)异常,错误信息:解析导入文件错误,请检查导入文件内容 ...

  3. 七牛云 播放的时候显示错误信息:视频解析异常 请重试

    七牛云 播放的时候显示错误信息:视频解析异常 请重试 然后安卓手机可以播放,苹果手机播放不了 七牛空间:私有空间 原因: 域名那设置是使用场景:"个人图片",所以我想域名设置成为& ...

  4. 电脑提示显示服务器错误怎么解决,电脑提示错误信息:在主机名解析时通常出现的暂时错误如何解决...

    ‍ 最近有用户和小编反映电脑在接受电子邮件时会出现提示"错误信息:这是在主机名解析时通常出现的暂时错误,它意味着本地服务器没有从权威服务器上收到响应."这个问题主要是DNS解析错误 ...

  5. 信息: 解析 HTTP 请求 header 错误 java.lang.IllegalArgumentException: 在方法名称中发现无效的字符串, HTTP 方法名必须是有效的符号.

    信息: 解析 HTTP 请求 header 错误 Note: further occurrences of HTTP request parsing errors will be logged at ...

  6. 前端错误信息收集(errorEruda)解析

    github:errorEruda移动调试,bug收集工具 img[src],script[src],link[href]请求链接错误监控: document.addEventListener(&qu ...

  7. 电脑应用程序错误怎么办_电脑Windows出错信息解析及解决方案

    注册表错误 Windows 把系统的许多设置都组织起来,放到了注册表中,这样虽然易于管理一些(不用像在DOS和Windows 3.x时面对无穷的.ini文件).可是同时也带来了这样的问题:如果哪个安装 ...

  8. 浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息

    1. 常见的错误信息 make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 -.或者 make 使用 -k 选项执行时. make 执行过程的致命错误都带有前缀字符串 ***.错误信息 ...

  9. 利用JSON-schema校验请求报文,封装转换错误信息,提示前台

    JSON-chema的语法就不讲述了,可自行查阅相关文档. 需求场景:前台请求接口的报文,为防止被非法拦截,需要后台再校验一遍报文合法性,之前都是在java代码中,用java代码来判断,查阅资料找到了 ...

  10. 项目上线,php的错误信息必须不让其在页面中显示给客户,

    对于PHP开发者来 说,一旦某个产品投入使用,应该立即将 display_errors选项关闭,以免因为这些错误所透露的路径.数据库连接.数据表等信息而遭到黑客攻击.但是,任何一个产品在投入使用后,都 ...

最新文章

  1. windows安装MongoDB环境以及在pycharm中配置可视化插件
  2. 代码版本控制工具Concurrent Versions System(CVS)的三种用配置库更新本地工作目录文件的方法
  3. 原作者出局,Faker.js已被社区控制
  4. android自动登录不过登陆界面,【教程】Android 记住密码和自动登录界面的实现
  5. Mysql 查询返回结果空时间错误
  6. 国家一级计算机考试模拟题2012版,2012年计算机等级考试一级上机Word模拟题2
  7. 疫情后全国热门博物馆榜单出炉 第一名竟不是故宫
  8. Android开发技术周报 Issue#38
  9. Linux服务器的软件安装步骤
  10. 关于计算机听课如何做笔记,学霸听课怎么记笔记?5个笔记秘诀,帮你提高听课效率,完成逆袭...
  11. 从苏宁电器到卡巴斯基第34篇:番外篇——晒一晒病毒分析师的桌面(上)
  12. 微信小程序快速达到1000UV流量主开通标准
  13. English-旅游英语及情景对话
  14. python爬虫+网页点击事件+selenium模拟浏览器,爬取选股宝内容
  15. 致创业新人,我网络创业的一些心得。
  16. 黑马程序员之ios学习总结——10 OC语言的构造方法和分类
  17. Java面试——缓存
  18. trc20和erc20、OMNI有什么区别
  19. SQL Server中的约束(六种约束)
  20. mysql8主从复制集群_mysql8主从复制服务器搭建

热门文章

  1. 黄巾之乱-服务器线程控制
  2. 对深度学习程序进行性能优化之前该理解的几个知识点(一)
  3. Makefile与前缀后缀相关函数suffix、basename、addsuffix、addprefix
  4. 电视与电脑连接html线,电视机与电脑连接的方法
  5. 部分软件免管理员权限安装
  6. java对人物画像分级_用户画像,该怎么分析?
  7. iPad的屏幕大小是多少?
  8. 【优化布局】基于粒子群算法求解带出入点的车间布局优化问题附matlab代码
  9. windows server 2008 web服务器搭建
  10. iOS 之强大的WebSocket