PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

非玄学LSI SAS2008 HBA卡混刷/救砖法

[复制链接]
Akula 发表于 2020-5-19 18:08 | 显示全部楼层 |阅读模式
点击数:1633|回复数:6
本帖最后由 Akula 于 2020-5-19 18:25 编辑

虽然NVME时代这种SAS的过时货已经不流行了,但是正好手上有张思科的UCS RAID SAS 2008M-8i,在更新固件的时候出了问题变砖了,就花了点时间研究了一下,就稍微分享下吧。众所周知,SAS2008这芯片搭配不同固件可以做两类卡,MegaRAID架构固件的低端RAID卡或者Fusion-MPT架构固件的HBA卡,作为HBA卡还有IT/IR固件之分,相互之间混刷也有很多教程,不过那个最简单的用9240混刷的教程对不少卡并不适用,而各种换用特定版本的sas2flash刷新工具按特定的步骤固件来回刷一顿操作然后就刷好的玄学方法经常只对特定的卡有用,这里说的是一个比较通用的办法,主要参考的是那位用hack过的sas2flash刷富士通SAS2008卡的marcan的研究成果。
我手上的UCS RAID SAS 2008M-8i大概长这样,网上随便扒了张图

根据查到的资料,原卡应该是iMR固件的,我这张买来是P17的IT固件,根据只有4M的Flash容量还有Flash的焊接痕迹来看,也许是出这批卡的人实在没办法混刷成MPT固件就拆了原来的16M的Flash换上写好MPT固件的新Flash搞出来的,然后有一天手贱想更新了一下P20固件,然后就死也刷不上了,包括用https://marcan.st/2016/05/crossflashing-the-fujitsu-d2607/这里面所说的我也曾经成功试过用来刷富士通SAS2008卡的办法同样刷不上,然后这卡就被扔在一边了,最近捡起来研究了一下,发现这位marcan大神为SAS2008写了个新的软件,经过测试完美解决问题,下面是说明,注意这些要在Linux下操作,所以最好能够有一点Linux的知识

