首页 > 其他分享 >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-07-01 10:58:33浏览次数:1  
标签:exception SErr 错误 0x0 00 SATA 寄存器 Emask

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

测试发现嵌入式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/FireLife-Cheng/p/18277617

相关文章

  • 关于Java中 因取消装箱可能产生 'NullPointerException' 的原因
    一.什么是装箱,什么是拆箱?装箱:将值类型转换为引用数据类型。拆箱:将引用数据类型转换为值类型。说白了就是Integer与int数据类型之间的转换二.为什么会有自动一说呢?我们都知道,java是一个面向对象的语言。因此包括数字、字符、日期、布尔值等等再内的一切都是对象。但是对......
  • java java.nio.channels.ClosedChannelException
    java.nio.channels.ClosedChannelException报错信息"java.nio.channels.ClosedChannelException"表示尝试在一个已经关闭的通道上进行操作。在JavaNIO中,通道(Channel)表示一个可以进行IO操作的对象,例如读取或写入数据。当你尝试在一个已经被关闭的通道上进行读取、写入或者其他......
  • 【报错】IllegalStateException: The remote endpoint was in state [TEXT_FULL_WRITI
    一、报错内容java.lang.IllegalStateException:Theremoteendpointwasinstate[TEXT_FULL_WRITING]whichisaninvalidstateforcalledmethod atorg.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1234) a......
  • 定位接口 MissingServletRequestParameterException: Required String parameter '' i
    @RequestParam与实际传参对不上导致,会抛出异常 可以定义一个MissingServletRequestParameterException的异常处理,获取、打印出要的接口信息importcn.hutool.core.util.ObjectUtil;importcom.byd.common.api.vo.Result;importlombok.extern.slf4j.Slf4j;importorg.sp......
  • Flink报错 java.lang.IllegalArgumentException: too many arguments
    错误信息/Library/Java/JavaVirtualMachines/zulu-21.jdk/Contents/Home/bin/java-javaagent:/Users/liuyu/Applications/IntelliJIDEAUltimate.app/Contents/lib/idea_rt.jar=51748:/Users/liuyu/Applications/IntelliJIDEAUltimate.app/Contents/bin-Dfile.encoding=UTF-......
  • 【异常】nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/
    原因是版本冲突。以下我原本使用的版本信息<!--SpringBootRedis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.1.8.RELEASE</version><......
  • 【AOP问题处理】:AopContext.currentProxy()方法异常处理:java.lang.IllegalStateExcept
    原因是代理对象内部方法的调用不会触发AOP代理。先看代码:自定义了一个注解:importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;//使用元注解......
  • 关于RuntimeException与事务
    1.spring的默认回滚策略当采用@Transactional注解方法抛出RuntimeException时,spring会默认回滚事务对于检查型异常(即不是RuntimeException子类或其子类),spring默认不会回滚,除非明确指定@Transactional(rollbackFor=MyException.class)2.简化代码:使用运行时异常不再需要为每一......
  • KSQLException: The authentication type 10 is not supported.
    Java应用使用人大金仓数据库启动时报错:Causedby:com.kingbase8.util.KSQLException:Theauthenticationtype10isnotsupported.Checkthatyouhaveconfiguredthesys_hba.conffiletoincludetheclient'sIPaddressorsubnet,andthatitisusinganauthenti......
  • 【踩坑】.NET 8.0 自定义IExceptionHandler不生效
    中间件实现异常处理在ASP.NETCore里,我们可以使用中间件(Middleware)实现全局的异常处理。如内置的异常处理中间件UseExceptionHandlerapp.UseExceptionHandler(appError=>{appError.Run(asynccontext=>{context.Resp......