メタデバイス内の不良スライスを連続して自動的にチェックする 1 つの方法は、cron によって呼び出されるスクリプトを記述する方法です。次にその例を示します。
# #ident "@(#)metacheck.sh 1.3 96/06/21 SMI" # # Copyright (c) 1992, 1993, 1994, 1995, 1996 by Sun Microsystems, Inc. # # # DiskSuite コマンド # MDBIN=/usr/sbin METADB=${MDBIN}/metadb METAHS=${MDBIN}/metahs METASTAT=${MDBIN}/metastat # # システムコマンド # AWK=/usr/bin/awk DATE=/usr/bin/date MAILX=/usr/bin/mailx RM=/usr/bin/rm # # 初期化 # eval=0 date=`${DATE} '+%a %b %e %Y'` SDSTMP=/tmp/sdscheck.${$} ${RM} -f ${SDSTMP} MAILTO=${*:-"root"} # default to root, or use arg list # # 複製の障害をチェック。フラグ内の大文字はエラーを示す。 # dbtrouble=`${METADB} | tail +2 | ¥ ${AWK} '{ fl = substr($0,1,20); if (fl ‾ /[A-Z]/) print $0 }'` if [ "${dbtrouble}" ]; then echo "" >>${SDSTMP} echo "SDS replica problem report for ${date}" >>${SDSTMP} echo "" >>${SDSTMP} echo "Database replicas are not active:" >>${SDSTMP} echo "" >>${SDSTMP} ${METADB} -i >>${SDSTMP} eval=1 fi # # メタデバイスの状態をチェック。状態が正常でない場合、何かが発生。 # mdtrouble=`${METASTAT} | ¥ ${AWK} '/State:/ { if ( $2 != "Okay" ) print $0 }'` if [ "${mdtrouble}" ]; then echo "" >>${SDSTMP} echo "SDS metadevice problem report for ${date}" >>${SDSTMP} echo "" >>${SDSTMP} echo "Metadevices are not Okay:" >>${SDSTMP} echo "" >>${SDSTMP} ${METASTAT} >>${SDSTMP} eval=1 fi # # ホットスペアが使用されているかどうかをチェック。 # hstrouble=`${METAHS} -i | ¥ ${AWK} ' /blocks/ { if ( $2 != "Available" ) print $0 }'` if [ "${hstrouble}" ]; then echo "" >>${SDSTMP} echo "SDS Hot spares in use ${date}" >>${SDSTMP} echo "" >>${SDSTMP} echo "Hot spares in usage:" >>${SDSTMP} echo "" >>${SDSTMP} ${METAHS} -i >>${SDSTMP} eval=1 fi # # 何かのエラーが発生した場合、ルート、またはコマンド行で指定された相手に # レポートをメールする。 # if [ ${eval} -ne 0 ]; then ${MAILX} -s "SDS problems ${date}" ${MAILTO} <${SDSTMP} ${RM} -f ${SDSTMP} fi exit ${eval} |
このようにスクリプトを呼び出す方法については、cron(1M) のマニュアルページを参照してください。
このスクリプトは、DiskSuite のエラーチェックを自動化するための出発点として利用できます。このスクリプトは、使用する構成に合わせて変更する必要があります。