Запустить smartctl на всех дисках сервера

Запустить smartctl на всех дисках сервера

Мой вопрос довольно прост: я хочу запустить команду smartctl -i -Aна всех дисках, которые есть на сервере. Думаю, у меня слишком много серверов с разным количеством дисков и RAID-контроллеров, тогда мне нужно просканировать все драйверы для диагностики. Я думаю запустить smartctl --scan | awk '{print $1}' >> test.log, так что если я открою test.log, у меня будет вся информация о дисках.
После этого мне нужно запустить некоторые конструкции if или do для сканирования со smartctlвсеми драйверами. Я не знаю, является ли это лучшим способом сделать это, так как мне нужно также идентифицировать RAID-контроллер. Двигаюсь в правильном направлении?

Редактировать:

Я привык использовать следующие команды для устранения неполадок:

Без 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

Контроллер PERC

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

Контроллер 3ware

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

Контроллер SmartArray и Megaraid:

smartctl –a –d cciss,0 /dev/cciss/c0d0
/opt/3ware/9500/tw_cli show
cd /tmp

DD (Перезаписать блок диска (УНИЧТОЖИТЬ ДАННЫЕ)):

dd if=/dev/zero of=/dev/HD* bs=4M
HD*: sda, sdb…

Горение (стресс-тест (УНИЧТОЖЕНИЕ ДАННЫХ)):

/opt/systems/bin/vs-burnin --destructive --time=<hours> /tmp/burninlog.txt

Dmesg&kernerrors:

tail /var/log/kernerrors
dmesg |grep –i –E “”ata”|”fault”|”error”

Итак, я пытаюсь автоматизировать эти команды.
Я хочу, чтобы скрипт проверял все диски, которые есть на хосте, и запускал соответствующую smartctlкоманду для этого случая.
Что-то вроде меню с некоторыми опциями, которые позволяют мне выбрать, хочу ли я запустить a smartctlили некоторую разрушительную команду, если я выберу запуск, smartctl
скрипт просканирует все диски и запустит команду в соответствии с конфигурацией хоста (с RAID-контроллером или без него),
а если я выберу запуск разрушительной команды, скрипт попросит меня ввести номер диска, который я хочу сделать.


Редактировать 2:

Я решил свою проблему с помощью следующего скрипта:

#!/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.

Я не знаю, является ли это решение правильным или лучшим, но мне оно подходит!
Спасибо за любую помощь!!

решение1

Поэтому я пытаюсь автоматизировать эти команды.

Это уже существует и проявляется в 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.

решение2

@xeruf. Я сталкиваюсь с этим вопросом в своей работе время от времени, и мне приходится переделывать ее, лол. Просто чтобы я и другие люди могли найти базовую команду вывода Smart, я запускаю это:

for i in $(ls /dev/sd?); do
    echo "$i"
    sudo smartctl -a $i
done

Связанный контент