用到的工具主要有下面两个
一个是lsiutil,这个LSI Utility是以前LSI出的工具包,理论上支持所有用Fusion MPT架构固件的卡,功能很全面,自然也包括刷固件,用这玩意刷固件最大的优点就是完全不需要考虑ID是否match,缺点是必须是一张可用的已经是MPT固件的卡才能认出来,iMR固件的卡不认,没有固件的卡自然也不认
还有一个是lsirec(Git地址https://github.com/marcan/lsirec),marcan大神写的程序包,包括lsirec主程序,具备导入导出SBR还有最关键的hostboot功能,另加一个用来编辑SBR的Python脚本
LSI的卡上存储空间包括几部分,内含固件和Option-ROM等内容的主Flash,包含卡基础信息的SBR,记录日志的NVSRAM,对于LSI的卡来说,即使以上几部分全清空卡仍然能被系统识别,只是没法用而已。
在操作之前,请先记录下卡的SAS ID,一般来说卡上有个贴纸记录这个16位ID,没有的话可以参考其他教程如何获取,然后把卡插在一台跑Linux系统的电脑上,我用的是比较顺手的CentOS,当然Debian系的应该也没啥问题,
首先确定几个要用的包python3 unzip pciutils gcc gcc-c++都已经安装上了,没有的话先安装下,用yum包管理器的话那就这样
  1. yum install -y python3 unzip pciutils gcc gcc-c++
复制代码
接下来下载要用的软件,解包并编译
  1. wget [url]https://github.com/marcan/lsirec/archive/master.zip[/url]
  2. wget [url]https://github.com/exactassembly/meta-xa-stm/raw/master/recipes-support/lsiutil/files/lsiutil-1.72.tar.gz[/url]
复制代码
注意上面url的括号去掉,论坛自动加的而且还不能删
  1. tar -zxvvf lsiutil-1.72.tar.gz
  2. unzip master.zip
  3. cd lsirec-master
  4. make
  5. chmod +x sbrtool.py
  6. cp -p lsirec /usr/bin/
  7. cp -p sbrtool.py /usr/bin/
  8. cd
  9. cd lsiutil
  10. make -f Makefile_Linux
复制代码

编译完成没啥问题之后就可以开整了,如果只是IT换IR或者IR换IT的话,直接跳到后面lsiutil工具刷新固件部分,否则首先用lsirec对SBR进行操作
首先看一下卡的PCI Dev ID,我们需要Bus ID来进行后面的操作
  1. lspci -Dmmnn | grep LSI
复制代码

上面的0000:01:00.0就是

然后让卡进入halt状态
  1. lsirec 0000:01:00.0 unbind
  2. lsirec 0000:01:00.0 halt
复制代码



完事之后读取卡的SBR到文件,这边我是把卡的SBR保存为sbr.bin
  1. lsirec 0000:01:00.0 readsbr sbr.bin
复制代码
这是一个二进制文件,用Python脚本解读成配置文件,然后就可以用喜欢的编辑器编辑了,我这边用的是vi
  1. sbrtool.py parse sbr.bin sbr.cfg
复制代码

简单解读下SBR,这个是一个9211-8i标准的SBR,第1、2、3行跟那个厂产的卡有关系,比如Dell的就完全不一样PCIVID的1000代表LSI
PCIPID的0072代表SAS2008芯片Fusion-MPT卡,对于原本是SAS2008芯片MegaRAID的卡来说,PID是0073,混刷IT/IR固件需要改成0072
HwConfig意义不明,目前看至少有两种0107和0104,大多是0107,某些OEM卡是0104
SubsysVID和SubsysPID这两个代表具体卡的型号,1000 3020代表9211-8i,后面会提供一些主要卡型号的ID
下面几行在见过的所有SBR里面都是0
Interface这行00代表IT/IR固件,01代表iMR,混刷IT/IR固件需要改成00
再下面几行我见过的SBR里面也是一样的
最后的Unk4a有10和00两种,具体代表什么谁都不知道
按Insert键进入编辑模式,编辑完按Esc键输入wq回车保存
编辑好SBR之后用Python脚本翻译回二进制文件,这边保存成sbr-mod.bin
  1. sbrtool.py build sbr.cfg sbr-mod.bin
复制代码

下面刷入我们编辑后的SBR
  1. lsirec 0000:01:00.0 writesbr sbr-mod.bin
复制代码

刷入后稍微等一会我们就可以用自己选择的固件先把卡给boot起来进入可操作状态,首先确认打开了HugeTLB
  1. echo 16 > /proc/sys/vm/nr_hugepages
复制代码
然后进行hostboot操作,记得先把需要用的IR或者IT固件先下在硬盘上,或者用WinSCP先传过来,我这边用的是9211-8i的IT固件
  1. lsirec 0000:01:00.0 hostboot 2118it.bin
复制代码

一切正常的话如上图所示,显示IOC Host Boot successful
刷新一下
  1. lsirec 0000:01:00.0 rescan
复制代码

等待片刻我们应当能在LSI Utility工具中识别到我们的卡,使用-e专家模式打开lsiutil
  1. lsiutil -e
复制代码
进入lsiutil后如图所示

我们的卡可以在图上找到,输入1选择我们的卡

输入33清除原有固件,先选择选项3清除Flash,再选择选项8清除厂商设置,然后选择0回主界面
在主界面输入2,根据提示输入固件文件名刷入固件,刷完回主界面在主界面输入18,写入SAS WWID
如果需要刷入Option ROM的话在主界面输入4,根据提示刷入Option ROM
刷完重启,enjoy!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1代金券 +50 收起 理由
石头 + 50

查看全部评分

nighttob 发表于 2020-5-19 22:27 | 显示全部楼层
本帖最后由 nighttob 于 2020-5-19 22:29 编辑

每当(?)我们的板级维修商找我说FW刷不上去的时候,我都说发给我来刷,然后没过多久他们就说换了个Flash就好了
(心中万马奔腾)能换Flash的话还来找我干啥

当年折腾这玩意也就是不知道sbr.bin是怎么解的,不然svid和spid还不是想怎么改怎么改
hwconfig和其它unkxx感觉跟HW layout,比如板子是不是异型卡或者VRD方案是不是有关系?
正好我有手里这个Intel RAID Mezz的SBR,LZ如果有心情可以解一个对比看看,我是懒得搭环境折腾了……


CentOS+PuTTY+vi刷FW套装患者表示很赞

如果哪天我闲得无聊了试试给我们OEM的MR3.5卡刷成公版Tri-Mode FW

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
Akula  楼主| 发表于 2020-5-19 23:28 | 显示全部楼层
nighttob 发表于 2020-5-19 22:27
每当(?)我们的板级维修商找我说FW刷不上去的时候,我都说发给我来刷,然后没过多久他们就说换了个Flash就好 ...

解读SBR倒是找个二进制编辑软件就行了,那个脚本主要功能其实还是方便编辑,几个位置的含义也是那位marcan研究出来的
以你这个SBR为例,大概是这样


0x00到0x0b这个跟卡有关系,但是已知的除了Dell的卡以外包括各种原厂卡OEM卡貌似都是这组

0x0c到0x0f就是PCI ID 1000 0073,SAS2008 iMR固件的卡
0x12就是HwConfig,大多数是07,我所知道的卡里面你这块,M1015还有富士通的那块是04
0x14到0x17是Sub ID,8086 350C,RMS2AF080的Sub ID
0x40就是Interface,00代表IT/IR,10代表iMR
0x41到0x49已知的所有卡貌似都一样
0x4a有00和10两种,大多是10,已知Dell的H200是00
0x4b是校验码
接下来的76位就是前76位重复一遍,再后面全是FF的地方某些卡会写上SAS ID
大体上就是这样
设备ID方面Linux的pci.ids库里面有很多,但是也并不全,可以参考下
        0072  SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon]
                1000 3040  9210-8i
                1000 3080  9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA]
                1000 30b0  9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA]
                1028 1f1c  6Gbps SAS HBA Adapter
                1028 1f1d  PERC H200 Adapter
                1028 1f1e  PERC H200 Integrated
                1028 1f1f  PERC H200 Modular
                1028 1f20  PERC H200 Embedded
                1028 1f22  PERC H200 Internal Tape Adapter
