技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算機(jī)服務(wù)器
技術(shù)領(lǐng)域:
:,具體的說是一種在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法。
背景技術(shù):
::隨著目前服務(wù)器,存儲(chǔ)器領(lǐng)域的不斷發(fā)展與科技迅速進(jìn)步,市場(chǎng)存儲(chǔ)器需求量逐漸增大,公司出貨量越來越大,對(duì)于研發(fā)及生產(chǎn)的測(cè)試要求越來越高。測(cè)試領(lǐng)域面臨著嚴(yán)峻的挑戰(zhàn);能夠按時(shí)的達(dá)成生產(chǎn)排配準(zhǔn)時(shí)出貨,不但關(guān)系到公司的信譽(yù)也代表一個(gè)公司的生產(chǎn)能力,同時(shí)也影響著客戶的滿意度,而產(chǎn)品的測(cè)試能夠高效的完成是至關(guān)重要的一個(gè)環(huán)節(jié)。目前K1產(chǎn)品已經(jīng)進(jìn)入量產(chǎn)階段,需求量很大,同時(shí)測(cè)試工作也面臨嚴(yán)峻的考驗(yàn),特別是存儲(chǔ)端的測(cè)試極為重要,目前存儲(chǔ)端的測(cè)試效率低下,測(cè)試覆蓋率也不能達(dá)到產(chǎn)品質(zhì)量要求。技術(shù)實(shí)現(xiàn)要素:本發(fā)明針對(duì)目前技術(shù)發(fā)展的需求和不足之處,提供一種在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法。本發(fā)明所述一種在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法,解決上述技術(shù)問題采用的技術(shù)方案如下:所述一種在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法,通過在服務(wù)器端安裝一測(cè)試自動(dòng)化程式,并在服務(wù)器端連接存儲(chǔ)器I/O串口和SAS線后;服務(wù)器端運(yùn)行測(cè)試自動(dòng)化程式,通過串口和SAS線讀取存儲(chǔ)器系統(tǒng)下的信息和背板燒錄信息;并通過掃描外部條碼抓取數(shù)據(jù)庫信息與其進(jìn)行對(duì)比,判斷背板使用和燒錄情況,同時(shí)與實(shí)物狀態(tài)對(duì)比,提示哪個(gè)插槽的硬盤有問題;最后,通過調(diào)用其他模塊讀取硬盤背板的信號(hào),判斷背板的具體狀況。優(yōu)選的,所述測(cè)試自動(dòng)化程式為linux下perl語言所編寫的測(cè)試自動(dòng)化程式。優(yōu)選的,在服務(wù)器端裝好測(cè)試自動(dòng)化程式,連接存儲(chǔ)器I/O端的串口及SAS線到服務(wù)器端,服務(wù)器端直接運(yùn)行測(cè)試程序,發(fā)送指令讀取存儲(chǔ)器系統(tǒng)下燒錄的背板信息,然后人工掃描外部條碼程序,調(diào)用并查看數(shù)據(jù)庫中產(chǎn)品的信息,作對(duì)比判斷背板使用情況,是否燒錄正確或貼錯(cuò)條碼。優(yōu)選的,服務(wù)器端在存儲(chǔ)器I/O端的串口下讀取到硬盤的詳細(xì)信息,同時(shí)通過SAS線抓取硬盤的信息,若兩種路徑讀取硬盤信息相同,則排除port口或I/O串口問題;然后提取有用信息打印到終端;同時(shí),與實(shí)物狀態(tài)對(duì)比,判斷并提示哪個(gè)插槽的硬盤有問題。本發(fā)明所述一種在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法與現(xiàn)有技術(shù)相比具有的有益效果是:本發(fā)明通過此程式能能快速完成背板測(cè)試部分,可以測(cè)試所有類型的存儲(chǔ)器中的硬盤背板,測(cè)試速度快,定位問題準(zhǔn)確,并能夠完成測(cè)試log保存,測(cè)試覆蓋率高;使用方便,操作簡(jiǎn)單,降低操作復(fù)雜度并且減少人工輸入命令的時(shí)間,為公司節(jié)省了人力、時(shí)間、成本等資源,也減少了不必要的人機(jī)交互過程,不會(huì)有人為配置時(shí)可能出現(xiàn)的錯(cuò)誤、漏失等錯(cuò)誤,確保測(cè)試質(zhì)量,對(duì)于一些問題分析及定位、生產(chǎn)提速等有很好的作用。說明書附圖附圖1為在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法的流程圖。具體實(shí)施方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,對(duì)本發(fā)明所述一種在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法進(jìn)一步詳細(xì)說明。為了能顧提高存儲(chǔ)端的測(cè)試效率與覆蓋率,本發(fā)明提出一種在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法,主要通過一套硬盤背板的測(cè)試自動(dòng)化程式,在服務(wù)器端安裝該測(cè)試自動(dòng)化程式,并在服務(wù)器端連接存儲(chǔ)器I/O串口和SAS線等數(shù)據(jù)傳送線,服務(wù)器端運(yùn)行測(cè)試自動(dòng)化程式,通過串口和SAS線讀取存儲(chǔ)器系統(tǒng)下的信息和背板燒錄信息;并通過掃描外部條碼抓取數(shù)據(jù)庫信息與其進(jìn)行對(duì)比,判斷背板使用和燒錄情況,同時(shí)與實(shí)物狀態(tài)對(duì)比,提示哪個(gè)插槽的硬盤有問題;最后,通過調(diào)用其他模塊讀取硬盤背板的信號(hào),判斷背板的具體狀況。本發(fā)明的整個(gè)過程都是由測(cè)試自動(dòng)化程式自動(dòng)抓取信息,對(duì)比信息,判斷信息,并將問題生成faillog打印在終端的同時(shí)也保存在服務(wù)器上,讓測(cè)試有絕對(duì)的保障。本方法可以測(cè)試所有類型的存儲(chǔ)器中的硬盤背板,測(cè)試速度快,定位問題準(zhǔn)確,測(cè)試覆蓋率高。實(shí)施例:本實(shí)施例所述一種在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法,在linux下使用perl語言編寫的測(cè)試自動(dòng)化程序,在服務(wù)器端連接存儲(chǔ)器I/O串口及SAS線等數(shù)據(jù)傳送線,程序通過I/O串口及SAS線讀取系統(tǒng)下的信息和背板燒錄信息,再通過掃描外部條碼抓取數(shù)據(jù)庫信息與其進(jìn)行對(duì)比,判斷背板使用和燒錄情況;同時(shí)與實(shí)物狀態(tài)做對(duì)比提示哪個(gè)插槽的硬盤有問題;最后,通過調(diào)用其它模塊來讀取硬盤背板的信號(hào)從而判斷背板的具體狀況;該自動(dòng)化程式為linux下perl語言所編寫,可應(yīng)用于所有存儲(chǔ)器產(chǎn)品,能夠提高硬盤背板測(cè)試準(zhǔn)速度和準(zhǔn)確性,同時(shí)又有極高的覆蓋率又有完成的測(cè)試log保存。本實(shí)施例所述在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法,其具體實(shí)施過程如下:1)首先,在服務(wù)器端裝好測(cè)試自動(dòng)化程式,連接存儲(chǔ)器I/O端的串口及SAS線到服務(wù)器端,服務(wù)器端直接運(yùn)行測(cè)試程序,發(fā)送指令讀取存儲(chǔ)器系統(tǒng)下燒錄的背板信息,然后人工掃描外部條碼程序,調(diào)用并查看數(shù)據(jù)庫中產(chǎn)品的信息,作對(duì)比判斷背板是否用錯(cuò)、日期、版次,是否燒錄正確或貼錯(cuò)條碼;如附圖1所示。2)其次,服務(wù)器端在存儲(chǔ)器I/O端的串口下讀取到硬盤的詳細(xì)信息,同時(shí)通過SAS線抓取硬盤的信息,若兩種路徑讀取硬盤信息相同,則排除port口或I/O串口問題;然后提取有用信息打印到終端;同時(shí),與實(shí)物狀態(tài)對(duì)比,判斷并提示哪個(gè)插槽的硬盤有問題;比如硬盤的型號(hào)、firmware、硬盤是否在位,硬盤的電壓是否正確。3)最后,通過調(diào)用其它模塊來讀取硬盤背板的信號(hào),從而判斷背板狀況;例如異常問題:slot不上電,背板上電容或者電阻撞鍵等。本實(shí)施例所述在linux下檢測(cè)存儲(chǔ)器中硬盤背板的自動(dòng)化方法,所述測(cè)試自動(dòng)化程序運(yùn)行的具體過程如下: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,">")).。上述具體實(shí)施方式僅是本發(fā)明的具體個(gè)案,本發(fā)明的專利保護(hù)范圍包括但不限于上述具體實(shí)施方式,任何符合本發(fā)明的權(quán)利要求書的且任何所屬
技術(shù)領(lǐng)域:
:的普通技術(shù)人員對(duì)其所做的適當(dāng)變化或替換,皆應(yīng)落入本發(fā)明的專利保護(hù)范圍。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3