首页 > 其他分享 >ata1.00: exception Emask 0x0 SAct 0x8000000 SErr 0x0 action 0x6 frozen 硬盘问题

ata1.00: exception Emask 0x0 SAct 0x8000000 SErr 0x0 action 0x6 frozen 硬盘问题

时间:2024-03-14 10:13:05浏览次数:30  
标签:exception SErr 错误 0x0 00 SATA 寄存器 Emask

测试发现嵌入式linux vfat 文件系统的sata固态硬盘偶然启动时出现异常打印如下:

ata1.00: exception Emask 0x0 SAct 0x8000000 SErr 0x0 action 0x6 frozen
ata1.00: failed command: READ FPDMA QUEUED
ata1.00: cmd 60/08:d8:00:00:00/00:00:00:00:00/40 tag 27 ncq 4096 in
res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.00: status: { DRDY }
ata1: hard resetting link
ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
ata1.00: configured for UDMA/133
ata1.00: device reported invalid CHS sector 0
ata1: EH complete
sda:
sda: detected capacity change from 0 to 512110190592
sd 0:0:0:0: [sda] Attached SCSI disk

寻找说明,参考Libata error messages - ata Wiki (kernel.org)

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

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

 

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

exception Emask 0x0 SAct 0x8000000 SErr 0x0 action 0x6 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次

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

cmd 60/08:d8:00:00:00/00:00:00:00:00/40 tag 27 ncq 4096 in

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

  • 60:命令号?
  • 08:d8:00:00:00:(第一个)Feature : 需查询源文件
  • 00:00:00:00:00:(第二个)HOB Feature : HOB NSect : HOB LBA L : HOB LBA M : HOBLBA H
  • a0:设备/头
  • tag : NCQ tag 号, NCQ如果没有激活或不适用,则为0。

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

res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)

5. ATA状态扩展

status: { DRDY }

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

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

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

error: { ICRC ABRT }

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

7. 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:设备存在状态改变

8. 关于第二行failed command: READ FPDMA QUEUED

    参考关于Linux报错解决方案:READ FPDMA QUEUED-CSDN博客failed command: READ FPDMA QUEUED - 裸睡的猪 - 博客园 (cnblogs.com)

 可能跟内核对SSD硬盘的兼容相关。

    强制关机导致内核提示

     FAT-fs (mmcblk0): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
      FAT-fs (sda): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

 

综上,未确认cmd具体含义,仅从简单信息看,似乎有超时发生,且发生了硬件重连;

最早有发生掉电锁盘为只读的情况,所以启动脚本添加“umount 再 mount硬盘”指令,之后才偶尔出现以上信息,目前看无太大影响,准备换ext4文件格式测试。

 

此贴也记录了一些状态信息:ata1.01: status: { DRDY } - Ubuntu中文论坛

标签:exception,SErr,错误,0x0,00,SATA,寄存器,Emask
From: https://www.cnblogs.com/zensi/p/18072192

相关文章

  • windbg 调试 c++ std::exception
    由于c++std::exception在windbg里面调用堆栈显示不正确,可以通过加载了系统pdb和软件pdb后,!analyze-v可以分析出来,所有需要配置系统pdb。1、把exe,pdb放到同一个目录下。2、加载dmp文件(拖动dmp文件到windbg)。3、设置pdb路径:File->SymbolFilePath,比如D:\Desktop\3dLayer,记得加......
  • Java 错误 java.net.ConnectException
    本篇文章介绍了Java中的java.net.ConnectException错误。Java中的java.net.ConnectException错误java.net.ConnectException是使用网络时最常见的异常。它主要发生在客户端、应用程序和服务器之间建立TCP连接时。它是一个经过检查的应用程序,可以使用try-cat......
  • Flink实时写Hudi报NumberFormatException异常
    Flink实时写Hudi报NumberFormatException异常问题描述在Flink项目中,针对Hudi表xxxx_table的bucket_write操作由于java.lang.NumberFormatException异常而从运行状态切换到失败状态。异常信息显示在解析字符串"ddd7a1ec"为整数时出现了问题。报错如下:bucket_write:......
  • xss.haozi.me靶场“0x0B-0x12”通关教程
    君衍.一、0x0B实体编码绕过二、0x0Cscript绕过三、0x0D注释绕过四、0X0Eſ符号绕过五、0x0F编码解码六、0x10直接执行七、0x11闭合绕过八、0x12闭合绕过一、0x0B实体编码绕过我们首先构造payload进行测试:这里我们可以看到全部转为了大写,查看源码:function......
  • 开发中编译时期异常Exception和运行时期异常RuntimeException如何选择
    从实际开发角度来看不管使用哪种都是可以的,业界标准如下如果问题特别严重,开发人员很容易犯,强烈的提醒开发人员注意,那就抛编译时期异常,写完编译不通过就会报错,而后进一步对其处理如果问题不严重,开发人员一般不会出现这种问题,那就抛出运行时期异常,编译通过,后续报错再处理自......
  • STM32 LwIP学习过程问题总结(一):LwIP ping不通,抓包发现ICMP校验和为0x0000
    一、问题今天在将之前的STM32LwIP1.4.1版本程序移植到2.1.2版本上时,发现ping不同,但是开发板有ICMP回复包,黄颜色警告checksum为0x0000。说明LwIP移植应该是没问题,数据处理这一块出错了。 在网上找了下相关的错误,ST论坛有个问题和我这个一样。HardwareIPv4checksumonanST......
  • [springboot] SpringBoot启动成功后因actuator健康检测报:Redis health check failed/
    0序背景:项目中引入了spring-boot-starter-actuator健康检测模块<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>1问题描述确认微服务刚启动后,因K8S集群周期性定时(默认每隔1......
  • java.net.UnknownHostException: api.weixin.qq.com解决办法
    java.net.UnknownHostException: api.weixin.qq.comat java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:175)at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)at java.net.Socket.connect(Socket.java:546)at sun.security.ssl.SSLSo......
  • SQLIntegrityConstraintViolationException: Cannot add or update a child row: a fo
    异常原因:两张表存在外键关联并且有级联操作,级联更新或级联删除等1.(此处为)设置的外键与另一个表中的唯一索引列(一般是主键)中的值不匹配2.添加的外键列与另一个表的唯一索引列(一般是主键)的数据类型不同......
  • Maxwell启动问题java.lang.RuntimeException: error: unhandled character set ‘utf8
    使用Maxwell碰到问题,查看日志后显示大概是这个问题java.lang.RuntimeException:error:unhandledcharacterset‘utf8mb3‘。网上查找,看了经验贴https://blog.csdn.net/weixin_44943845/article/details/126860077,知道原因是这个:但是不太想重新下载源码进行打包,于是决定按......