Oracle 一体机 infiniband 交换机闪存寿命问题

饶冰,现就职于北京海天起点,拥有十余年Oracle产品服务及实施经验,曾供职于Oracle University和Oracle Support Service部门。拥有OCM,Exadata,EM12c,WebLogic12c等多项认证。目前主要负责基于Oracle产品的解决方案研发和实施工作,涉猎行业有电信、政府、金融、能源、制造等等。

问题描述

Oracle的很多一体机都使用infiniband交换机,比如EXADATA,EXALOGIC,BDA等等,Oracle(sun)的infiniband交换机的核心是使用的控创(kontron)的单片机, 以EXALOGIC X4-2中的Infiniband交换机为例,是使用的kontron的 nanoETXexpress-SP 型号的单片机。

下面就是这个东西的照片,实际上和一张信用卡的大小一样:

对于Oracle DBA或者一体机的运维人员来讲,这个已经不是我们的专业领域了,不过我们不用很深入地研究,只要能够解决问题就够了。

作为外行,我们可以把这个单片机理解为一个”电脑”,极简版的”电脑”,这个电脑有CPU(intel Atom),内存,”硬盘”,”硬盘”是一个512M的闪存,交换机的固件,或者说交换机的操作系统,就安装在这个闪存上。既然是闪存,那么理论上,这个闪存的使用寿命到了以后,我们就需要更换它。

幸运的是,这种单片机用的闪存都是SLC类型的,寿命很长,再加上交换机大多数情况下基本没什么写操作,所以这个闪存一般来讲在整个交换机报废之前是不会”寿命到期”的。

不幸的是,在某些特殊场景,交换机会存在大量的写操作,导致闪存寿命消耗过快,那么这就是问题了。比如下面这篇文章中提到的情况:Exalogic Virtual : Life Expectancy of InfiniBand Switch NM2-GW is Degrading at Rapid Rate (文档 ID 2139293.1), 简单说,就是在EXALOGIC在使用虚拟化部署时,因为一些软件缺陷,导致IB交换机上有大量的写操作,会导致其中的闪存寿命快速下降。

如何查看闪存的寿命情况呢?在比较新的固件版本里有对应的命令showdisk,(老版本固件需要先升级才能有这个命令)例如:

这个例子里面,闪存寿命已经用了33.316%,还剩66.684%,如果剩余的寿命已经在10%以下了,建议尽快换新的闪存。

应对方法

最壕的应对方法就是换整个IB交换机,在某些场景下,这也是最稳妥和方便的方法。但是,只是因为闪存寿命就换掉整个设备,是不是有点浪费,下面我就给大家介绍一种只更换这个单片机的方法,(闪存是固化在这个单片机上的,没办法只换闪存芯片),单片机核心的成本比起整机来,就便宜多了。

首先,要根据Oracle PN号去采购新的核心,其实上面照片中已经能看到Oracle PN了,当然,这只是X4-2 对应的型号,其他机型,其他版本PN号是略有差别的。

当你拿到备件后,最幸运的情况是,备件中已经有了对应的交换机的固件,那么我们要做的只是备份原来的配置,更换备件,将配置恢复到新的核心里就行了,很简单。

但是,在某些情况下,你拿到的备件里面可能没有对应的”OS”,或着有也版本差异很大,比如说你要一个EXALOGIC的IB交换机的核心,拿到的备件虽然PN号对,但是固件却是EXADATA上用的,这种时候就比较难受。如果这个核心真是一个普通的”电脑”,那非常好办,将原来核心中的闪存内容整个备份出来,然后再完整地恢复到新核心里面就可以了。但是这个核心并不是普通的”电脑”,所以我要做类似的事,需要借助额外的设备,这个额外的设备就是kontron的”开发板”:

如图所示,这个开发板,有显示接口(数字信号显示器),USB口(接USB启动盘和键盘),网口,以及连接核心模块的Type 10接口(kontron分类为type 10,就是板子右侧黑色的插槽,交换机的核心模块就是通过这个接口和开发板连接)。有了这些接口,我们就可以将核心模块当成普通电脑一样对待了,比如说备份和恢复”硬盘”(闪存)内容。

那么大概的步骤就是:

  1. 将老交换机的核心模块拆下。
  2. 将老交换机的核心模块安装在开发板上,用USB盘启动,将”硬盘”(到寿命的闪存)中的固件用dd命令备份到USB盘。
  3. 将新的核心模块安装在开发板上,用带有上一步做的备份的USB盘启动,用dd命令将备份恢复到新的核心模块上。
  4. 将新的核心模块安装到交换机上。

其实很简单,和备份恢复一个普通linux机器的OS没啥大区别,没必要列出细节了,几个关键点:

  1. 用于启动核心模块的USB盘,为了保证兼容性,一定要用USB 2.0 的4G容量的盘
  2. 开发板可以在kontron的网站上或ebay买到,当然,买之前要确定你的IB交换机的核心模块的型号和开发板的兼容性,不同的kontron单片机有不同的开发板
  3. 用于启动核心模块的USB盘,可以用任何能启动机器的linux OS,我采用的是SystemRescueCd,详情可以参考http://www.system-rescue-cd.org/Installing-SystemRescueCd-on-a-USB-stick/#USB_keys_models_known_to_work
  4. 核心模块和普通PC一样,有BIOS,要改动启动顺序(用USB启动),可以在开机时按DEL键,进入BIOS更改。

还可以做什么

其实很多人应该已经想到了,有了这个开发板,我们可以用它解决很多特殊问题,比如IB交换机口令丢失,比如升级交换机固件失败(”刷机”刷成”砖头”了),将交换机恢复成出厂设置等等。

下面给大家看一下恢复IB交换机root口令的方法:

第一步,将核心从交换机上拆下来,安装到开发板上,用USB盘启动核心(先进bios改启动顺序):

开发板只有两个USB口,上图里面,一个接键盘,一个接USB盘(被键盘接口挡住了,看不到)。上图中大块黑色散热片下面就是核心模块,通过type 10接口和开发版相连,最好带着散热片使用,否则CPU会过热。

启动后,可以看到两个硬盘,其中sdb是USB盘,sda是核心内部的闪存,sda1是swap区,sda2是安装固件(OS)的分区。

将/dev/sda2 mount到任意目录,我这里用的是/root/tmp,在etc目录下查看shadow文件的位置,例子里面的这个固件是基于centos5.2的,shadow文件的实际位置在/conf/shadow

用vi命令编辑这个shadow文件,将root口令清空,如下图所示,然后保存,sync,重启。

在bios里面修改启动顺序,让核心内部的闪存优先启动,当出现登录提示时,用户名是root,口令直接敲回车就可以登录了,然后再修改root口令。

恢复升级失败的交换机,步骤类似,当然先要有一个合法的备份,是本机或者其他交换机的都可以,保存到启动U盘中。用USB盘启动,用dd将备份写入来恢复固件,例如:

如果是用其他交换机的固件去恢复,后续当然还要恢复配置,只要交换机能正常启动,恢复配置就不存在什么障碍了。

最后做个广告,大家如果有遇到类似的问题,自己搞又没把握时,可以找我们,价格公道,童叟无欺,嘿嘿嘿

未经允许不得转载:Oracle一体机用户组 » Oracle 一体机 infiniband 交换机闪存寿命问题

相关推荐