私の質問は非常に単純です。サーバーにあるすべてのディスクでコマンドsmartctl -i -A
を実行したいと思います。ディスクとRAIDコントローラーの数が異なるサーバーが多すぎると考えて、診断のためにすべてのドライバーをスキャンする必要があります。 smartctl --scan | awk '{print $1}' >> test.log
を実行することを考えているので、test.logを開くと、すべてのドライブ情報が含まれています。
この後、smartctl
すべてのドライバーでスキャンするためにいくつかのifまたは構築を実行する必要があります。 RAIDコントローラも特定する必要があるため、これがこれを行うための最良の方法であるかどうかはわかりません。正しい方向に向かっていますか?
私はこれらのコマンドを使用してトラブルシューティングを行うことに慣れています。
for i in {c..d}; do
echo "Disk sd$i" $SN $MD
smartctl -i -A /dev/sd$i |grep -E "^ "5"|^"197"|^"198"|"FAILING_NOW"|"SERIAL""
done
for i in {0..12}; do
echo "$i" $SN $MD
smartctl -i -A -T permissive /dev/sda -d megaraid,$i |grep -E "^ "5"|^"197"|^"198"|"FAILING_NOW"|"SERIAL""
done
/usr/sbin/megastatus –physical
/usr/sbin/megastatus --logical
for i in {0..10}; do
echo "Disk $i" $SN $MD
smartctl -i -A /dev/twa0 -d 3ware,$i |grep -E "^ "5"|^"197"|^"198"|"FAILING_NOW"|"SERIAL""
done
smartctl –a –d cciss,0 /dev/cciss/c0d0
/opt/3ware/9500/tw_cli show
cd /tmp
dd if=/dev/zero of=/dev/HD* bs=4M
HD*: sda, sdb…
/opt/systems/bin/vs-burnin --destructive --time=<hours> /tmp/burninlog.txt
tail /var/log/kernerrors
dmesg |grep –i –E “”ata”|”fault”|”error”
だから私がやろうとしているのは、これらのコマンドを自動化することです。
スクリプトで、ホストが持っているすべてのディスクを確認し、ケースに応じて適切なsmartctl
コマンドを実行します。smartctl
を実行するかどうかを選択できるオプションのあるメニューや、smartctl
を実行するかどうかを指定する破壊的なコマンドのようなもの
スクリプトはすべてのディスクをスキャンし、ホスト構成(RAIDコントローラーあり/なし)に従ってコマンドを実行します。
そして、破壊的なコマンドを実行することを選択した場合、スクリプトは、これを実行したいディスク番号を入力するように要求します。
次のスクリプトで問題を解決しました。
#!/bin/bash
# Troubleshoot.sh
# A more elaborate version of Troubleshoot.sh.
SUCCESS=0
E_DB=99 # Error code for missing entry.
declare -A address
# -A option declares associative array.
if [ -f Troubleshoot.log ]
then
rm Troubleshoot.log
fi
if [ -f HDs.log ]
then
rm HDs.log
fi
smartctl --scan | awk '{print $1}' >> HDs.log
lspci | grep -i raid >> HDs.log
getArray ()
{
i=0
while read line # Read a line
do
array[i]=$line # Put it into the array
i=$(($i + 1))
done < $1
}
getArray "HDs.log"
for e in "${array[@]}"
do
if [[ $e =~ /dev/sd* || $e =~ /dev/hd* ]]
then
echo "smartctl -i -A $e" >> Troubleshoot.log
smartctl -i -A $e >> Troubleshoot.log # Run smartctl into all disks that the Host have
fi
done
exit $? # In this case, exit code = 99, since that is function return.
この解決策が正しいか最良かはわかりませんが、私には役立ちます!
感謝します!!
だから私がやろうとしているのは、これらのコマンドを自動化することです。
これはすでに存在し、smartd
に現れます。
通常、/etc/smartd.conf
で目的の動作を構成する必要があります
例:
# DEVICESCAN: tells smartd to scan for all ATA and SCSI devices
# Alternative setting to report more useful raw temperature in syslog.
DEVICESCAN -I 194 -I 231 -I 9
または、ディスクを次のように明示的に配置することもできます
/dev/sdc -d 3ware,0 -a -s L/../../7/01
smartd
がエラーを発見すると、次のメールが届きます。
/dev/hdc -a -I 194 -W 4,45,55 -R 5 -m [email protected]
他にも多くのオプションとスイッチがあります。smartd.conf
のマンページを読む必要があります。