Dmraid check

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

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

Benutzer:Christian