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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35465
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2011-04-14 20:50:36

навеяно этим - 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
Последний раз редактировалось f_andrey 2011-04-14 22:40:23, всего редактировалось 1 раз.
Причина: Автору, выбирайте пожалуйста раздел соответствуюший тематике вашего сообщения.
Убей их всех! Бог потом рассортирует...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35465
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2011-04-15 7:25:58

2 f_andrey
:cry:
таки я подумав же выбрал...
скрипт ОС-специфичный...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

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

Непрочитанное сообщение f_andrey » 2011-04-15 9:15:16

Ну и форум специфичный, а тут не скриптик, а целый скриптище, так что пусть народ в шеле практикуется :) Хотя ту и под софт можно подвести, он же конкретной софтине почву готовит, в общем конечно сложно, напиши статью тогда будет однозначно ;)
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

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

Непрочитанное сообщение hizel » 2011-04-15 9:26:37

^_^ все правильно двинул
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35465
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2011-04-15 18:53:02

недошли руки до ciss - оказывается опция скана в новом smartd появилась - на тех серверах весь софт надо вначале обновить

на неделе допилю
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35465
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2011-04-18 13:27:01

добавил 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
Убей их всех! Бог потом рассортирует...

Аватара пользователя
manefesto
Группенфюррер
Сообщения: 6934
Зарегистрирован: 2007-07-20 8:27:30
Откуда: Пермь
Контактная информация:

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

Непрочитанное сообщение manefesto » 2011-04-20 13:49:07

sysctl dev.subdisk
я такой яростный шо аж пиздеЦ
Изображение

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35465
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2011-04-20 20:01:32

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

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$     
а там массив из двух дисков
Убей их всех! Бог потом рассортирует...