Страница 1 из 1

Скрипт для автосоставления конфига smartd

Добавлено: 2011-04-14 20:50:36
Alex Keda
навеяно этим - http://sourceforge.net/mailarchive/mess ... d=27332885
писалось под свои девайсы. завтра ещё cciss допилю сюда.

Код: Выделить всё

#!/bin/sh

#="/dev/ad1 -a -m root -o on -S on -s (S/../.././22|L/../../6/23)"
tpl="-a -m root@`hostname` -o on -S on -s (S/../.././22|L/../../6/23)"

conf="/usr/local/etc/smartd.conf"

if test -f /usr/local/sbin/smartctl
then
        # OK
else
        echo "instal 'sysutils/smartmontools' before using"
        exit 1
fi

# create smartd.conf
echo "# config auto created `date +%Y-%m-%d` in `date +%H:%M:%S`" > $conf
echo "" >> $conf

# check LSI controllers
if test -e /dev/mpt0
then
        #echo "found device: /dev/mpt0"
        # scan for pass devices
        smartctl --scan-open | grep pass | awk '{print $1}' |
        {
        while read device
        do
                # check device
                if smartctl -a $device -d scsi >/dev/null 2>&1
                then
                        echo "# disk on LSI SCSI controller (/dev/mpt0)" >> $conf
                        echo "$device -d scsi $tpl" >> $conf
                fi
        done
        }
fi

# check 3ware controllers
if test -f /usr/local/sbin/tw_cli
then
        # check 3ware '9000/9500/9550/9650' series controller
        if test -e /dev/twa0
        then
                # get all used port on controller
                tw_cli /c0 show | grep ^p | grep -v NOT-PRESENT | awk '{print $1}' | tr -d "[:alpha:]" |
                {
                while read port
                do
                        echo "# disk on 3ware SATA/SAS controller" >> $conf
                        echo "/dev/twa0 -d 3ware,$port $tpl" >> $conf
                done
                }
        fi
        # check 3ware '5000/6000/7000/8000' series controller
        if test -e /dev/twe0
        then
                # get all used port on controller
                tw_cli /c0 show | grep ^p | grep -v NOT-PRESENT | awk '{print $1}' | tr -d "[:alpha:]" |
                {
                while read port
                do
                        echo "# disk on 3ware PATA/SATA controller" >> $conf
                        echo "/dev/twe0 -d 3ware,$port $tpl" >> $conf
                done
                }
        fi
else
        echo "3ware controllers skipped - required 'sysutils/tw_cli'"
fi


# foreach all disks in system
for disk in `sysctl -n kern.disks`
do
        #echo $disk
        type="`echo $disk | cut -c 1-2`"
        if [ $type = "ad" ]
        then
                echo "# disk on standart SATA/PATA controller" >> $conf
                echo "/dev/$disk $tpl" >> $conf
        fi
done

echo "" >> $conf
echo "# EOF" >> $conf

# create log file
touch /var/log/smartd.log

Re: Скрипт для автосоставления конфига smartd

Добавлено: 2011-04-15 7:25:58
Alex Keda
2 f_andrey
:cry:
таки я подумав же выбрал...
скрипт ОС-специфичный...

Re: Скрипт для автосоставления конфига smartd

Добавлено: 2011-04-15 9:15:16
f_andrey
Ну и форум специфичный, а тут не скриптик, а целый скриптище, так что пусть народ в шеле практикуется :) Хотя ту и под софт можно подвести, он же конкретной софтине почву готовит, в общем конечно сложно, напиши статью тогда будет однозначно ;)

Re: Скрипт для автосоставления конфига smartd

Добавлено: 2011-04-15 9:26:37
hizel
^_^ все правильно двинул

Re: Скрипт для автосоставления конфига smartd

Добавлено: 2011-04-15 18:53:02
Alex Keda
недошли руки до ciss - оказывается опция скана в новом smartd появилась - на тех серверах весь софт надо вначале обновить

на неделе допилю

Re: Скрипт для автосоставления конфига smartd

