Skip to content

Instantly share code, notes, and snippets.

@ololobus
Created October 6, 2014 23:26
Show Gist options
  • Save ololobus/db9415cd54d0d1410cea to your computer and use it in GitHub Desktop.
Save ololobus/db9415cd54d0d1410cea to your computer and use it in GitHub Desktop.
mdadm raid1 array check script
#!/bin/bash
# При запуске без параметров `bash mdadm-check.sh` проверяет все массивы из `raids`.
# Если один из дисков неиправен, то заменяет его на резервный из `backup_disk`.
# Передав параметр `install` `bash mdadm-check.sh install` можно внести запись
# в cron, для выполнения проверки каждую минуту (Установка работает в Ubuntu 14.04).
# После этого можно испортить один из дисков командой `test` `bash mdadm-check.sh test`,
# чтобы проверить работу. При этом будет сломан диск из `test_disk`.
# В принципе, просто заменить поврежденный диск в одном из массивов можно командой
# sudo mdadm -D /dev/md0 | grep faulty | rev | cut -d ' ' -f1 | rev | xargs sudo mdadm /dev/md0 -r | sudo mdadm /dev/md0 -a /dev/sdf1
export PATH=/sbin/:$PATH
script_path=$(pwd -P)
backup_disk='/dev/sdf1'
test_disk='/dev/sdb1'
raids=('/dev/md0' '/dev/md1')
case "$1" in
install)
echo 'Installing...'
crontab -l | { cat; echo "* * * * * /bin/bash $script_path/$0"; } | crontab -
service cron restart
;;
test)
echo 'Testing...'
mdadm --manage --set-faulty ${raids[0]} $test_disk
;;
*)
echo 'Scanning' ${raids[*]} '...'
for raid in ${raids[*]}
do
faulty=$(mdadm -D $raid | grep faulty)
if [[ $faulty ]]
then
disk=$(mdadm -D /dev/md0 | grep faulty | rev | cut -d ' ' -f1 | rev)
echo 'Faulty found in' $raid 'disk' $disk
mdadm $raid -r $disk && mdadm $raid -a $backup_disk
if [ "$?" -eq "0" ]
then
echo 'Array' $raid 'repaired'
fi
else
echo 'Array' $raid 'is OK'
fi
done
echo 'Scan finished!'
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment