zoukankan      html  css  js  c++  java
  • mpt2sas0: log_info(0x31120100): originator(PL), code(0x12), sub_code(0x0100)及同类问题的追踪

    做存储或者磁盘阵列的经常会遇到linux kernel打印如下信息或者类似的信息,这是什么原因导致的呢?

    mpt2sas0: log_info(0x31120100): originator(PL), code(0x12), sub_code(0x0100)

    其实只要我们解析这个0x31120100的具体含义就可以了。这个log_info是一个U32长度的变量。

    1,首先第一个3是什么意思呢?由下图可知,3代表SAS,凡是和SAS SATA相关的都属于此类。

    所以我们知道了,这个问题和读写SAS SATA硬盘有关系。

    2,接着下面的1是什么意思呢?源代码中可以看到1对应的是PL。PL是什么意思呢?

    0x0对应IOP意思为IO Processor,0x1对应PL意思为Protocol Layer,0x2对应IR意思为Intergrated RAID。因此我们知道了1代表了协议层出现了问题。SAS协议6大层:physical layer物理层,phy layer,link layer链路层,port layer端口层,transport layer传输层,application layer应用层。肯定是某一层出现了问题。

     

    3,接下来12是什么意思呢?查询发现12表示这个命令被终止放弃了,具体原因需要看subcode。总结一下就是当前发送给SAS SATA盘的某个命令因为协议层出现问题被终止了,具体是什么问题请我们看subcode。

    4,那好,那我们就来看一下subcode是怎么描述的吧,subcode是0x0100代表什么意思呢?

    哦,原来是读写的时候申请open连接的时候open失败,而且失败的原因不是其他几种已经列出来的。那我们就来分析一下吧:

    0x0101说明,要open的地址不存在,通过查看SAS协议,得知如果地址不存在,就是以下3种情况:意思就是1,硬盘已经不在了,但是系统还没来得及踢,2,给自身所在的宽端口发送命令会失败。如果对硬盘发命令就不会导致2这种失败,3,SATA盘没有正常的返回D2H FIS。一些异常的SATA盘会有这个问题,正常情况下,识别到SATA盘以后,SATA盘需要返回一个D2H来标明自己的身份,如果没有返回一定是遇到了什么异常,就不能正常响应其他的命令了。

    0x0102说明:速率错了。比如某个SATA硬盘是3Gbps的传输速率,而你要用6Gbps去连接,肯定不可以。

    0x0103说明:还是速率错了,比如你自身IOC卡都不支持6Gbps,你还用6Gbps去发送,肯定不可以。

    0x0104说明:收到了break。什么情况下才会收到break?是当你open了很长一段时间对方不响应,你自己为了停止等待主动发送break去终止。说明你open的对象可能卡住了,忙

    0x0114说明:因为Zone,就是说你自己和你的目标不在一个分区内,所以无法连接。这个分区是Expander将自身的phy分成几个分区,各个分区都互不相通。只有Zone0可以访问其他区

    0x0115,0x0116,0x0117都是保留的不会发生。

    0x011A说明:说明目标设备一直在忙,让你重试,结果你重试都达到阀值了,还没成功。

    0x011B和0x011A类似

    0x011C表示你open人家,等到时间耗尽了都没反应。

    那0x0100是什么意思呢?下面的原因已经很多了,还有什么留给0x0110呢?SAS协议上还有几种OPEN_REJECT (BAD DESTINATION),OPEN_REJECT (WRONG DESTINATION)。但是这些在应用中一般不会发生,除非我们自己调试用仿真器去指定错误的地址的时候才会发生,那还有什么原因呢?想来想去只有是链路bit错误导致的了。

    这是一个很重要的问题,链路不稳定,导致你发送的bit发生了抖动,对方接收到之后不认识你发送的到底是什么,自然不会响应命令了。

    所以0x31120100可以解释为,你在读写磁盘的时候,因为链路异常,你发送的open不能被接受,导致你这个命令被终止了。

    这会导致什么问题呢?因为当你命令发生错误的时候驱动会重试,所以重试的时候问题可能被修复了。但是如果链路特别不稳定,一直修复不好,那就会导致掉盘了。

    好了这个问题解决了,那我把所有的code的解析都列出来,如果发生了其他问题,大家都可以按着我的思路去解决问题了。

  • 相关阅读:
    CGLib实现不同类中同名不同类型属性复制
    stream 伪复用实现
    年终盘点 | 2020年,国内私有云正式进入3.0时代
    高危端口135,137,138,139,445,1025,2475,3127,6129,3389,593
    在jsp引入js失败,提示404
    安全漏洞扫描
    Go 实现的文件行数统计工具
    .NET Core 获取域名 DNS 解析记录
    .NET Core 操作 Windows 注册表
    .NET MongoDb BsonDocument 序列化
  • 原文地址:https://www.cnblogs.com/StarStor/p/3519520.html
Copyright © 2011-2022 走看看