技術(shù)領(lǐng)域
本發(fā)明涉及到存儲(chǔ)器測(cè)試技術(shù),具體的說(shuō)是存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法。
背景技術(shù):
存儲(chǔ)器(Memory)是現(xiàn)代信息技術(shù)中用于保存信息的記憶設(shè)備。計(jì)算機(jī)中全部信息,包括輸入的原始數(shù)據(jù)、計(jì)算機(jī)程序、中間運(yùn)行結(jié)果和最終運(yùn)行結(jié)果都保存在存儲(chǔ)器中。它根據(jù)控制器指定的位置存入和取出信息。有了存儲(chǔ)器,計(jì)算機(jī)才有記憶功能,才能保證正常工作。計(jì)算機(jī)中的存儲(chǔ)器按用途存儲(chǔ)器可分為主存儲(chǔ)器(內(nèi)存)和輔助存儲(chǔ)器(外存)。
目前隨著IT領(lǐng)域技術(shù)的不斷發(fā)展,存儲(chǔ)器作為大數(shù)據(jù)時(shí)代的主流產(chǎn)物,也隨著涉足領(lǐng)域的逐漸增多,市場(chǎng)存儲(chǔ)器需求量逐漸增大。公司存儲(chǔ)器出貨量越來(lái)越大,能夠按時(shí)的達(dá)成生產(chǎn)排配準(zhǔn)時(shí)出貨,不但關(guān)系到公司的信譽(yù)也代表一個(gè)公司的生產(chǎn)能力,同時(shí)也影響著客戶的滿意度。企業(yè)注重生產(chǎn)速度的同時(shí)也要求品質(zhì)有保障,對(duì)于研發(fā)及生產(chǎn)的測(cè)試要求越來(lái)越高。無(wú)論是研發(fā)段還是生產(chǎn)線的測(cè)試,產(chǎn)品的測(cè)試能夠高效的完成是至關(guān)重要的一個(gè)環(huán)節(jié)。
針對(duì)存儲(chǔ)器的測(cè)試,進(jìn)行自動(dòng)化的切入是必要的;所以針對(duì)存儲(chǔ)器RAID類型的IO做了一些自動(dòng)化測(cè)試的導(dǎo)入,其中IO的IP設(shè)置及時(shí)間設(shè)置之前一直是一個(gè)人工操作的項(xiàng)目,需要大量人為操作參與進(jìn)來(lái),這就不可避免的出現(xiàn)由于人為因素造成的失誤,致使設(shè)置不準(zhǔn)確,測(cè)試時(shí)間長(zhǎng)而且成功率不高,又不會(huì)產(chǎn)生測(cè)試log;浪費(fèi)了大量人力、時(shí)間,工作效率不高,產(chǎn)品品質(zhì)得不到保障。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對(duì)目前技術(shù)發(fā)展的需求和不足之處,提供存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法。
本發(fā)明所述存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法,解決上述技術(shù)問(wèn)題采用的技術(shù)方案如下:所述存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法,使用linux 系統(tǒng)下perl語(yǔ)言編寫的自動(dòng)化腳本,通過(guò)串口及網(wǎng)線對(duì)IO的IP及時(shí)間進(jìn)行自動(dòng)化設(shè)置;其主要步驟包括:1)掃描存儲(chǔ)器中I/O的序列號(hào);2)自動(dòng)判斷I/O類型并自動(dòng)加載I/O驅(qū)動(dòng);3)硬件檢測(cè);4)設(shè)置上下I/O的IP;設(shè)置系統(tǒng)下成功后重啟I/O;5)檢測(cè)I/O的IP設(shè)置是否成功;6)設(shè)置I/O的時(shí)間。
優(yōu)選的,所述步驟2) 自動(dòng)判斷I/O類型并自動(dòng)加載I/O驅(qū)動(dòng),若加載成功則自動(dòng)化腳本繼續(xù),若加載失敗則打印error,處理異常后重新執(zhí)行。
優(yōu)選的,所述步驟3)硬件檢測(cè),自動(dòng)化腳本通過(guò)串口線及SAS線抓取信息,自動(dòng)判斷服務(wù)器與存儲(chǔ)器的連接狀態(tài)及各個(gè)模塊的在位狀況,若各個(gè)模塊狀態(tài)正常則繼續(xù)運(yùn)行,若判斷出存儲(chǔ)器端及服務(wù)器端有異常則會(huì)在終端報(bào)錯(cuò)“test fail”,同時(shí)打印error信息,排除問(wèn)題后繼續(xù)重新測(cè)試。
優(yōu)選的,所述步驟5)檢測(cè)I/O的IP設(shè)置是否成功,成功則繼續(xù)進(jìn)行下步測(cè)試,不成功則結(jié)束,終端打印出error信息;然后排除異常重新測(cè)試。
優(yōu)選的,所述步驟6)設(shè)置I/O的時(shí)間,首先判斷上下兩個(gè)IO的時(shí)間是否相同,是與系統(tǒng)時(shí)間一致,若兩個(gè)IO的時(shí)間異常則重新設(shè)置時(shí)間;若I/O的時(shí)間是正確的則提示pass,繼續(xù)進(jìn)行。
本發(fā)明所述存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法與現(xiàn)有技術(shù)相比具有的有益效果是:本發(fā)明應(yīng)用于大部分存儲(chǔ)器IO的IP設(shè)置及時(shí)間設(shè)置,可以同時(shí)大批量的測(cè)試,每個(gè)測(cè)試步驟都有測(cè)試log產(chǎn)生,有利于問(wèn)題分析及定位,減少了不必要的人機(jī)交互過(guò)程,節(jié)省人力、時(shí)間、成本等資源,不但提高了效率,而且有質(zhì)量保障;該方法操作簡(jiǎn)單,實(shí)用性較強(qiáng),并且不會(huì)有人為配置時(shí)可能出現(xiàn)的錯(cuò)誤、漏失等,很大程度上提高生產(chǎn)速度。
附圖說(shuō)明
附圖1為所述存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法的流程圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,對(duì)本發(fā)明所述存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法進(jìn)一步詳細(xì)說(shuō)明。
實(shí)施例:
本實(shí)施例所述存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法,使用linux 系統(tǒng)下perl語(yǔ)言編寫的自動(dòng)化腳本,通過(guò)串口及網(wǎng)線對(duì)IO的IP及時(shí)間進(jìn)行自動(dòng)化設(shè)置,能夠同時(shí)進(jìn)行大批量測(cè)試,每個(gè)測(cè)試步驟都有測(cè)試log產(chǎn)生,并將測(cè)試log打印在終端,同時(shí)保存在服務(wù)器端,讓測(cè)試有絕對(duì)的保障。
附圖1為所述存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法的實(shí)施流程圖,如附圖1所示,該存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法具體實(shí)施過(guò)程如下:
1、搭建測(cè)試環(huán)境,服務(wù)器端裝好測(cè)試用的自動(dòng)化腳本(掛載U盤mount /dev/sdb4 /mnt ; 復(fù)制即可cp /mnt/set_io_ips /usr/local/bin/Neptune/;),將好存儲(chǔ)器端I/O的SAS、網(wǎng)線及串口線連接到服務(wù)器端;
2、系統(tǒng)下執(zhí)行自動(dòng)化腳本(加執(zhí)行權(quán)限chmod +x set_io_ips: ;執(zhí)行命令./ set_io_ips);log同步生產(chǎn)(log會(huì)自動(dòng)寫在以時(shí)間命名的文件夾中,路徑可以自己通過(guò)配置文件指定);
3、掃描存儲(chǔ)器中I/O的序列號(hào);
print "Please scan uiom sn[]: ";
chomp($uiom_sn=<STDIN>);
4、自動(dòng)判斷I/O類型并自動(dòng)加載I/O驅(qū)動(dòng),若加載成功則自動(dòng)化腳本繼續(xù),若加載失敗則打印error,處理異常后重新執(zhí)行;
sub load_driver;
if($fc) {`modprobe mptfc`} --FC類型的I/O
if($sas){`modprobe mptsas`} ---SAS類型的I/O
5、硬件檢測(cè),自動(dòng)化腳本通過(guò)串口線及SAS線抓取信息,自動(dòng)判斷服務(wù)器與存儲(chǔ)器的連接狀態(tài)及各個(gè)模塊的在位狀況,若各個(gè)模塊的狀態(tài)都是OK則繼續(xù)運(yùn)行,若判斷出存儲(chǔ)器端及服務(wù)器端有異常則會(huì)在終端報(bào)錯(cuò)“test fail”,同時(shí)打印error信息,排除問(wèn)題后繼續(xù)重新測(cè)試;
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、設(shè)置上下I/O的IP;設(shè)置系統(tǒng)下成功后重啟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、檢測(cè)I/O的IP設(shè)置是否成功,成功則繼續(xù)進(jìn)行下步測(cè)試,不成功則結(jié)束,終端打印出error信息;然后排除異常重新測(cè)試;若IP設(shè)置成功則繼續(xù)下一步測(cè)試;
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、設(shè)置I/O的時(shí)間,首先判斷上下兩個(gè)IO的時(shí)間是否相同,是與系統(tǒng)時(shí)間一致,若兩個(gè)IO的時(shí)間異常則重新設(shè)置時(shí)間;若I/O的時(shí)間是正確的則提示pass,繼續(xù)進(jìn)行;
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、時(shí)間設(shè)置成功則測(cè)試pass,自動(dòng)化腳本運(yùn)行結(jié)束,若時(shí)間設(shè)置失敗,則自動(dòng)化腳本運(yùn)行結(jié)束,判斷異常后重新測(cè)試。
本實(shí)施例所述存儲(chǔ)器中RAID類型的IO設(shè)置IP及時(shí)間的方法,所使用的自動(dòng)化腳本具體內(nèi)容如下:
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的驅(qū)動(dòng)
$CS::failSub=\&serialWarn;
$tmpUUTs=0;
$CS::no_close = 0;
#調(diào)用數(shù)據(jù)包,進(jìn)入串口;
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");
}
#設(shè)置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) }
#檢測(cè)IO的時(shí)間。
上述具體實(shí)施方式僅是本發(fā)明的具體個(gè)案,本發(fā)明的專利保護(hù)范圍包括但不限于上述具體實(shí)施方式,任何符合本發(fā)明的權(quán)利要求書的且任何所屬技術(shù)領(lǐng)域的普通技術(shù)人員對(duì)其所做的適當(dāng)變化或替換,皆應(yīng)落入本發(fā)明的專利保護(hù)范圍。