Добавлено: 2011-04-18 13:27:01
Alex Keda
добавил ciss
к сожалению, перебором, т.к. не знаю как получить списки дисков =((

Код: Выделить всё

srv0# cat /root/scripts/patches/restore/smartd.sh
#!/bin/sh

tpl="-a -m root@`hostname` -o on -S on -s (S/../.././22|L/../../6/23)"

conf="/usr/local/etc/smartd.conf"

if test -f /usr/local/sbin/smartctl
then
        # OK
else
        echo "instal 'sysutils/smartmontools' before using"
        exit 1
fi

# create smartd.conf
echo "# config auto created `date +%Y-%m-%d` in `date +%H:%M:%S`" > $conf
echo "" >> $conf

# check HP SmartArray
ciss_list="`ls /dev | grep ciss`"
for adapter in $ciss_list
do
        if test -e /dev/$adapter
        then
                for drive in `jot - 0 31`
                do
                        # check device
                        if smartctl -a /dev/$adapter -d cciss,$drive >/dev/null 2>&1
                        then
                                echo "# $drive disk on /dev/$adapter (HP SmartArray)" >> $conf
                                echo "/dev/$adapter -d cciss,$drive $tpl" >> $conf
                        fi
                done
        fi
done

# check LSI controllers
if test -e /dev/mpt0
then
        #echo "found device: /dev/mpt0"
        # scan for pass devices
        smartctl --scan-open | grep pass | awk '{print $1}' |
        {
        while read device
        do
                # check device
                if smartctl -a $device -d scsi >/dev/null 2>&1
                then
                        echo "# disk on LSI SCSI controller (/dev/mpt0)" >> $conf
                        echo "$device -d scsi $tpl" >> $conf
                fi
        done
        }
fi

# check 3ware controllers
if test -f /usr/local/sbin/tw_cli
then
        # check 3ware '9000/9500/9550/9650' series controller
        if test -e /dev/twa0
        then
                # get all used port on controller
                tw_cli /c0 show | grep ^p | grep -v NOT-PRESENT | awk '{print $1}' | tr -d "[:alpha:]" |
                {
                while read port
                do
                        echo "# disk on 3ware SATA/SAS controller" >> $conf
                        echo "/dev/twa0 -d 3ware,$port $tpl" >> $conf
                done
                }
        fi
        # check 3ware '5000/6000/7000/8000' series controller
        if test -e /dev/twe0
        then
                # get all used port on controller
                tw_cli /c0 show | grep ^p | grep -v NOT-PRESENT | awk '{print $1}' | tr -d "[:alpha:]" |
                {
                while read port
                do
                        echo "# disk on 3ware PATA/SATA controller" >> $conf
                        echo "/dev/twe0 -d 3ware,$port $tpl" >> $conf
                done
                }
        fi
else
        echo "3ware controllers skipped - required 'sysutils/tw_cli'"
fi


# foreach all disks in system
for disk in `sysctl -n kern.disks`
do
        #echo $disk
        type="`echo $disk | cut -c 1-2`"
        if [ $type = "ad" ]
        then
                echo "# disk on standart SATA/PATA controller" >> $conf
                echo "/dev/$disk $tpl" >> $conf
        fi
done

echo "" >> $conf
echo "# EOF" >> $conf

# create log file
touch /var/log/smartd.log

Re: Скрипт для автосоставления конфига smartd

Добавлено: 2011-04-20 13:49:07
manefesto
sysctl dev.subdisk

Re: Скрипт для автосоставления конфига smartd

Добавлено: 2011-04-20 20:01:32
Alex Keda

Код: Выделить всё

radius0$ sysctl dev.subdisk
sysctl: unknown oid 'dev.subdisk'
radius0$ sysctl -a | grep dev.subdisk
radius0$ sysctl -a | grep disk
kern.disks: da0                                                                                                                                                                                                                  
vfs.nfs.diskless_rootpath:                                                                                                                                                                                                       
vfs.nfs.diskless_valid: 0                                                                                                                                                                                                        
radius0$     
а там массив из двух дисков