存储器中RAID类型的IO设置IP及时间的方法
技术领域
本发明涉及到存储器测试技术,具体的说是存储器中RAID类型的IO设置IP及时间
的方法。
背景技术
存储器(Memory)是现代信息技术中用于保存信息的记忆设备。计算机中全部信
息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。
它根据控制器指定的位置存入和取出信息。有了存储器,计算机才有记忆功能,才能保证正
常工作。计算机中的存储器按用途存储器可分为主存储器(内存)和辅助存储器(外存)。
目前随着IT领域技术的不断发展,存储器作为大数据时代的主流产物,也随着涉
足领域的逐渐增多,市场存储器需求量逐渐增大。公司存储器出货量越来越大,能够按时的
达成生产排配准时出货,不但关系到公司的信誉也代表一个公司的生产能力,同时也影响
着客户的满意度。企业注重生产速度的同时也要求品质有保障,对于研发及生产的测试要
求越来越高。无论是研发段还是生产线的测试,产品的测试能够高效的完成是至关重要的
一个环节。
针对存储器的测试,进行自动化的切入是必要的;所以针对存储器RAID类型的IO
做了一些自动化测试的导入,其中IO的IP设置及时间设置之前一直是一个人工操作的项
目,需要大量人为操作参与进来,这就不可避免的出现由于人为因素造成的失误,致使设置
不准确,测试时间长而且成功率不高,又不会产生测试log;浪费了大量人力、时间,工作效
率不高,产品品质得不到保障。
发明内容
本发明针对目前技术发展的需求和不足之处,提供存储器中RAID类型的IO设置IP
及时间的方法。
本发明所述存储器中RAID类型的IO设置IP及时间的方法,解决上述技术问题采用
的技术方案如下:所述存储器中RAID类型的IO设置IP及时间的方法,使用linux 系统下
perl语言编写的自动化脚本,通过串口及网线对IO的IP及时间进行自动化设置;其主要步
骤包括:1)扫描存储器中I/O的序列号;2)自动判断I/O类型并自动加载I/O驱动;3)硬件检
测;4)设置上下I/O的IP;设置系统下成功后重启I/O;5)检测I/O的IP设置是否成功;6)设置
I/O的时间。
优选的,所述步骤2) 自动判断I/O类型并自动加载I/O驱动,若加载成功则自动化
脚本继续,若加载失败则打印error,处理异常后重新执行。
优选的,所述步骤3)硬件检测,自动化脚本通过串口线及SAS线抓取信息,自动判
断服务器与存储器的连接状态及各个模块的在位状况,若各个模块状态正常则继续运行,
若判断出存储器端及服务器端有异常则会在终端报错“test fail”,同时打印error信息,
排除问题后继续重新测试。
优选的,所述步骤5)检测I/O的IP设置是否成功,成功则继续进行下步测试,不成
功则结束,终端打印出error信息;然后排除异常重新测试。
优选的,所述步骤6)设置I/O的时间,首先判断上下两个IO的时间是否相同,是与
系统时间一致,若两个IO的时间异常则重新设置时间;若I/O的时间是正确的则提示pass,
继续进行。
本发明所述存储器中RAID类型的IO设置IP及时间的方法与现有技术相比具有的
有益效果是:本发明应用于大部分存储器IO的IP设置及时间设置,可以同时大批量的测试,
每个测试步骤都有测试log产生,有利于问题分析及定位,减少了不必要的人机交互过程,
节省人力、时间、成本等资源,不但提高了效率,而且有质量保障;该方法操作简单,实用性
较强,并且不会有人为配置时可能出现的错误、漏失等,很大程度上提高生产速度。
附图说明
附图1为所述存储器中RAID类型的IO设置IP及时间的方法的流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,对本发
明所述存储器中RAID类型的IO设置IP及时间的方法进一步详细说明。
实施例:
本实施例所述存储器中RAID类型的IO设置IP及时间的方法,使用linux 系统下perl语
言编写的自动化脚本,通过串口及网线对IO的IP及时间进行自动化设置,能够同时进行大
批量测试,每个测试步骤都有测试log产生,并将测试log打印在终端,同时保存在服务器
端,让测试有绝对的保障。
附图1为所述存储器中RAID类型的IO设置IP及时间的方法的实施流程图,如附图1
所示,该存储器中RAID类型的IO设置IP及时间的方法具体实施过程如下:
1、搭建测试环境,服务器端装好测试用的自动化脚本(挂载U盘mount /dev/sdb4 /mnt
; 复制即可cp /mnt/set_io_ips /usr/local/bin/Neptune/;),将好存储器端I/O的SAS、
网线及串口线连接到服务器端;
2、系统下执行自动化脚本(加执行权限chmod +x set_io_ips: ;执行命令./ set_io_
ips);log同步生产(log会自动写在以时间命名的文件夹中,路径可以自己通过配置文件指
定);
3、扫描存储器中I/O的序列号;
print "Please scan uiom sn[]: ";
chomp($uiom_sn=<STDIN>);
4、自动判断I/O类型并自动加载I/O驱动,若加载成功则自动化脚本继续,若加载失败
则打印error,处理异常后重新执行;
sub load_driver;
if($fc) {`modprobe mptfc`} --FC类型的I/O
if($sas){`modprobe mptsas`} ---SAS类型的I/O
5、硬件检测,自动化脚本通过串口线及SAS线抓取信息,自动判断服务器与存储器的连
接状态及各个模块的在位状况,若各个模块的状态都是OK则继续运行,若判断出存储器端
及服务器端有异常则会在终端报错“test fail”,同时打印error信息,排除问题后继续重
新测试;
sub get_device
my ($encl) = @_;
my @sg_map = `sg_map -x -i`;
登串口:
@MCports = ();
@FUports = ();
for (1..$expectedUUTs) {
my $slot = $_;
for (A,B) {
my $ctrl = $_;
my $mc = getConfig("uut$slot.ctrltest.ctrl$ctrl.com2");
my $fu = getConfig("uut$slot.ctrl$ctrl.fu");
push @MCports, $mc;
push @FUports, $fu;
6、设置上下I/O的IP;设置系统下成功后重启I/O;
if($is_iscsi and $restarting) {
# setting new iSCSI IPs seems to help iscsi reliability
printout("both","\nSetting new IPs on all controllers...\n\
n");
} else {
printout("both","\nSetting unique IPs on all controllers...\
n\n");
}
}
if ($ctrl eq 'a') { $last = '1' } else { $last = '2' }
$set_ip_address = "10.0.0." . $slot . $last;
7、检测I/O的IP设置是否成功,成功则继续进行下步测试,不成功则结束,终端打印出
error信息;然后排除异常重新测试;若IP设置成功则继续下一步测试;
unless($noSetup == 1){
unless(set_and_verify_ip_address($ctrl)) {
printout("both"," ERROR ! Could not set
Controller $Ctrl on $mc to IP address $set_ip_address\n");
exit(1);
8、设置I/O的时间,首先判断上下两个IO的时间是否相同,是与系统时间一致,若两个
IO的时间异常则重新设置时间;若I/O的时间是正确的则提示pass,继续进行;
or $ctrl(a,b) { # cann't set CTRL A & B the same time; setting all ipA's,
then all ipB's
$Ctrl=uc($ctrl);
$slot=$startSlot-1;
9、时间设置成功则测试pass,自动化脚本运行结束,若时间设置失败,则自动化脚本运
行结束,判断异常后重新测试。
本实施例所述存储器中RAID类型的IO设置IP及时间的方法,所使用的自动化脚本
具体内容如下:
sub load_driver {
#fill something
if($fc) {`modprobe mptfc`}
if($sas){`modprobe mptsas`}
@lsmod_out=`lsmod | grep mptsas`;
until(@lsmod_out) {
printout("both","SAS driver not loaded\n");
printout("both","loading SAS driver...\n");
system("modprobe mptsas");
sleep 5;
@lsmod_out=`lsmod | grep mptsas`;
}
#加载IO的驱动
$CS::failSub=\&serialWarn;
$tmpUUTs=0;
$CS::no_close = 0;
#调用数据包,进入串口;
if($defaultsOnly) {
printout("both","detecting attached controllers...\n");
} else {
if($is_iscsi and $restarting) {
# setting new iSCSI IPs seems to help iscsi reliability
printout("both","\nSetting new IPs on all controllers...\n\
n");
} else {
printout("both","\nSetting unique IPs on all controllers...\
n\n");
}
}
if(not $defaultsOnly) {
unless(boldly_go($mc)) { exit(1) }
@FDE = CS::serial("set fde-state repurpose", "#"); #
harmless if MC CLI don't support
printout("log","'set fde-state repurpose' result:\n@
FDE");
unless($noSetup == 1){
unless(set_and_verify_ip_address($ctrl)) {
printout("both"," ERROR ! Could not set
Controller $Ctrl on $mc to IP address $set_ip_address\n");
exit(1);
}
}
$ip_address = CS::get_ip($ctrl);
printout("log"," Controller $Ctrl on $mc IP
address set to $ip_address (mcIndex=$mcIndex)\n");
}
#设置IO 的IP;
for $ctrl(a,b) { # cann't set CTRL A & B the same time; setting all ipA'
s, then all ipB's
$Ctrl=uc($ctrl);
$slot=$startSlot-1;
for $mcIndex (0..$#MCports) {
if($ctrl eq 'a') { next unless($mcIndex % 2 == 0) }
if($ctrl eq 'b') { next unless($mcIndex % 2 != 0) }
#检测IO的时间。
上述具体实施方式仅是本发明的具体个案,本发明的专利保护范围包括但不限于
上述具体实施方式,任何符合本发明的权利要求书的且任何所属技术领域的普通技术人员
对其所做的适当变化或替换,皆应落入本发明的专利保护范围。