#! /usr/bin/perl # check megactl MegaRAID RAID status # anders@fupp.net, 2009-07-27 # Requires megactl utility installed. Also, put this in sudoers: # nagios ALL=(root) NOPASSWD: /usr/sbin/megactl -p #megactl -p example output: #a0 Intel(R) RAID Controller SRCS28X chan:1 ldrv:3 batt:FAULT, module missing #a0d0 1TiB RAID 5 1x4 optimal #a0d1 1TiB RAID 5 1x4 optimal #a0d2 142GiB RAID 5 1x4 optimal $ENV{"PATH"} = "/usr/sbin:/usr/bin"; $oktxt = ""; $hmtxt = ""; $cmd = "megactl -p"; if ($< != 0) { $cmd = "sudo -u root $cmd"; } open(MC, "$cmd |"); while () { next if (/RAID Controller/); next if (/^$/); if (/^(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)\s+(\w+)/) { $vol = $1; $status = $6; } if ($status eq "optimal") { $oktxt .= "$vol/$status "; } else { $hmtxt .= "$vol/$status "; } # print; # print "vol=$vol status=$status\n"; } close(MC); $oktxt =~ s@ $@@; $hmtxt =~ s@ $@@; if ($hmtxt ne "") { print "$hmtxt\n"; exit(2); } else { print "$oktxt\n"; exit(0); }