メタデバイス内の不良スライスを連続して自動的にチェックする 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 のエラーチェックを自動化するための出発点として利用できます。このスクリプトは、使用する構成に合わせて変更する必要があります。