做存储或者磁盘阵列的经常会遇到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的解析都列出来,如果发生了其他问题,大家都可以按着我的思路去解决问题了。

mpt2sas0: log_info(0x31120100): originator(PL), code(0x12), sub_code(0x0100)及同类问题的追踪的更多相关文章

  1. perl_nc.pl

    #!/usr/bin/perl use strict; use IO::Socket; use IO::Select; use Getopt::Std; my %option;getopts('lp: ...

  2. C#接口显示实现在实际开发中的作用

    摘要 任何一个C#入门的程序员都知道——当一个类型在实现接口的时候,有两种方法实现:显式实现.隐式实现.而且大家也都知道,当一个类型实现的两个接口存在相同成员定义时,显示实现可以解决这种情况. 但是, ...

  3. php防止表单重复提交

    解决方案一:引入cookie机制来解决 提交页面代码如下a.php代码如下: <form id="form1" name="form1" method=& ...

  4. Keil AGDI Header File

    #ifndef __AGDI__INCED___ #define __AGDI__INCED___ //---Revision History: --------------------------- ...

  5. php-- 避免表单的重复提交

    用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. 1.使用客户端脚本 提 ...

  6. php防止重复提交问题

    php防止重复提交问题 用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. ...

  7. USB系列之三:从你的U盘里读出更多的内容

    U盘是我们最常使用的一种USB设备,本文继续使用DOSUSB做驱动,试图以读取扇区的方式读取你的U盘.本文可能涉及的协议可能会比较多. 一.了解你的U盘    首先我们用上一篇文章介绍的程序usbvi ...

  8. 【Perl学习笔记】2. perl中的bless理解

    bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. 程序包括5个文件:person.p ...

  9. perl 函数回调 引用$client->run(sub {$client->sync});

    匿名函数引用: [root@wx03 wx]# perl a1.pl CODE(0x2077b30) test [root@wx03 wx]# cat a1.pl $ref= sub {return ...

随机推荐

  1. python常见的数据转化函数

    python常用类型转换函数 函数格式 使用示例 描述 int(x [,base]) int("8")   可以转换的包括String类型和其他数字类型,但是会丢失精度       ...

  2. 《A Knowledge-Grounded Neural Conversation Model》

    abstract 现在的大多数模型都可以被应用在闲聊场景下,但是还没有证据表明他们可以应用在更有用的对话场景下.这篇论文提出了一个知识驱动的,带有背景知识的神经网络对话系统,目的是为了在对话中产生更有 ...

  3. java 第三周作业

    1.P132分析: long before = System.currentTimeMillis(); //返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1 ...

  4. wav文件系列_2_Python实现读写

    本文介绍了 Python 实现音频读写的方法.Python wave 模块提供便捷的 wav 文件操作.该模块并不支持压缩与解压,但支持单声道/立体声的转换. 参考: [1] wave — Read ...

  5. Oracle中计算两个日期时间的差

    --方法1 select floor((sysdate - to_date('2006-09-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss'))) as sDays fro ...

  6. L2-007 家庭房产 (25 分)

    L2-007 家庭房产 (25 分)   给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤),随后N行,每行按下 ...

  7. 机器视觉:MobileNet 和 ShuffleNet

    虽然很多CNN模型在图像识别领域取得了巨大的成功,但是一个越来越突出的问题就是模型的复杂度太高,无法在手机端使用,为了能在手机端将CNN模型跑起来,并且能取得不错的效果,有很多研究人员做了很多有意义的 ...

  8. pyCharm django 中新加app

    1.在manage.py@djangotest中输入命令: 1.startapp   realnameauth   ---新建一个app,名字为realnameauth 2.在 django 项目中的 ...

  9. AVL Tree Deletion

    Overview 知识点: 1. delete函数的signature public AVLTreeNode Delete(AVLTreeNode node, int key) 2. 算法,如何删除节 ...

  10. 配置两个Hadoop集群Kerberos认证跨域互信

    两个Hadoop集群开启Kerberos验证后,集群间不能够相互访问,需要实现Kerberos之间的互信,使用Hadoop集群A的客户端访问Hadoop集群B的服务(实质上是使用Kerberos Re ...