Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- DATE=`date +%d.%m.%y %H:%M:%S`
- raids="/proc/mdstat"
- log_file="/var/log/raid_recover.log"
- removed_disc=$1
- sleep 5
- echo $DATE "Hot removed disc - $removed_disc" >> $log_file
- # опросить массивы - проявить полупустые
- for md in `cat $raids | grep "md[0-9]" | awk '{print $1}' | sort -n`
- do
- hdparm -t /dev/$md 1>/dev/null
- done
- # перебираем массивы, ищем с дисками имеющими статус (F)
- for md in `cat $raids | grep md[0-9] | grep "(F)" | awk '{print $1}' | sort -n`
- do
- # проверка на наличие минимум двух дисков (вдруг остался ТОЛЬКО один, и тот "(F)")
- if [ `cat $raids | grep $md | awk 'match($0,/sd[a-z][0-9].*/) {print substr($0,RSTART,RLENGTH)}' | awk '{print NF}'` -ge 2 ]
- then
- # получаем имя отвалившегося раздела
- for fail_part in `cat $raids | grep $md | awk '/F/{for(i=1;i<=NF;++i)if($i~/F/)print $i}' | sed 's/\[[0-9\]](F)//g' | sort -n`
- do
- echo $DATE "Found F state partition - $fail_part on $md" >> $log_file
- # если раздел(диск) ещё в системе -
- if [[ `cat /proc/partitions | grep $fail_part` ]]
- then
- # удаляем
- mdadm /dev/$md -r /dev/$fail_part
- else
- # если раздел из массива не удаляется по причине отсутствия в системе
- if [[ `mdadm /dev/$md -r /dev/$fail_part 2>&1 | grep -i "no such" | grep $fail_part` ]]
- then
- # удаляем его по-другому
- mdadm /dev/$md --remove detached
- echo $DATE "No such $fail_part, it removed as detached" >> $log_file
- fi
- echo $DATE "$fail_part was removed from $md" >> $log_file
- # сигналим при удалении раздела из массива
- for i in {1..15} ; do beep -f 840 -l 20 -n -f 2400 -l 20 ; done
- # cспим 0,5 секунды чтобы можно было различить отдельные сигналы
- sleep 1
- fi
- done
- fi
- echo "**" >> $log_file
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement