一种在linux下检测存储器中硬盘背板的自动化方法与流程

文档序号:11864536阅读:392来源:国知局

技术领域
:本发明涉及计算机服务器
技术领域
:,具体的说是一种在linux下检测存储器中硬盘背板的自动化方法。
背景技术
::随着目前服务器,存储器领域的不断发展与科技迅速进步,市场存储器需求量逐渐增大,公司出货量越来越大,对于研发及生产的测试要求越来越高。测试领域面临着严峻的挑战;能够按时的达成生产排配准时出货,不但关系到公司的信誉也代表一个公司的生产能力,同时也影响着客户的满意度,而产品的测试能够高效的完成是至关重要的一个环节。目前K1产品已经进入量产阶段,需求量很大,同时测试工作也面临严峻的考验,特别是存储端的测试极为重要,目前存储端的测试效率低下,测试覆盖率也不能达到产品质量要求。技术实现要素:本发明针对目前技术发展的需求和不足之处,提供一种在linux下检测存储器中硬盘背板的自动化方法。本发明所述一种在linux下检测存储器中硬盘背板的自动化方法,解决上述技术问题采用的技术方案如下:所述一种在linux下检测存储器中硬盘背板的自动化方法,通过在服务器端安装一测试自动化程式,并在服务器端连接存储器I/O串口和SAS线后;服务器端运行测试自动化程式,通过串口和SAS线读取存储器系统下的信息和背板烧录信息;并通过扫描外部条码抓取数据库信息与其进行对比,判断背板使用和烧录情况,同时与实物状态对比,提示哪个插槽的硬盘有问题;最后,通过调用其他模块读取硬盘背板的信号,判断背板的具体状况。优选的,所述测试自动化程式为linux下perl语言所编写的测试自动化程式。优选的,在服务器端装好测试自动化程式,连接存储器I/O端的串口及SAS线到服务器端,服务器端直接运行测试程序,发送指令读取存储器系统下烧录的背板信息,然后人工扫描外部条码程序,调用并查看数据库中产品的信息,作对比判断背板使用情况,是否烧录正确或贴错条码。优选的,服务器端在存储器I/O端的串口下读取到硬盘的详细信息,同时通过SAS线抓取硬盘的信息,若两种路径读取硬盘信息相同,则排除port口或I/O串口问题;然后提取有用信息打印到终端;同时,与实物状态对比,判断并提示哪个插槽的硬盘有问题。本发明所述一种在linux下检测存储器中硬盘背板的自动化方法与现有技术相比具有的有益效果是:本发明通过此程式能能快速完成背板测试部分,可以测试所有类型的存储器中的硬盘背板,测试速度快,定位问题准确,并能够完成测试log保存,测试覆盖率高;使用方便,操作简单,降低操作复杂度并且减少人工输入命令的时间,为公司节省了人力、时间、成本等资源,也减少了不必要的人机交互过程,不会有人为配置时可能出现的错误、漏失等错误,确保测试质量,对于一些问题分析及定位、生产提速等有很好的作用。说明书附图附图1为在linux下检测存储器中硬盘背板的自动化方法的流程图。具体实施方式为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,对本发明所述一种在linux下检测存储器中硬盘背板的自动化方法进一步详细说明。为了能顾提高存储端的测试效率与覆盖率,本发明提出一种在linux下检测存储器中硬盘背板的自动化方法,主要通过一套硬盘背板的测试自动化程式,在服务器端安装该测试自动化程式,并在服务器端连接存储器I/O串口和SAS线等数据传送线,服务器端运行测试自动化程式,通过串口和SAS线读取存储器系统下的信息和背板烧录信息;并通过扫描外部条码抓取数据库信息与其进行对比,判断背板使用和烧录情况,同时与实物状态对比,提示哪个插槽的硬盘有问题;最后,通过调用其他模块读取硬盘背板的信号,判断背板的具体状况。本发明的整个过程都是由测试自动化程式自动抓取信息,对比信息,判断信息,并将问题生成faillog打印在终端的同时也保存在服务器上,让测试有绝对的保障。本方法可以测试所有类型的存储器中的硬盘背板,测试速度快,定位问题准确,测试覆盖率高。实施例:本实施例所述一种在linux下检测存储器中硬盘背板的自动化方法,在linux下使用perl语言编写的测试自动化程序,在服务器端连接存储器I/O串口及SAS线等数据传送线,程序通过I/O串口及SAS线读取系统下的信息和背板烧录信息,再通过扫描外部条码抓取数据库信息与其进行对比,判断背板使用和烧录情况;同时与实物状态做对比提示哪个插槽的硬盘有问题;最后,通过调用其它模块来读取硬盘背板的信号从而判断背板的具体状况;该自动化程式为linux下perl语言所编写,可应用于所有存储器产品,能够提高硬盘背板测试准速度和准确性,同时又有极高的覆盖率又有完成的测试log保存。本实施例所述在linux下检测存储器中硬盘背板的自动化方法,其具体实施过程如下:1)首先,在服务器端装好测试自动化程式,连接存储器I/O端的串口及SAS线到服务器端,服务器端直接运行测试程序,发送指令读取存储器系统下烧录的背板信息,然后人工扫描外部条码程序,调用并查看数据库中产品的信息,作对比判断背板是否用错、日期、版次,是否烧录正确或贴错条码;如附图1所示。2)其次,服务器端在存储器I/O端的串口下读取到硬盘的详细信息,同时通过SAS线抓取硬盘的信息,若两种路径读取硬盘信息相同,则排除port口或I/O串口问题;然后提取有用信息打印到终端;同时,与实物状态对比,判断并提示哪个插槽的硬盘有问题;比如硬盘的型号、firmware、硬盘是否在位,硬盘的电压是否正确。3)最后,通过调用其它模块来读取硬盘背板的信号,从而判断背板状况;例如异常问题:slot不上电,背板上电容或者电阻撞键等。本实施例所述在linux下检测存储器中硬盘背板的自动化方法,所述测试自动化程序运行的具体过程如下:my$date_and_time=`date+"%m%d%y_%H%M_"`;chomp($date_and_time);$date_and_time=~s/[/\:]/-/g;subdprint{my($text)=@_;if($debug==1){if($nolog==1){print"DEBUG:".$text};unless($nolog==1){printLOGFILE"DEBUG:".$text}}}$chassisRev="20151009";get_options;$testStartTime=`date`;open_log_file;printout("both","chassisSAREV:$chassisRev\n");printout("both","logfile:$debugLogfile\n");{#puttingthefollowingdo-blockwithinablocklets"last"work.Howobscure.do{check_mount;get_user_input;unless($psuor$dra){check_sfc;}sleep30;chassis_test;}until(1);}$testEndTime=`date`;printout("both","Teststarted:$testStartTime");printout("both","Testcompleted:$testEndTime");close(DLOG);system("cp$debugLogfile/NEPTUNE/PATP-III_logs");exit(0);#####################EndofMainlogic####################subserial{useFcntl':flock';useIO::File;useExpect;my$command=shift;my$prompt=shift;my$timeout=shift;dprint("baudrate$baudrate\n");if(!defined$timeout){$timeout=30}dprint("COMPORT:$COMPORT\n");if($nolog==1&&$debug==1){print"\nCOMMAND:'$command'\n\n"}if($nolog!=1&&$debug==1){printLOGFILE"\nCOMMAND:'$command'\n\n"}if(!defined$prompt){expect_fail("ERROR:Nopromptdefined")}if($no_enter==1){$COMMAND=$command}else{$COMMAND=$command."\r"}my$FH=newIO::File"$COMPORT",O_RDWR;if(!defined$FH){expect_fail("Failedtoopendevice:'$COMPORT':$!")}if(!flock($FH,LOCK_EX|LOCK_NB)){expect_fail("Failedtogetexclusivelockon'$COMPORT'")}system"/bin/stty$baudrateraw-echo-crtscts<$COMPORT";my$expect=Expect->exp_init($FH)orexpect_fail("Cannotinitializedevice($FH)");$expect->log_user(0);$expect->log_file($debug_logfile);$expect->send("$COMMAND");$expect->expect($timeout,[timeout=>sub{my$self=shift;my$expect=$self->[0];chomp($prompt,$command);my$data_before=$expect->before;my@data_before=(split/\r/,$data_before);my$data_prompt=$expect->match;my@data_prompt=(split/\r/,$data_prompt);foreach(@data_before){push@failure_data,$_}foreach(@data_prompt){push@failure_data,$_}multiprint("TIMEOUT($timeout):Didnotgetprompt'$prompt'aftercommand:'$command'\n\n");foreach(@failure_data){$_=~s/^\n//;$_=~s/\s+$//g;$_=~s/^\s+//g;$_=~s/^\n//;#nextif($_eq$command);nextif($_=~/^\s+$/);nextif($_eq"");nextif($_eq"");multiprint"FAIL:$_\n";}expect_fail;}],'-re',$prompt);my@dirty_data=();my@clean_data=();my@data_prompt=();my@data_after=();my$data=$expect->before;@dirty_data=(split/\r/,$data);my$data_match=$expect->match;my@data_match=(split/\r/,$data_match);chomp(@data_match);foreach(@data_match){$_=~s/^\n//;$_=~s/^\s+//g;$_=~s/\s+$//g;push@dirty_data,"MATCH:'$_'"}my$data_after=$expect->after;my@data_after=(split/\r/,$data_after);chomp(@data_after);foreach(@data_after){nextif($_eq"");$_=~s/^\n//;$_=~s/^\s+//g;$_=~s/\s+$//g;push@dirty_data,"AFTER:'$_'"}chomp(@dirty_data);foreach(@dirty_data){$_=~s/\s+$//g;$_=~s/^\s+//g;$_=~s/^\n//;nextif($_eq$command);nextif($_=~/^\s+$/);nextif($_=~/^\r$/);nextif($_eq"");nextif($_eq"");push@clean_data,$_;}$expect->hard_close;if($nolog==1&&$debug==1){foreach(@clean_data){nextif($_eq$command);if($_=~/MATCH/||$_=~/AFTER/){print"$_\n"}else{print"GOT:$_\n"}};print"\n";}if($nolog!=1&&$debug==1){foreach(@clean_data){nextif($_eq$command);if($_=~/MATCH/||$_=~/AFTER/){printLOGFILE"$_\n"}else{printLOGFILE"GOT:$_\n"}};printLOGFILE"\n";}return@clean_data;}subcheck_hdd_sync_rates{my@results=();multiprint"\nHDDSYNCRATEVERIFICATION($comX)\n\n";$COMPORT="/dev/tty".$comX;#Herealreadygetmidplanetype.#getslot_want/synrate_wantfrom-04tableaccordingto#readoutmidplanetype.get_config;=headif($sixG){if(($midplane_type!=$_2U12_6G)&&($midplane_type!=$_2U24_6G)&&($midplane_type!=$_2U24_6G_shn)&&($midplane_type!=$_2U24_6G_sh)&&($midplane_type!=$_2U12_6G_ge)){multiprint"\nChassisisnot6G,FAIL!!!\n\n";unless($nostop==1){fail;}}}else{if(($midplane_type!=$_2U24_3G)&&($midplane_type!=$_2U12_3G)){multiprint"\nChassisisnot3G,FAIL!!!\n\n";unless($nostop==1){fail;}}}=cutif(($iom_typeeq"mer")&&($midplane_type==$_2U24_6G)){#tlhmercuryreadsa2u126gasa2u123g,butitreadsa#2u246gasa2u246g.Dunnowhichiscorrect,sofakeout#a2u246gasa2u243gaftertheabovecheck.$midplane_type=$_2U24_3G;}#getthe"SSPLConnectionStatus"registersmy$base=0xa8110428;my$port_off=0x1000;#thiswillonlybecome1fortitaniummy$sliceBsspl1=0;if($iom_typeeq"tit"){#thiswillcoversliceASSPL0,andthensliceBSSPL0,sinceslice#B'sbaseis0xa8142010,whichis0xa8102010+8*0x8000.$base=0xa8102010;$port_off=0x8000;}#checktherateatwhichthedrivesconnectedondrivephysfor(my$x=0;$x<=35;$x++){if(($iom_typeeq"tit")and($x==22)){#newbaseforsliceBSSPL1$base=0xa8146010;$sliceBsspl1=1;}if(($iom_typeeq"nep")&&($midplane_type==$_2U12_3G)){#nodrivephysbeyondthispointona2u12if($x>15){last;}#thesearenotdrivephysona2u12if(($x>=6)&&($x<=9)){next;}}elsif(($iom_typeeq"mer")&&($midplane_type==$_2U12_3G)){#thesearenotdrivephysonamercury2u12if(($x<=7)||(($x>=20)&&($x<=23))||($x>=24)){next;}}elsif(($iom_typeeq"mer")&&($midplane_type==$_2U24_3G)){#thesearenotdrivephysonamercury2u24if(($x<=7)||(($x>=20)&&($x<=23))){next;}elsif($slot_want==24){if(($x<=7)||(($x>=14)&&($x<=15))||(($x>=28)&&($x<=29))){next;}}elsif($slot_want==12){if(($x<=7)||(($x>=14)&&($x<=21))||($x>=28)){next;}}else{$msg="\nThingshavegonehaywire,";$msg.="IOM:".$iom_type;$msg.="CHASSIS:".$midplane_type;$msg.=",FAIL!!!\n\n";multiprint($msg);unless($nostop==1){fail;}}#fortitanium,whenwegettophysicalphys22andabove,theoffset#goesbackto0.if($sliceBsspl1){$y=$x-22;}else{$y=$x;}my$addr=$base+$y*$port_off;$hex=sprintf("0x%08X",$addr);my$command="rd_32".$hex."1";dprint("COMMAND:$command\n");my@response=();chomp(@response=serial($command,">")).。上述具体实施方式仅是本发明的具体个案,本发明的专利保护范围包括但不限于上述具体实施方式,任何符合本发明的权利要求书的且任何所属
技术领域
:的普通技术人员对其所做的适当变化或替换,皆应落入本发明的专利保护范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1