一種自動檢測硬盤異常的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,具體地說是一種自動檢測硬盤異常的方法。
【背景技術(shù)】
[0002]一般的,隨著服務(wù)器的不斷發(fā)展和壯大,服務(wù)器供應(yīng)商已經(jīng)開拓各個領(lǐng)域服務(wù)器的應(yīng)用,比如互聯(lián)網(wǎng)、金融…等??蛻舻膽?yīng)用較之過去,變得復(fù)雜多樣。硬盤作為服務(wù)器關(guān)鍵部件之一,曾經(jīng)不止一次的出現(xiàn)硬盤掉盤的問題,嚴(yán)重影響客戶的數(shù)據(jù)存儲應(yīng)用,這是客戶難以接受的嚴(yán)重質(zhì)量問題。
[0003]隨著服務(wù)器行業(yè)的不斷的發(fā)展,Rack作為互聯(lián)網(wǎng)發(fā)展整體解決方案的趨勢已經(jīng)更加明顯;同時隨著rack節(jié)點數(shù)的增加,硬盤本身容量的增加,存儲子系統(tǒng)也有了前所未有的壯大,這樣對于硬盤、控制器兼容性、背板、線纜這一條鏈路的兼容性和穩(wěn)定性就變得尤為重要。
[0004]作為服務(wù)器產(chǎn)品提供商,如何能滿足用戶多樣化的需求,確保各種應(yīng)用環(huán)境的穩(wěn)定、可靠是現(xiàn)階段必須面臨和考慮的問題。因此對于硬盤在服務(wù)器上使用,必須進(jìn)行全面的功能性、穩(wěn)定性及性能等的測試和驗證,從而確保該產(chǎn)品的質(zhì)量。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的技術(shù)任務(wù)是解決現(xiàn)有技術(shù)的不足,提供一種自動檢測硬盤異常的方法。
[0006]本發(fā)明的技術(shù)方案是按以下方式實現(xiàn)的,該自動檢測硬盤異常的方法,該方法的步驟是:
在服務(wù)器上準(zhǔn)備測試環(huán)境,搭建測試平臺,安裝操作系統(tǒng),安裝測試工具,配置測試參數(shù),開始測試,監(jiān)控測試過程,條件選擇:
如果監(jiān)視測試過程失敗,則查看報錯信息并記錄硬盤SN碼,做出后續(xù)處理,結(jié)束測試; 如果監(jiān)視測試過程無任何異常,則查看測試結(jié)果,結(jié)束測試。
[0007]在服務(wù)器上準(zhǔn)備測試環(huán)境,搭建測試平臺,安裝Linux或者CentOS操作系統(tǒng),安裝測試工具,將測試工具拷貝到測試機(jī),先后運行check, sh程序、hd.sh程序,根據(jù)實際需要運行重啟的次數(shù)修改reboot, sh,并將其放在root/, bashrc,配置測試參數(shù),開始測試,監(jiān)控測試過程,條件選擇:
如果監(jiān)視測試過程失敗,則查看報錯信息并記錄硬盤SN碼,做出后續(xù)處理,結(jié)束測試; 如果監(jiān)視測試過程無任何異常,則查看測試結(jié)果,結(jié)束測試。
[0008]開始測試之前,編寫測試腳本,測試之前先將硬盤相關(guān)信息讀出并自動記錄到文本中,每次重新啟動服務(wù)器都會重新運行該測試腳本,檢測硬盤所有信息并與之前記錄信息作比較,若有異常就會自動報錯,進(jìn)入條件選擇。
[0009]測試腳本設(shè)置重啟次數(shù),也可以根據(jù)提示自動停止測試,當(dāng)有問題出現(xiàn)時,設(shè)置紅色提示,并自動停止測試。
[0010]本發(fā)明與現(xiàn)有技術(shù)相比所產(chǎn)生的有益效果是: 該自動檢測硬盤異常的方法是結(jié)合Linux下smartctl命令對硬盤信息和健康狀態(tài)的檢測,并融入到服務(wù)器的重啟測試中,通過長時間的重啟測試及每次的硬盤檢測測試,達(dá)到存儲子系統(tǒng)穩(wěn)定性測試目的,同時也能夠兼顧硬盤可靠性和穩(wěn)定性測試。
[0011]該自動檢測硬盤異常的方法操作簡單,自動化程度高,實用性較強(qiáng),能夠節(jié)省人力,有效確保了服務(wù)器的穩(wěn)定性和可靠性,是驗證產(chǎn)品質(zhì)量的非常有效的方法。
【附圖說明】
[0012]附圖1是本發(fā)明的流程示意圖。
【具體實施方式】
[0013]下面結(jié)合附圖對本發(fā)明的一種自動檢測硬盤異常的方法作以下詳細(xì)說明。
[0014]如附圖所示,本發(fā)明的自動檢測硬盤異常的方法,該方法的步驟是:
在服務(wù)器上準(zhǔn)備測試環(huán)境,搭建測試平臺,安裝操作系統(tǒng),安裝測試工具,配置測試參數(shù),開始測試,監(jiān)控測試過程,條件選擇:
如果監(jiān)視測試過程失敗,則查看報錯信息并記錄硬盤SN碼,做出后續(xù)處理,結(jié)束測試; 如果監(jiān)視測試過程無任何異常,則查看測試結(jié)果,結(jié)束測試。
[0015]在服務(wù)器上準(zhǔn)備測試環(huán)境,搭建測試平臺,安裝Linux或者CentOS操作系統(tǒng),安裝測試工具,將測試工具拷貝到測試機(jī),先后運行check, sh程序、hd.sh程序,根據(jù)實際需要運行重啟的次數(shù)修改reboot, sh,并將其放在root/, bashrc,配置測試參數(shù),開始測試,監(jiān)控測試過程,條件選擇:
如果監(jiān)視測試過程失敗,則查看報錯信息并記錄硬盤SN碼,做出后續(xù)處理,結(jié)束測試; 如果監(jiān)視測試過程無任何異常,則查看測試結(jié)果,結(jié)束測試。
[0016]開始測試之前,編寫測試腳本,測試之前先將硬盤相關(guān)信息讀出并自動記錄到文本中,每次重新啟動服務(wù)器都會重新運行該測試腳本,檢測硬盤所有信息并與之前記錄信息作比較,若有異常就會自動報錯,進(jìn)入條件選擇。
[0017]測試腳本設(shè)置重啟次數(shù),也可以根據(jù)提示自動停止測試,當(dāng)有問題出現(xiàn)時,設(shè)置紅色提示,并自動停止測試。
[0018]該自動檢測硬盤異常的方法是結(jié)合Linux下smartctl命令對硬盤信息和健康狀態(tài)的檢測,并融入到服務(wù)器的重啟測試中,通過長時間的重啟測試及每次的硬盤檢測測試,達(dá)到存儲子系統(tǒng)穩(wěn)定性測試目的,同時也能夠兼顧硬盤可靠性和穩(wěn)定性測試。
[0019]硬盤SN碼是SerialNumber的縮寫,有時也叫SerialNo,也就是產(chǎn)品序列號。
[0020]測試程序的腳本,主要是為了檢測硬盤的健康狀態(tài)以及存儲子系統(tǒng)的穩(wěn)定性和可靠性,以達(dá)到提高子系統(tǒng)穩(wěn)定性和確保產(chǎn)品質(zhì)量的目的。
[0021]S.M.A.R.T.是英文 Self — Monitoring Analysis and Reporting Technology(自動檢測分析及報告技術(shù))的簡寫。它能對硬盤的磁頭單元、硬盤溫度、盤片表面介質(zhì)材料、馬達(dá)及其驅(qū)動系統(tǒng)、硬盤內(nèi)部電路等進(jìn)行監(jiān)測,及時分析并預(yù)報硬盤可能發(fā)生的問題。
[0022]利用Linux下smartctl命令可以查看硬盤型號、Firmware版本、容量大小、健康狀態(tài)等的功能,編寫測試腳本:測試前先將硬盤相關(guān)信息讀出并自動記錄到某個文本中,每次重新啟動服務(wù)器都會重新運行該腳本,檢測硬盤所有信息并與之前記錄信息作比較,若有異常就會自動報錯。根據(jù)報錯信息就可以找到是哪一塊硬盤有問題,是什么樣的問題,然后再做進(jìn)一步的分析和驗證。此腳本可以設(shè)置重啟次數(shù),也可以根據(jù)提示自動停止測試,當(dāng)有問題出現(xiàn)時,有紅色提示,并自動停止測試。
[0023]測試程序如下:
I)、reboot, sh 腳本代碼: console='/usr/bin/tty'
#.bashrc
#User specific aliases and funct1nsalias rm=i rm ~i
alias cp=i cp ~ialias mv=’mv ~i
#Source global definit1nsif [ -f /etc/bashrc ]; then./etc/bashrc
fi
#source /opt/intel/composer_xe_2013/bin/compilervars.sh intel64
#source /opt/intel/mkl/bin/intel64/mklvars_intel64.sh
#source /opt/intel/impi/4.1.1.036/bin64/mpivars.sh
case $console in
/dev/ttyl | /dev/pts[0-100])
if [ -f /tmp/rcishu ];then
rcishu='cat /tmp/rcishu'
else
/bin/touch rcishurcishu=0fi
if [ $rcishu -1t 50 ];then
sh /opt/scripts/hd.sh
sh /opt/scripts/hd.sh >> /tmp/hdtest.txt read _t 5 -p 〃Press y Break Reboot 〃 aa if [ "${aar = ? ] I I [ "${aar = "Y" ] ; then echo Breaked Reboot Cycle!!!! else
rcishu=$ (($rcishu+l)) echo 〃$ {rcishu}〃> /tmp/rcishu echo reboot $rcishu /sbin/reboot fifi
esac
3)、check, sh腳本代碼:
#!/bin/sh
rm /tmp/paizh1.txt _rf/sbin/service ipmi restart > /dev/nullf He-/proc/cpuinfo
num='grep "physical id" $file |sort |uniq |awk , {print $4}, |wc -1'corenum='grep ^cpu cores" $file |sort |uniq | awk,{print $4},| sed -nr,H;${x; s/\n/ /g;p},'
clock='grep name $file |awk -F CPU ’ {print $2}’ |sed _e ’s/ 0 //g’ _e ’s///g -e ,s/GHz//g, Iawk _F@ , {print $2}, |sort |uniq|sed -nr , H;${x; s八n/ /g;p},'
model='grep name $file |awk -F CPU ’ {print $2}’ |sed _e ’s/ 0 //g _e ’s///g Iawk -F@ , {print $1}, |sort |uniq |sed -nr , H;${x; s八n/ /g;p}, |tr [a~z][A-Z]'
cache= grep 〃cache size〃 $file | sort | uniq | awk,{print $4},| sed -nr,H;${x; s/\n/ /g;p},'
let cache=cache/1024cache=$cache〃M〃
stepping='grep stepping /proc/cpuinfo |uniq |sed,s/ //g \ awk -F:,{print$2}’ Ised -nr ’ H;${x; s/\n/ /g;p},'
{
echo //cpu_number=//$num////echo 〃cpu—core=\〃$corenum\〃〃echo //cpu_type=//$model////echo 〃cpu—cache=\〃$cache\〃〃echo 〃cpu—clock=\〃$clock\〃〃echo "cpu—Stepping=VSsteppingV"
} >/tmp/cpu.txtfor i in {a..1}do
if [ -b /dev/sd$i ];then
/usr/sbin/smartctl -a /dev/sd$i >hdinf0.$$
model='grep Model hdinf0.$$ |sed,s/: */:/g,|awk -F:,{print $2}fw='grep Firmware hdinf0.$$ |sed ’s/::/g \awk -F: ’ {print $2}serial='grep Serial hdinf0.$$ |sed ’s/::/g \awk -F: ’ {print $2}cap=' grep User hdinf0.$$ | sed,s/::/g \ sed,s/,//g,| awk -F:,{printf ("%dG\n",$2/1000/1000/1000)}’ 'smart='grep 〃SMART support is: Enabled" hdinf0.$$'smartlog= grep 〃No Errors Logged" hdinf0.$$fi
done
{
echo 〃hdmodel=\〃$model\〃〃
echo //hdfw=//$fw////
echo 〃serial=\〃$serial\〃〃
echo //hdcap=//$cap////
echo 〃smart=\〃$smart\〃〃
echo 〃smartlog=\〃$smartlog\〃〃
} >/tmp/hd.txt
sysmem='grep MemTotal /proc/meminfo |awk ’ {print $2}sysmem='echo "scale=2;$sysmem/1024/1024"|bc'to talmem=//$ sysmem^
{
meminfo= /usr/sbin/dmidecode |grep -A16 "Memory Device$〃 | sed _e ’/./{H;$!d;}, \
-e J X;/Memory Device\n/!d;,\
-e,s/: /:/g \
-e ’s/〈/{/g,\
-e ’s/>/}/g’ \
-