# Fujitsu D2607 SAS2008 HBA controller
                1734 1177  HBA Ctrl SAS 6G 0/1 [D2607]
                8086 350f  RMS2LL040 RAID Controller
                8086 3700  SSD 910 Series
        0073  MegaRAID SAS 2008 [Falcon]
                1000 9240  MegaRAID SAS 9240-8i
                1000 9241  MegaRAID SAS 9240-4i
                1000 92a0  MegaRAID SAS 9220-8i
                1014 03b1  ServeRAID M1015 SAS/SATA Controller
                1014 040d  ServeRAID M1115 SAS/SATA Controller
                1028 1f4e  PERC H310 Adapter
                1028 1f4f  PERC H310 Integrated
                1028 1f50  PERC H310 Mini Blades
                1028 1f51  PERC H310 Mini Monolithics
                1028 1f52  PERC H310 Embedded1
                1028 1f53  PERC H310 Embedded2
                1028 1f54  PERC H310 Reserved
                1028 1f78  PERC H310
                1054 3035  LSI MegaRAID SAS 9240-8i
                1137 0072  2004 iMR ROMB
                1137 0073  2008 ROMB
                1137 00b0  UCSC RAID SAS 2008M-8i
                1137 00b1  UCSC RAID SAS 2008M-8i
                1137 00c2  UCS E-Series Double Wide
                1137 00c3  UCS E-Series Single Wide
                15d9 0400  Supermicro SMC2008-iMR
                1734 1177  RAID Ctrl SAS 6G 0/1 (D2607)
                17aa 1051  ThinkServer RAID 510i
                8086 350d  RMS2AF040 RAID Controller
                8086 9240  RAID Controller RS2WC080
                8086 9241  RAID Controller RS2WC040


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
nighttob 发表于 2020-5-20 07:42 | 显示全部楼层
当年刷这个时候并不懂这个,所以目的达到了也就没再研究了
Device ID这个找驱动里面的inf看也是有的
eraser666 发表于 2020-5-21 19:26 | 显示全部楼层
挺好的教程,想着我的那个皓龙板子上面还有个SAS2008,也是刷成IT了
haierccc 发表于 2020-5-22 23:26 | 显示全部楼层
厉害!                                    
eterfinity 发表于 2020-5-23 08:15 | 显示全部楼层
本帖最后由 eterfinity 于 2020-5-23 08:30 编辑

使用一堆无缓存的卡作为工具  
经常还要频繁互刷 iMR iT iR   
主要是sas盘raid异常后数据恢复  
用好些年了  谈谈感受

数据恢复是没办法  只有iT模式遇到坏道卡不会乱滴滴叫
无缓存的卡性能上还是iMR固件的Raid0最好  不是好一点点 是好很多
对付2家超融合限制需要HBA卡的   
vsan就自己改json文件或者直接忽略   
s2d就用0x20D00参数

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部