本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種加載IO模塊驅(qū)動程序的方法及裝置。
背景技術(shù):
隨著計算機技術(shù)的不斷發(fā)展與進步,服務(wù)器作為一種具有高性能、高可靠性和安全性的計算機,被廣泛應(yīng)用于生活及生產(chǎn)中的各個領(lǐng)域。與個人計算機不同,為了能夠存儲更多的數(shù)據(jù),服務(wù)器通常配備有專門的存儲器。存儲器包括機箱、IO(Input/Output,輸入/輸出)模塊及多個硬盤,IO模塊根據(jù)服務(wù)器的指令,向各個硬盤中存儲數(shù)據(jù)或從各個硬盤中讀取數(shù)據(jù)。
作為存儲器生產(chǎn)廠商,在存儲器出廠之前,需要對存儲器進行各種類型的檢測,以保證存儲器交付用戶之后能夠可靠、穩(wěn)定地進行運行。在對存儲器進行檢測之前,需要加載存儲器上IO模塊的驅(qū)動程序,這樣測試服務(wù)器才能夠從存儲器上讀取或?qū)懭胄畔?,以對存儲器進行各種類型的檢測。
目前,測試人員通過手動操作的方式在測試服務(wù)器上加載IO模塊的驅(qū)動程序。
針對于目前加載IO模塊驅(qū)動程序的方法,針對于每一臺存儲器,測試人員都需要通過手動操作的方式輸入指令代碼,由于指令代碼種類繁多且結(jié)構(gòu)復(fù)雜,手動輸入造成加載IO模塊驅(qū)動程序的效率較低。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種加載IO模塊驅(qū)動程序的方法及裝置,能夠提高加載IO模塊驅(qū)動程序的效率。
本發(fā)明實施例提供了一種加載IO模塊驅(qū)動程序的方法,將測試服務(wù)器與至少一個待測試存儲器相連,并在所述測試服務(wù)器上存儲驅(qū)動加載腳本,還包括:
針對于每一個所述待測試存儲器,均執(zhí)行:
掃描所述待測試存儲器上IO模塊的型號PN碼;
根據(jù)所述PN碼,確定所述IO模塊的類型;
根據(jù)所述IO模塊的類型,在所述測試服務(wù)器上運行所述驅(qū)動加載腳本,加載所述待測試存儲器上所述IO模塊的驅(qū)動程序。
優(yōu)選地,在所述掃描所述待測試存儲器上IO模塊的型號PN碼之前,進一步包括:
針對于每一個所述待測試存儲器,掃描所述待測試存儲器上IO模塊的序列號,根據(jù)所述序列號形成對應(yīng)于所述待測試存儲器的日志文件;
在所述測試服務(wù)器上運行預(yù)先存儲的日志記錄腳本,將所述掃描PN碼、所述確定IO模塊類型及所述加載驅(qū)動程序的過程及結(jié)果記錄到與所述待測試存儲器相對應(yīng)的日志文件中。
優(yōu)選地,在所述加載所述待測試存儲器上IO模塊的驅(qū)動程序之后,進一步包括:
判斷所述待測試存儲器上IO模塊的驅(qū)動程序是否加載成功,如果是,通過所述測試服務(wù)器輸出驅(qū)動加載成功信息,否則通過所述測試服務(wù)器輸出驅(qū)動加載失敗信息。
優(yōu)選地,該方法進一步包括:在所述測試服務(wù)器上存儲硬件檢測腳本,并通過小型計算機系統(tǒng)接口SAS線將所述待測試存儲器與所述測試服務(wù)器相連;
當(dāng)所述待測試存儲器上IO模塊的驅(qū)動程序加載成功后,
運行所述硬件檢測腳本,通過所述SAS線抓取所述待測試存儲器的硬件信息;
根據(jù)所述硬件信息,判斷所述待測試存儲器與所述測試服務(wù)器之間SAS線連接狀態(tài)以及所述待測試存儲器上各個功能模塊的在位狀態(tài)是否均正常,如果否,發(fā)出報警信息;其中,所述功能模塊包括硬盤及所述IO模塊中的任意一個或全部。
本發(fā)明實施例還提供了一種加載IO模塊驅(qū)動程序的裝置,包括:掃描單元、識別單元及加載單元;
所述掃描單元,用于針對于每一個與測試服務(wù)器相連的待測試存儲器,掃描所述待測試存儲器上IO模塊的型號PN碼;
所述識別單元,用于根據(jù)所述掃描單元獲取到的所述PN碼,確定所述IO模塊的類型;
所述加載單元,用于根據(jù)所述識別單元確定的所述IO模塊的類型,在所述測試服務(wù)器上運行預(yù)先存儲在是測試服務(wù)器上的驅(qū)動加載腳本,加載所述待測試存儲器上所述IO模塊的驅(qū)動程序。
優(yōu)選地,該裝置進一步包括:日志形成單元;
所述掃描單元,進一步用于針對于每一個所述待測試存儲器,掃描所述待測試存儲器上IO模塊的序列號;
所述日志形成單元,用于根據(jù)所述掃描單元獲取到的所述序列號,形成對應(yīng)于是待測試存儲器的日志文件,并在所述測試服務(wù)器上運行預(yù)先存儲的日志記錄腳本,將所述掃描單元掃描PN碼、所述識別單元確定IO模塊類型及所述加載單元加載驅(qū)動的過程及結(jié)果記錄到與所述待測試存儲器相對應(yīng)的日志文件中。
優(yōu)選地,該裝置進一步包括:判斷單元;
所述判斷單元,用于判斷所述加載單元是否將所述待測試存儲器上IO模塊的驅(qū)動程序加載成功,如果是,通過所述測試服務(wù)器輸出驅(qū)動加載成功信息,否則通過所述測試服務(wù)器輸出驅(qū)動加載失敗信息。
優(yōu)選地,該裝置進一步包括:硬件檢測單元;
所述硬件檢測單元,用于根據(jù)所述判斷單元的判斷結(jié)果,當(dāng)所述待測試存儲器上IO模塊的驅(qū)動程序加載成功后,運行預(yù)先存儲在所述測試服務(wù)器上的硬件檢測腳本,通過連接所述測試服務(wù)器與各個所述待測試存儲器的SAS線抓取所述待測試存儲器的硬件信息;并根據(jù)所述硬件信息,判斷所述待測試存儲器與所述測試服務(wù)器之間SAS線連接狀態(tài)以及所述待測試存儲器上各個功能模塊的在位狀態(tài)是否均正常,如果否,發(fā)出報警信息;其中,所述功能模塊包括硬盤及所述IO模塊中的任意一個或全部。
本發(fā)明實施例還提供了一種可讀介質(zhì),包括執(zhí)行指令,當(dāng)存儲控制器的處理器執(zhí)行所述執(zhí)行指令時,所述存儲控制器執(zhí)行上述實施例提供的任意一種加載IO模塊驅(qū)動程序的方法。
本發(fā)明實施例還提供了一種存儲控制器,包括:處理器、存儲器和總線;
所述存儲器用于存儲執(zhí)行指令,所述處理器與所述存儲器通過所述總線連接,當(dāng)所述存儲控制器運行時,所述處理器執(zhí)行所述存儲器存儲的所述執(zhí)行指令,以使所述存儲控制器執(zhí)行上述實施例提供的任意一種加載IO模塊驅(qū)動程序的方法。
本發(fā)明實施例提供了一種加載IO模塊驅(qū)動程序的方法及裝置,將至少一個待測試存儲器與測試服務(wù)器相連,并在測試服務(wù)器上存儲驅(qū)動加載腳本,針對于與測試服務(wù)器相連的每一個待測試存儲器,掃描待測試存儲器上IO模塊的PN碼,根據(jù)IO模塊的PN碼確定IO模塊的類型,根據(jù)IO模塊的類型運行驅(qū)動加載腳本,加載待測試存儲器上IO模塊的驅(qū)動程序。由此可見,預(yù)先將驅(qū)動加載腳本存儲到測試服務(wù)器上,通過掃描IO模塊的PN碼確定IO模塊的類型,驅(qū)動加載腳本運行后根據(jù)IO模塊的類型自動完成驅(qū)動程序的加載,無需手動輸入復(fù)雜的指令代碼,從而可以提高加載存儲器上IO模塊驅(qū)動程序的效率。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一個實施例提供的一種加載IO模塊驅(qū)動程序的方法流程圖;
圖2是本發(fā)明另一個實施例提供的一種加載IO模塊驅(qū)動程序的方法流程圖;
圖3是本發(fā)明又一個實施例提供的一種加載IO模塊驅(qū)動程序的方法流程圖;
圖4是本發(fā)明一個實施例提供的一種加載IO模塊驅(qū)動程序的裝置示意圖;
圖5是本發(fā)明另一個實施例提供的一種加載IO模塊驅(qū)動程序的裝置示意圖;
圖6是本發(fā)明又一個實施例提供的一種加載IO模塊驅(qū)動程序的裝置示意圖;
圖7是本發(fā)明再一個實施例提供的一種加載IO模塊驅(qū)動程序的裝置示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例,基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖1所示,本發(fā)明實施例提供了一種加載IO模塊驅(qū)動程序的方法,該方法可以包括以下步驟:
步驟101:將測試服務(wù)器與至少一個待測試存儲器相連,并在所述測試服務(wù)器上存儲驅(qū)動加載腳本;
步驟102:針對于每一個所述待測試存儲器,掃描所述待測試存儲器上IO模塊的型號PN碼;
步驟103:根據(jù)所述PN碼,確定所述IO模塊的類型;
步驟104:根據(jù)所述IO模塊的類型,在所述測試服務(wù)器上運行所述驅(qū)動加載腳本,加載所述待測試存儲器上所述IO模塊的驅(qū)動程序。
本發(fā)明實施例提供了一種加載IO模塊驅(qū)動程序的方法,將至少一個待測試存儲器與測試服務(wù)器相連,并在測試服務(wù)器上存儲驅(qū)動加載腳本,針對于與測試服務(wù)器相連的每一個待測試存儲器,掃描待測試存儲器上IO模塊的PN碼,根據(jù)IO模塊的PN碼確定IO模塊的類型,根據(jù)IO模塊的類型運行驅(qū)動加載腳本,加載待測試存儲器上IO模塊的驅(qū)動程序。由此可見,預(yù)先將驅(qū)動加載腳本存儲到測試服務(wù)器上,通過掃描IO模塊的PN碼確定IO模塊的類型,驅(qū)動加載腳本運行后根據(jù)IO模塊的類型自動完成驅(qū)動程序的加載,無需手動輸入復(fù)雜的指令代碼,從而可以提高加載存儲器上IO模塊驅(qū)動程序的效率。
在本發(fā)明一個實施例中,在步驟102中掃描待測試存儲器上IO模塊的PN碼之前,針對于每一個待測試存儲器,可以首先掃描該待測試存儲器上IO模塊的序列號,根據(jù)IO模塊的序列號創(chuàng)建與該待測試存儲器相對應(yīng)的日志文件。通過運行預(yù)先存儲到測試服務(wù)器上的日志記錄腳本,將后續(xù)掃描IO模塊PN碼、根據(jù)PN碼確定IO模塊類型及根據(jù)IO模塊類型加載驅(qū)動程序的過程及結(jié)果記錄到該待測試存儲器相對應(yīng)的日志文件中。
具體地,通過預(yù)先在測試存儲器上存儲日志記錄腳本,針對于每一個待測試存儲器,在開始加載IO模塊的驅(qū)動程序之前,掃描該存儲器上IO模塊的序列號,由于IO模塊的序列號具有唯一性,根據(jù)IO模塊的序列號形成對應(yīng)于該待測試存儲器的日志文件。在日志文件形成之后,對日志記錄腳本進行運行,在日志記錄腳本進行運行的過程中,日志記錄腳本能夠?qū)⒑罄m(xù)進行的掃描IO模塊PN碼、根據(jù)PN碼確定IO模塊類型及根據(jù)IO模塊類型加載驅(qū)動程序的過程及結(jié)果寫入到日志文件中。這樣,針對于每一個待測試存儲器形成一個日志文件,并在日志文件中記錄對該待測試存儲器上IO模塊驅(qū)動程序進行加載的過程及結(jié)果,通過對日志文件進行查看,可以確定驅(qū)動程序加載的整個過程,方便驅(qū)動程序加載失敗時進行原因分析,提高了該加載IO模塊驅(qū)動程序的方法的易用性。
在本發(fā)明一個實施例中,在步驟104中加載待測試存儲器上IO模塊的驅(qū)動程序之后,可以判斷待測試存儲器上IO模塊的驅(qū)動程序是否加載成功,如果是,通過測試服務(wù)器輸出驅(qū)動加載成功信息,否則通過測試服務(wù)器輸出驅(qū)動加載失敗信息。
具體地,針對于與測試服務(wù)器相連的每一個待測試存儲器,在完成加載該待測試存儲器上IO模塊的驅(qū)動程序后,判斷IO模塊的驅(qū)動程序是否成功,如果IO模塊的驅(qū)動程序加載成功,則通過測試服務(wù)器輸出驅(qū)動加載成功信息,如果IO模塊的驅(qū)動程序加載失敗,則通過測試服務(wù)器輸出驅(qū)動加載失敗信息。這樣,根據(jù)測試服務(wù)器輸出的信息,可以確定待測試存儲器上IO模塊的是否加載成功,進而確定是否對待測試存儲器進行相應(yīng)的測試,避免待測試存儲器上IO模塊的驅(qū)動未加載成功仍對待測試存儲器進行測試,造成測試失敗的情況發(fā)生。
在本發(fā)明一個實施例中,除了在測試服務(wù)器上存儲驅(qū)動加載腳本外,還可以在測試服務(wù)器上存儲硬件檢測腳本,并通過SAS線將各個待測試存儲器與測試服務(wù)器相連。針對于每一個待測試存儲器上,當(dāng)判斷出待測試存儲器上IO模塊的驅(qū)動程序加載成功后,運行硬件檢測腳本,通過SAS線抓取待測試存儲器的硬件信息;根據(jù)抓取到的硬件信息,判斷待測試存儲器與測試服務(wù)器之間SAS線連接狀態(tài)是否正常,以及判斷待測試存儲器上硬盤、IO模塊等功能模塊的在位狀態(tài)是否正常,如果上述兩個判斷的結(jié)果有一個為否,則發(fā)出報警信息。
具體地,在確定待測試存儲器上IO模塊的驅(qū)動程序加載成功后,從待測試存儲器上抓取硬件信息,根據(jù)所抓取的硬件信息對待測存儲器與測試服務(wù)器之間SAS線連接狀態(tài)、以及待測試存儲器上各個功能模塊的在位狀態(tài)進行判斷,如果SAS線連接狀態(tài)及各個功能模塊的在位狀態(tài)均正常,則可以針對該待測試存儲器進行各種類型的測試;如果SAS線連接狀態(tài)及各個功能模塊的在位狀態(tài)中存在一個或多個不正常,則說明待測試存儲器無法正常完成測試,相應(yīng)地發(fā)出報警信息。
如果待測試存儲器與測試服務(wù)器之間的SAS線連接狀態(tài)異常,或待測試存儲器上硬盤、IO模塊的在位狀態(tài)異常,均會導(dǎo)致測試服務(wù)器無法向待測試存儲器發(fā)送指令,無法正常完成對待測試存儲器進行各種類型的測試。在完成待測試存儲器上IO模塊驅(qū)動程序的加載后,通過抓取硬件信息的方式判斷待測試存儲器的硬件狀態(tài)是否正常,當(dāng)判斷硬件狀態(tài)正常后再對待測試存儲器進行各種測試,保證測試成功率;當(dāng)判斷硬件狀態(tài)存在異常后發(fā)出報警信息,測試人員可以根據(jù)報警信息對待測試存儲器存在的硬件故障進行排除。
下面以同時加載8臺存儲器上IO模塊的驅(qū)動程序為例,對本發(fā)明實施例提供的加載IO模塊驅(qū)動程序的方法作進一步詳細(xì)說明,如圖2所示,該方法可以包括以下步驟:
步驟201:通過SAS線將測試服務(wù)器與各個待測試存儲器相連。
在本發(fā)明一個實施例中,在測試服務(wù)器上安插HBA(Host bus adapter,主機總線適配器)卡,根據(jù)待測試存儲器的數(shù)量,通過相應(yīng)數(shù)量的SAS線將待測試存儲器與HBA卡相連,完成測試硬件環(huán)境的搭建。
例如,現(xiàn)有8臺存儲器需要進行測試,分別為存儲器1至存儲器8,通過服務(wù)器A對8臺存儲器進行測試時,在服務(wù)器A上安插HBA卡,通過8條SAS線將存儲器1至存儲器8分別與HBA卡相連,實現(xiàn)服務(wù)器A與8臺存儲器之間交互。
步驟202:在測試服務(wù)器上存儲驅(qū)動加載腳本、日志記錄腳本及硬件檢測腳本。
在本發(fā)明一個實施例中,在測試服務(wù)器上存儲驅(qū)動加載腳本、日志記錄腳本以及硬件檢測腳本,其中,驅(qū)動加載腳本在運行時能夠加載待測試存儲器上IO模塊的驅(qū)動程序,硬件檢測腳本在運行時能夠抓取硬件信息并判斷硬件狀態(tài),日志記錄腳本能夠創(chuàng)建日志文件并將驅(qū)動程序加載過程和結(jié)果、待測試存儲器的硬件信息寫入日志文件。
例如,在服務(wù)器A上存儲文件名為load.ini的驅(qū)動加載腳本,文件名為record.ini的日志記錄腳本及文件名為detect.ini的硬件檢測腳本。
步驟203:掃描待測試存儲器上IO模塊的序列號,運行日志記錄腳本,根據(jù)所述序列號形成對應(yīng)的日志文件。
在本發(fā)明一個實施例中,針對于與測試服務(wù)器相連的每一個待測試存儲器,通過掃描槍等設(shè)備掃描待測試存儲器上IO模塊的序列號,其中IO模塊的序列號位于待測試存儲器機箱上或待測試存儲器中IO模塊上。在獲取到IO模塊的序列號后,運行存儲在測試服務(wù)器上的日志記錄腳本,日志記錄腳本根據(jù)掃描獲得的序列號形成與待測試存儲器相對應(yīng)的日志文件。在日志文件創(chuàng)建完成后,日志記錄腳本持續(xù)運行,將后續(xù)各個步驟的操作及操作結(jié)果記錄到日志文件中。
例如,存儲器1至存儲器8上IO模塊的序列號以條形碼的形式粘貼在各自的機箱上,通過與服務(wù)器A相連的掃描槍依次對存儲器1至存儲器8機箱上IO模塊序列號的條形碼進行掃描,分別獲取8個存儲器上IO模塊的序列號。在服務(wù)器A上運行文件名為record.ini的日志記錄腳本,根據(jù)各個存儲器上IO模塊的序列號,分別形成對應(yīng)于8個存儲器的日志文件。日志記錄腳本持續(xù)運行將后續(xù)步驟的過程及結(jié)果記錄到對應(yīng)的日志文件中,比如,將后續(xù)針對存儲器1進行的各項操作及操作結(jié)果寫入存儲器對應(yīng)的日志文件中。
步驟204:掃描待測試存儲器上IO模塊的PN碼。
在本發(fā)明一個實施例中,針對于每一個待測試存儲器,通過掃描槍等掃描設(shè)備掃描待測試存儲器上IO模塊的PN碼,其中IO模塊的PN碼位于待測試存儲器機箱上或待測試存儲器中IO模塊上。
例如,存儲器1至存儲器8上IO模塊的PN碼以條形碼的形式粘貼中各自的機箱上,通過與服務(wù)器A相連的掃描槍依次對存儲器1至存儲器8上標(biāo)識有IO模塊PN碼的條形碼,分別獲取存儲器1至存儲器8上IO模塊的PN碼,其中存儲器1至存儲器8上IO模塊的PN碼依次為PN碼1至PN碼8。
步驟205:根據(jù)IO模塊的PN碼確定IO模塊的類型。
在本發(fā)明一個實施例中,在獲取到各個待測試存儲器上IO模塊對應(yīng)的PN碼后,根據(jù)預(yù)先存儲在配置文件中的PN碼與IO模塊類型的對應(yīng)關(guān)系,分別確定各個待測試存儲器上IO模塊的類型。
例如,配置文件中記錄有各種IO模塊類型與PN碼的對應(yīng)關(guān)系,根據(jù)存儲器1至存儲器8上IO模塊的PN碼,分別確定存儲器1至存儲器8上IO模塊的類型。比如根據(jù)存儲器1對應(yīng)的PN碼1,確定存儲器1上IO模塊的類型為SAS類型;根據(jù)存儲器2對應(yīng)的PN碼2,確定存儲器2上IO模塊的類型為光纖通道FC類型。
步驟206:運行驅(qū)動加載腳本,根據(jù)IO模塊的類型加載待測試存儲器上IO模塊對應(yīng)的驅(qū)動程序。
在本發(fā)明一個實施例中,在獲取到各個待測試存儲器上IO模塊的類型后,在測試服務(wù)器上運行驅(qū)動加載腳本,驅(qū)動加載腳本根據(jù)各個待測試存儲器上IO模塊的類型,在測試服務(wù)器上加載對應(yīng)類型的IO模塊驅(qū)動程序。
例如,在獲取到存儲器1至存儲器8上IO模塊的類型后,在服務(wù)器A上運行文件名為load.ini的驅(qū)動加載腳本,驅(qū)動加載腳本根據(jù)各個存儲器上IO模塊的類型,在服務(wù)器A上加載相對應(yīng)的IO模塊驅(qū)動程序。比如,驅(qū)動加載腳本根據(jù)存儲器1上SAS類型的IO模塊,在服務(wù)器A上加載對應(yīng)于存儲器1的SAS類型IO模塊的驅(qū)動程序;根據(jù)存儲器2上FC類型的IO模塊,在服務(wù)器A上加載對應(yīng)于存儲器2的FC類型IO模塊的驅(qū)動程序。
步驟207:判斷驅(qū)動程序是否加載成功,如果是,執(zhí)行步驟208,否則執(zhí)行步驟212。
在本發(fā)明一個實施例中,針對于每一個待測試存儲器,在完成對應(yīng)于該待測試存儲器的IO模塊驅(qū)動程序加載之后,判斷驅(qū)動程序加載是否成功,如果是,說明可以進行后續(xù)測試處理,相應(yīng)地執(zhí)行步驟208;如果否,說明驅(qū)動程序加載失敗,無法繼續(xù)后續(xù)測試處理,相應(yīng)地執(zhí)行步驟212。
例如,存儲器1、存儲器3及存儲器5的IO模塊驅(qū)動程序加載成功,針對存儲器1、存儲器3及存儲器5執(zhí)行步驟208;存儲器2、存儲器4及存儲器6至8的IO模塊驅(qū)動程序加載失敗,針對存儲器2、存儲器4及存儲器6至8執(zhí)行步驟212。
步驟208:運行硬件檢測腳本,抓取待測試存儲器的硬件信息。
在本發(fā)明一個實施例中,針對于每一驅(qū)動程序加載成功的待測試存儲器,在測試服務(wù)器上運行硬件檢測腳本,硬件檢測腳本通過SAS線抓取待測試存儲器的硬件信息,其中,硬件信息包括待測試存儲器與測試服務(wù)器之間SAS線的連接狀態(tài)信息以及待測試存儲器上各個功能模塊的在位狀態(tài)信息,功能模塊包括硬盤及IO模塊。
例如,經(jīng)過步驟207的判斷,存儲器1、存儲器3及存儲器5的驅(qū)動程序加載成功,運行文件名為detect.ini的硬件檢測腳本,硬件檢測腳本通過SAS線依次抓取存儲器1、存儲器3及存儲器5與服務(wù)器A之間SAS線的連接狀態(tài)信息,以及依次抓取存儲器1、存儲器3及存儲器5上硬盤、IO模塊的在位狀態(tài)信息。
步驟209:根據(jù)硬件信息判斷待測試存儲器上硬件狀態(tài)是否正常,如果是,執(zhí)行步驟210,否則執(zhí)行步驟211。
在本發(fā)明一個實施例中,針對于每一個抓取到硬件信息的待測試存儲器,根據(jù)所抓取到的硬件信息,判斷待測試存儲器與測試服務(wù)器之間SAS線的在位狀態(tài),以及待測試存儲器上硬盤、IO模塊等功能模塊的在位狀態(tài)是否均正常,如果是,說明待測試存儲器的硬件狀態(tài)正常,相應(yīng)地執(zhí)行步驟210;如果否,說明待測試存儲器的硬件狀態(tài)異常,相應(yīng)地執(zhí)行步驟211。
例如,根據(jù)存儲器1的硬件信息,確定存儲器1與服務(wù)器A之間的SAS線連接狀態(tài)正常,且存儲器1上各個硬盤及IO模塊的在位狀態(tài)正常,則針對存儲器1執(zhí)行步驟210;根據(jù)存儲器3的硬件信息,確定存儲器3與服務(wù)器A之間的SAS線連接狀態(tài)異常,根據(jù)存儲器5的硬件信息,確定存儲器5上硬盤的在位狀態(tài)異常,則針對存儲器3和存儲器5執(zhí)行步驟211。
步驟210:通過測試服務(wù)器發(fā)送驅(qū)動加載成功信息,并結(jié)束當(dāng)前流程。
在本發(fā)明一個實施例中,針對驅(qū)動程序加載成功且硬件狀態(tài)正常的待測試存儲器,通過測試服務(wù)器發(fā)送針對該待測試存儲器的驅(qū)動加載成功信息,以通知測試人員該待測試存儲器可以進行后續(xù)測試步驟。
例如,針對存儲器1,通過服務(wù)器A發(fā)送存儲器1上驅(qū)動程序加載成功的驅(qū)動加載成功信息。
步驟211:通過測試服務(wù)器發(fā)送報警信息,并結(jié)束當(dāng)前流程。
在本發(fā)明一個實施例中,針對驅(qū)動程序加載成功且硬件狀態(tài)異常的待測試存儲器,通過測試服務(wù)器發(fā)送報警信息,以通知測試人員該待測試存儲器的硬件狀態(tài)異常。
例如,針對存儲器3和存儲器5,通過服務(wù)器A發(fā)送報警信息。
步驟212:通過測試服務(wù)器發(fā)送驅(qū)動加載失敗信息。
在本發(fā)明一個實施例中,針對IO模塊驅(qū)動程序沒有加載成功的待測試存儲器,通過測試服務(wù)器發(fā)送驅(qū)動加載失敗信息,已通知測試人員該待測試存儲器的IO模塊驅(qū)動程序加載失敗。
例如,針對存儲器2、存儲器4及存儲器6至8,通過服務(wù)器A發(fā)送驅(qū)動加載失敗信息。
如圖3所示,本發(fā)明一個實施例提供了一種加載IO模塊驅(qū)動程序的方法,該方法可以包括:
步驟301:測試環(huán)境搭建。
在本發(fā)明實施例中,準(zhǔn)備好一臺服務(wù)器(插好HBA卡),依次將每臺待測存儲器與服務(wù)器之間用SAS線連接好(最多可同時測試8PCS存儲器);服務(wù)器安裝好Linux操作系統(tǒng);掛載U盤mount/dev/sdb4/mnt;復(fù)制即可cp/mnt/SAS_driver/usr/local/bin/Neptune/。
步驟302:執(zhí)行自動化程式。
在本發(fā)明實施例中,系統(tǒng)下執(zhí)行自動化程式(加執(zhí)行權(quán)限chmod+x SAS_driver;執(zhí)行命令./SAS_driver)。
步驟303:掃描IO模塊的序列號,形成日志文件。
在本發(fā)明實施例中,掃描存儲器中SAS I/O的序列號(每次測試的產(chǎn)品為同一型號),log會自動寫在以時間命名的文件夾中,路徑可以自己通過配置文件指定;程序中斷l(xiāng)og自動結(jié)束。
實現(xiàn)腳本可以包括:
print"Please scan uiomsn[]:";
chomp($uiom_sn=<STDIN>);
my$output_filename="20160906portchk_SAS_driver.log"。
步驟304:掃描IO模塊的PN碼,根據(jù)PN碼確定IO模塊的類型。
在本發(fā)明實施例中,掃描IO的PN,程序通過PN判斷IO的類型(例:待測產(chǎn)品為SAS IO)。
步驟305:加載驅(qū)動程序。
在本發(fā)明實施例中,程序自動加載驅(qū)動程序,加載成功程序繼續(xù),加載失敗打印error,處理異常后重新執(zhí)行程序。
實現(xiàn)腳本可以包括:
subload_driver;
if($fc){`modprobemptfc`}--FC類型的I/O
if($sas){`modprobemptsas`}---SAS類型的I/O。
步驟306:檢測硬件狀態(tài)。
在本發(fā)明實施例中,驅(qū)動加載完成后,程序通過SAS線檢測硬件狀態(tài),硬件狀態(tài)OK,打印測試PASS,同時測試結(jié)束;檢測硬件狀態(tài)異常,打印error信息,排除問題后重新測試。
實現(xiàn)腳本可以包括:
dprint("sg_map-i-x");
our@sg_map=`sg_map-x-i`;
chomp(@sg_map)。
在圖2及圖3所示的加載IO模塊驅(qū)動程序的方法中,驅(qū)動加載腳本可以包括以下內(nèi)容:
在圖2及圖3所示的加載IO模塊驅(qū)動程序的方法中,硬件檢測腳本可以包括以下內(nèi)容:
subget_uut_info{
($partial_uutsn)=@_;
($partial_uutsn_hex)=unpack('H*',"@_");
$partial_uutsn_hex=~s/(.{2})/$1/g;
our@iocs=();
ur@ips=();
dprint("sg_map-i-x");
our@sg_map=`sg_map-x-i`;
chomp(@sg_map);
foreach(@sg_map){
my$uut_match=-1;
my$type=-1;
my$ioc=-1;
$type=(split/\s+/,$_)[5];
$ioc=(split/\s+/,$_)[1];
if($type==13){
my$dev_sg;
my@UUT_SGSN=();
my@pg83=();
my@pg85=();
my@scan_parts=(split/\s+/,$_);
$dev_sg=$scan_parts[0];
my$maybe_fw_prefix=$scan_parts[-1];
@pg85=`sg_inq-p 85h$dev_sg 2>/dev/null`;
@pg83=`sg_inq-p 83h$dev_sg 2>/dev/null`;
chomp(@pg83);
chomp(@pg85);
foreach(@pg83){
if($_=~/$partial_uutsn/or(/$partial_uutsn_hex/)){
$uut_match=1;
}
}
if($uut_match==1){
#Everything after this line is specific to the UUT we are testing our$fw_prefix=$maybe_fw_prefix;
dprint("(get_uut_info)dev_sg:'$dev_sg'");
@chap_ips=();
foreach(@pg85){
next unless/http:/;
my$check_ip=(split/http\:///)[1];
next if($check_ipeq"0.0.0.0");
next if($check_ipeq"");
dprint("(get_uut_info)check_ip:'$check_ip'");
my$telnet;
$retries=5;
while($retries--){
$telnet=chap->new($check_ip);
if(($telnet==-1)||(not defined($telnet))){
if($retries){
sleep 5;
}else{
print"\n\nERROR[$telnet]:UNABLE TO CONNECT TO IP$check_ip EXITING!??!\n\n\n";
exit;
}
}else{
$retries=0;
}
}
my$retries=5;
while($retries--){
@chap_ips=$telnet->get_ip_addresses;
if(@chap_ips){
$retries=0;
}else{
if($retries){
print"Got blank MC IP from MC CLI,retrying...$retries\n";
sleep 30;
}else{
print"\n\nERROR:UNABLE TO GET MC IP FROM MC CLI,EXITING!?。n\n\n";
exit;
}
}
如圖4所示,本發(fā)明一個實施例提供了一種加載IO模塊驅(qū)動程序的裝置,包括:掃描單元401、識別單元402及加載單元403;
所述掃描單元401,用于針對于每一個與測試服務(wù)器相連的待測試存儲器,掃描所述待測試存儲器上IO模塊的型號PN碼;
所述識別單元402,用于根據(jù)所述掃描單元401獲取到的所述PN碼,確定所述IO模塊的類型;
所述加載單元403,用于根據(jù)所述識別單元402確定的所述IO模塊的類型,在所述測試服務(wù)器上運行預(yù)先存儲在是測試服務(wù)器上的驅(qū)動加載腳本,加載所述待測試存儲器上所述IO模塊的驅(qū)動程序。
在本發(fā)明一個實施例中,如圖5所示,該加載IO模塊驅(qū)動程序的裝置還可以包括:日志形成單元504;
所述掃描單元401,進一步用于針對于每一個所述待測試存儲器,掃描所述待測試存儲器上IO模塊的序列號;
所述日志形成單元504,用于根據(jù)所述掃描單元401獲取到的所述序列號,形成對應(yīng)于是待測試存儲器的日志文件,并在所述測試服務(wù)器上運行預(yù)先存儲的日志記錄腳本,將所述掃描單元401掃描PN碼、所述識別單元402確定IO模塊類型及所述加載單元403加載驅(qū)動的過程及結(jié)果記錄到與所述待測試存儲器相對應(yīng)的日志文件中。
在本發(fā)明一個實施例中,如圖6所示,該加載IO模塊驅(qū)動程序的裝置還可以包括:判斷單元605;
所述判斷單元605,用于判斷所述加載單元403是否將所述待測試存儲器上IO模塊的驅(qū)動程序加載成功,如果是,通過所述測試服務(wù)器輸出驅(qū)動加載成功信息,否則通過所述測試服務(wù)器輸出驅(qū)動加載失敗信息。
在本發(fā)明一個實施例中,如圖7所示,該加載IO模塊驅(qū)動程序的裝置還可以包括:硬件檢測單元706;
硬件檢測單元706,用于根據(jù)所述判斷單元605的判斷結(jié)果,當(dāng)所述待測試存儲器上IO模塊的驅(qū)動程序加載成功后,運行預(yù)先存儲在所述測試服務(wù)器上的硬件檢測腳本,通過連接所述測試服務(wù)器與各個所述待測試存儲器的SAS線抓取所述待測試存儲器的硬件信息;并根據(jù)所述硬件信息,判斷所述待測試存儲器與所述測試服務(wù)器之間SAS線連接狀態(tài)以及所述待測試存儲器上各個功能模塊的在位狀態(tài)是否均正常,如果否,發(fā)出報警信息;其中,所述功能模塊包括硬盤及所述IO模塊中的任意一個或全部。
上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實施例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實施例中的敘述,此處不再贅述。
本發(fā)明實施例還提供了一種可讀介質(zhì),包括執(zhí)行指令,當(dāng)存儲控制器的處理器執(zhí)行所述執(zhí)行指令時,所述存儲控制器執(zhí)行本發(fā)明實施例提供的任意一種加載IO模塊驅(qū)動程序的方法。
本發(fā)明實施例還提供了一種存儲控制器,包括:處理器、存儲器和總線;
所述存儲器用于存儲執(zhí)行指令,所述處理器與所述存儲器通過所述總線連接,當(dāng)所述存儲控制器運行時,所述處理器執(zhí)行所述存儲器存儲的所述執(zhí)行指令,以使所述存儲控制執(zhí)行本發(fā)明實施例提供的任意一種加載IO模塊驅(qū)動程序的方法。
本發(fā)明實施例提供了一種加載IO模塊驅(qū)動程序的方法及裝置,至少具有如下有益效果:
1、在本發(fā)明實施例提供的加載IO模塊驅(qū)動程序的方法及裝置中,將至少一個待測試存儲器與測試服務(wù)器相連,并在測試服務(wù)器上存儲驅(qū)動加載腳本,針對于與測試服務(wù)器相連的每一個待測試存儲器,掃描待測試存儲器上IO模塊的PN碼,根據(jù)IO模塊的PN碼確定IO模塊的類型,根據(jù)IO模塊的類型運行驅(qū)動加載腳本,加載待測試存儲器上IO模塊的驅(qū)動程序。由此可見,預(yù)先將驅(qū)動加載腳本存儲到測試服務(wù)器上,通過掃描IO模塊的PN碼確定IO模塊的類型,驅(qū)動加載腳本運行后根據(jù)IO模塊的類型自動完成驅(qū)動程序的加載,無需手動輸入復(fù)雜的指令代碼,從而可以提高加載存儲器上IO模塊驅(qū)動程序的效率。
2、在本發(fā)明實施例提供的加載IO模塊驅(qū)動程序的方法及裝置中,針對于每一個待測試存儲器形成一個日志文件,并在日志文件中記錄對該待測試存儲器上IO模塊驅(qū)動程序進行加載的過程及結(jié)果,通過對日志文件進行查看,可以確定驅(qū)動程序加載的整個過程,方便驅(qū)動程序加載失敗時進行原因分析,提高了該加載IO模塊驅(qū)動程序的方法的易用性。
3、在本發(fā)明實施例提供的加載IO模塊驅(qū)動程序的方法及裝置中,在完成加載該待測試存儲器上IO模塊的驅(qū)動程序后,判斷IO模塊的驅(qū)動程序是否成功,如果IO模塊的驅(qū)動程序加載成功,則通過測試服務(wù)器輸出驅(qū)動加載成功信息,如果IO模塊的驅(qū)動程序加載失敗,則通過測試服務(wù)器輸出驅(qū)動加載失敗信息。這樣,根據(jù)測試服務(wù)器輸出的信息,可以確定待測試存儲器上IO模塊的是否加載成功,進而確定是否對待測試存儲器進行相應(yīng)的測試,避免待測試存儲器上IO模塊的驅(qū)動未加載成功仍對待測試存儲器進行測試,造成測試失敗的情況發(fā)生。
4、在本發(fā)明實施例提供的加載IO模塊驅(qū)動程序的方法及裝置中,通過Perl語言編寫腳本,能夠批量加載IO模塊的驅(qū)動程序,從而是測試操作簡單方便??梢酝瑫r大批量的對存儲器進行測試,每個測試步驟都有測試日志產(chǎn)生,不但效率高,而且有重量保障。在提高測試效率和測試良率的同時,降低了測試的成本。
需要說明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個······”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同因素。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲在計算機可讀取的存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)中。
最后需要說明的是:以上所述僅為本發(fā)明的較佳實施例,僅用于說明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。