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的解析都列出来,如果发生了其他问题,大家都可以按着我的思路去解决问题了。








mpt2sas0: log_info(0x31120100): originator(PL), code(0x12), sub_code(0x0100)及同类问题的追踪的更多相关文章
- perl_nc.pl
#!/usr/bin/perl use strict; use IO::Socket; use IO::Select; use Getopt::Std; my %option;getopts('lp: ...
- C#接口显示实现在实际开发中的作用
摘要 任何一个C#入门的程序员都知道——当一个类型在实现接口的时候,有两种方法实现:显式实现.隐式实现.而且大家也都知道,当一个类型实现的两个接口存在相同成员定义时,显示实现可以解决这种情况. 但是, ...
- php防止表单重复提交
解决方案一:引入cookie机制来解决 提交页面代码如下a.php代码如下: <form id="form1" name="form1" method=& ...
- Keil AGDI Header File
#ifndef __AGDI__INCED___ #define __AGDI__INCED___ //---Revision History: --------------------------- ...
- php-- 避免表单的重复提交
用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. 1.使用客户端脚本 提 ...
- php防止重复提交问题
php防止重复提交问题 用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题.我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交. ...
- USB系列之三:从你的U盘里读出更多的内容
U盘是我们最常使用的一种USB设备,本文继续使用DOSUSB做驱动,试图以读取扇区的方式读取你的U盘.本文可能涉及的协议可能会比较多. 一.了解你的U盘 首先我们用上一篇文章介绍的程序usbvi ...
- 【Perl学习笔记】2. perl中的bless理解
bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. 程序包括5个文件:person.p ...
- perl 函数回调 引用$client->run(sub {$client->sync});
匿名函数引用: [root@wx03 wx]# perl a1.pl CODE(0x2077b30) test [root@wx03 wx]# cat a1.pl $ref= sub {return ...
随机推荐
- 【转】用opencv使摄像头在30fps下捕获1080p的数据
原文:http://blog.sina.com.cn/s/blog_9b493e7b0102xvn6.html opencv可以捕获摄像头数据.如果要读高分辨率和高帧率,可以用如下的设置: captu ...
- vim里添加自动补齐插件,与python 函数补齐
参考 http://www.jb51.net/article/58009.htm 将 # cat ~/.vimrc filetype plugin on let g:pydiction_locati ...
- c/c++ include 头文件的方式
在编写c/c++代码时,#include 头文件有两种方式:一个是#include “文件名”,一个是#include <文件名>.区别在于: 前者在程序编译时系统首先在源程序所在的目录( ...
- protel项目创建
File->New->Project->PCB Project//新建PCB项目 Save Project As... Project->Add New to Project- ...
- ssh外网穿透
不同局域网ubuntu如何进行ssh穿透登录不同局域网ubuntu如何进行ssh穿透登录前言一. 建议安装teamview二. openssh服务三. 打开路由器端口映射四.连接@(ubuntu) 前 ...
- 洛谷P1966 【火柴排队】
题解 P1966 [火柴排队] 说明: 在数学中有个公式: (a1-b1)^2+(a2-b2)^2<(a2-b1)^2+(a1-b2)^2 (你可以自己试着证一下) 两列火柴对应的两根火柴在各列 ...
- SpringBoot四种读取properties文件的方式
环境:IDEA jdk1.8 SpringBoot2.1.4 例,如下默认application.properties文件 一.使用`@ConfigurationProperties`注解将配置文 ...
- mysql数据库的增量备份和全备
还有一种简单的方法 参考 https://blog.csdn.net/u010098331/article/details/50932064 (注意:5.6版本以上新加了gtid 功能,gtid开启之 ...
- CSS3扁平化Loading动画特效
效果预览:http://hovertree.com/texiao/css3/42/ 代码如下: <!doctype html> <html> <head> < ...
- iOS Property 关键字的使用
atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作. atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全 ...