Dmraid check
Eine Plattenspiegelung ist zwar sehr praktisch, aber das der Spiegel muss regelmäßig auf Fehler kontrolliert werden. Bei mdadm zwar selbstverständlich, nicht aber bei dem Pseudo-Hardware Raid, was auf vielen Mailboards zu finden ist und das mit dmraid verwaltet wird. Das folgende Perl-Skript kann man jede Minute per Cron ausführen lassen. Es schickt eine Mail, wenn dmraid irgendetwas anderes als ok bei einem Device findet.
#!/usr/bin/perl ########################################################### # checks dmraid anomalies and sends mail # if something is wrong # Copyright 2008 by Christian Felsing # Distributable under the terms of the GNU GPL version 2 ########################################################### ##################################################### # user configurable parameters ##################################################### my $to="admin\@example.com"; use Email::Send; use Getopt::Long; sub SendMail { my $subject="dmraid"; my $from="dmraid\@mypc"; my $body=shift; my $message = "To: $to\nFrom: $from\nSubject: $subject\n\n$body"; my $sender = Email::Send->new({mailer => 'SMTP'}); $sender->mailer_args([Host => 'mail.taunusstein.net']); $sender->send($message); } my $cmd='/sbin/dmraid -r'; open (CMD,"$cmd|") || die "Cannot start $cmd\n\n"; my $errors=0; my $msg=""; while (my $line=<CMD>) { chomp $line; # /dev/sdd: nvidia, "nvidia_agcgadhf", mirror, ok, 1465149166 sectors, data@ 0 if ($line=~/^(\S+):\s+\S+\s+"(\S+)",\s+(\S+),\s+(\S+),\s+(\d+).+$/) { my $device="$1"; my $plex="$2"; my $mode="$3"; my $status="$4"; my $size="$5"; if ($status ne "ok") { $status="ERROR"; $msg.="$line\n"; } print "$plex ($device): $status ($mode, $size sectors)\n"; } } close CMD; if ($errors>0) { print "$msg\n"; SendMail ("$msg"); }
Das Skript unterliegt der GPLv2