Libata错误信息解析
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/133ata6.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 linkata3.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错误信息解析相关推荐
- 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件
导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件 参考文章: (1)导入数据任务(id:373985)异常, 错误信 ...
- 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件...
小程序导入,别人导出的数据库json文件,错误信息如下: 导入数据库失败, Error: Poll error, 导入数据任务(id:373985)异常,错误信息:解析导入文件错误,请检查导入文件内容 ...
- 七牛云 播放的时候显示错误信息:视频解析异常 请重试
七牛云 播放的时候显示错误信息:视频解析异常 请重试 然后安卓手机可以播放,苹果手机播放不了 七牛空间:私有空间 原因: 域名那设置是使用场景:"个人图片",所以我想域名设置成为& ...
- 电脑提示显示服务器错误怎么解决,电脑提示错误信息:在主机名解析时通常出现的暂时错误如何解决...
最近有用户和小编反映电脑在接受电子邮件时会出现提示"错误信息:这是在主机名解析时通常出现的暂时错误,它意味着本地服务器没有从权威服务器上收到响应."这个问题主要是DNS解析错误 ...
- 信息: 解析 HTTP 请求 header 错误 java.lang.IllegalArgumentException: 在方法名称中发现无效的字符串, HTTP 方法名必须是有效的符号.
信息: 解析 HTTP 请求 header 错误 Note: further occurrences of HTTP request parsing errors will be logged at ...
- 前端错误信息收集(errorEruda)解析
github:errorEruda移动调试,bug收集工具 img[src],script[src],link[href]请求链接错误监控: document.addEventListener(&qu ...
- 电脑应用程序错误怎么办_电脑Windows出错信息解析及解决方案
注册表错误 Windows 把系统的许多设置都组织起来,放到了注册表中,这样虽然易于管理一些(不用像在DOS和Windows 3.x时面对无穷的.ini文件).可是同时也带来了这样的问题:如果哪个安装 ...
- 浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息
1. 常见的错误信息 make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 -.或者 make 使用 -k 选项执行时. make 执行过程的致命错误都带有前缀字符串 ***.错误信息 ...
- 利用JSON-schema校验请求报文,封装转换错误信息,提示前台
JSON-chema的语法就不讲述了,可自行查阅相关文档. 需求场景:前台请求接口的报文,为防止被非法拦截,需要后台再校验一遍报文合法性,之前都是在java代码中,用java代码来判断,查阅资料找到了 ...
- 项目上线,php的错误信息必须不让其在页面中显示给客户,
对于PHP开发者来 说,一旦某个产品投入使用,应该立即将 display_errors选项关闭,以免因为这些错误所透露的路径.数据库连接.数据表等信息而遭到黑客攻击.但是,任何一个产品在投入使用后,都 ...
最新文章
- windows安装MongoDB环境以及在pycharm中配置可视化插件
- 代码版本控制工具Concurrent Versions System(CVS)的三种用配置库更新本地工作目录文件的方法
- 原作者出局,Faker.js已被社区控制
- android自动登录不过登陆界面,【教程】Android 记住密码和自动登录界面的实现
- Mysql 查询返回结果空时间错误
- 国家一级计算机考试模拟题2012版,2012年计算机等级考试一级上机Word模拟题2
- 疫情后全国热门博物馆榜单出炉 第一名竟不是故宫
- Android开发技术周报 Issue#38
- Linux服务器的软件安装步骤
- 关于计算机听课如何做笔记,学霸听课怎么记笔记?5个笔记秘诀,帮你提高听课效率,完成逆袭...
- 从苏宁电器到卡巴斯基第34篇:番外篇——晒一晒病毒分析师的桌面(上)
- 微信小程序快速达到1000UV流量主开通标准
- English-旅游英语及情景对话
- python爬虫+网页点击事件+selenium模拟浏览器,爬取选股宝内容
- 致创业新人,我网络创业的一些心得。
- 黑马程序员之ios学习总结——10 OC语言的构造方法和分类
- Java面试——缓存
- trc20和erc20、OMNI有什么区别
- SQL Server中的约束(六种约束)
- mysql8主从复制集群_mysql8主从复制服务器搭建