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 ...
随机推荐
- LINUX 学习笔记 账号与群组的管理
LINUX 账号与群组的管理 UID:UserID 保存文件:/etc/passwd GID:GroupID 保存文件:/etc/group /etc/passwd 文件结构 一行代表一个账号,里面还 ...
- Application对象及常用方法
Application对象: 服务器启动后,就产生了这个application对象.当一个客户访问服务器上的一个JSP页面时,JSP引擎为该客户分配这个 application对象,当客户在所访问的网 ...
- VB Mouse Pointer
- Linux 驱动——Button8(输入子系统)
输入子系统由驱动层.输入子系统核心.事件处理层三部分组成.一个输入事件,如鼠标移动.键盘按下等通过Driver->Inputcore->Event handler->userspac ...
- Mac OS本地,XAMPP,出现 “phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接”错误
phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 原因一:有可能是因为修改 ...
- 关于toLocaleDateString的坑
https://segmentfault.com/a/1190000009391790
- javamail发邮件
使用JavaMail发送一封简单邮件的步骤:(1)创建代表邮件服务器的网络连接信息的Session对象.(2)创建代表邮件内容的Message对象(3)创建Transport对象.连接服务器.发送Me ...
- SQLyog 报错2058 :连接 mysql 8.0.11 解决方法
下载新版的 mysql 8.0.11 安装. 为了方便安装查看,我下载了sqlyog 工具 连接 mysql 配置新连接报错:错误号码 2058,分析是 mysql 密码加密方法变了. 解决方法:wi ...
- vscode 最新中文设置
切换中文 首先看商店里有没有chinese language那个中文插件. 在ctrl + shift +p 搜索configure language,然后配置locale如下即可配置中文.
- Python 特殊方法
1 _int_ 定义在类中,创建类的实例的时候回先调用此方法,用于对该类的一些初始化(例如变量初始化) 2 _str_ def _str_(self): return "this is a ...