153 lines
6.0 KiB
Diff
153 lines
6.0 KiB
Diff
Author: Orion Poplawski <orion@cora.nwra.com>
|
|
|
|
Index: scripts/services/mdadm
|
|
===================================================================
|
|
--- scripts/services/mdadm (revision 130)
|
|
+++ scripts/services/mdadm (working copy)
|
|
@@ -26,80 +26,88 @@
|
|
|
|
my $Detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;
|
|
|
|
-# TODO: remove awk dependency
|
|
-my $devices = `mdadm --examine --scan 2>/dev/null| awk '{print \$2}'`;
|
|
+my @devices = ();
|
|
+# Sometimes mdadm --examine --scan reports device with different names than
|
|
+# what is in use. Use /etc/mdadm.conf instead if it exists.
|
|
+if ( -f "/etc/mdadm.conf" ) {
|
|
+ open(MDADM,"< /etc/mdadm.conf");
|
|
+} else {
|
|
+ open(MDADM,"mdadm --examine --scan 2>/dev/null|");
|
|
+}
|
|
+while (<MDADM>) {
|
|
+ if (/^ARRAY/) {
|
|
+ push(@devices,(split())[1]);
|
|
+ }
|
|
+}
|
|
+close(MDADM);
|
|
|
|
-chomp($devices);
|
|
+foreach my $dev (@devices) {
|
|
+ my %mdhash;
|
|
|
|
-if ($devices ne '') {
|
|
- foreach my $dev (split(/\n/,$devices)) {
|
|
- my $md = `mdadm --misc --detail $dev | grep -v $dev`;
|
|
- chomp($md);
|
|
+ open(MDADM,"mdadm --misc --detail $dev |");
|
|
+ while (<MDADM>) {
|
|
+ $mdhash{'level'} = $1 if ($_ =~ /Raid Level ?: ?(.*)$/);
|
|
+ $mdhash{'active'} = $1 if ($_ =~ /Active Devices ?: ?(.*)$/);
|
|
+ $mdhash{'working'} = $1 if ($_ =~ /Working Devices ?: ?(.*)$/);
|
|
+ $mdhash{'failed'} = $1 if ($_ =~ /Failed Devices ?: ?(.*)$/);
|
|
+ $mdhash{'spare'} = $1 if ($_ =~ /Spare Devices ?: ?(.*)$/);
|
|
+ $mdhash{'state'} = $1 if ($_ =~ /State ?: ?(.*)$/);
|
|
+ $mdhash{'rebuild'} = $1 if ($_ =~ /Rebuild Status ?: ?(.*)$/);
|
|
+ push(@{$mdhash{'good devices'}},$1) if ($_ =~ /sync .*(\/dev\/[\w\d\-\_]*)/);
|
|
+ push(@{$mdhash{'middle devices'}},$1) if ($_ =~ /rebuilding .*(\/dev\/[\w\d\-\_]*)/);
|
|
+ push(@{$mdhash{'bad devices'}},$1) if ($_ =~ /faulty .*(\/dev\/[\w\d\-\_]*)/);
|
|
+ }
|
|
+ close(MDADM);
|
|
|
|
- my %mdhash;
|
|
- foreach (split(/\n/,$md)) {
|
|
- $mdhash{'level'} = $1 if ($_ =~ /Raid Level ?: ?(.*)$/);
|
|
- $mdhash{'active'} = $1 if ($_ =~ /Active Devices ?: ?(.*)$/);
|
|
- $mdhash{'working'} = $1 if ($_ =~ /Working Devices ?: ?(.*)$/);
|
|
- $mdhash{'failed'} = $1 if ($_ =~ /Failed Devices ?: ?(.*)$/);
|
|
- $mdhash{'spare'} = $1 if ($_ =~ /Spare Devices ?: ?(.*)$/);
|
|
- $mdhash{'state'} = $1 if ($_ =~ /State ?: ?(.*)$/);
|
|
- $mdhash{'rebuild'} = $1 if ($_ =~ /Rebuild Status ?: ?(.*)$/);
|
|
- push(@{$mdhash{'good devices'}},$1) if ($_ =~ /sync .*(\/dev\/[\w\d\-\_]*)/);
|
|
- push(@{$mdhash{'middle devices'}},$1) if ($_ =~ /rebuilding .*(\/dev\/[\w\d\-\_]*)/);
|
|
- push(@{$mdhash{'bad devices'}},$1) if ($_ =~ /faulty .*(\/dev\/[\w\d\-\_]*)/);
|
|
- }
|
|
-
|
|
- if ($Detail <= 4) {
|
|
- if (lc($mdhash{'state'}) =~ /clean|active/) {
|
|
- print "$dev : $mdhash{'state'}\n";
|
|
- } else {
|
|
- print "$dev : $mdhash{'state'}\n";
|
|
- if (@{$mdhash{'middle devices'}}) {
|
|
- if (defined($mdhash{'rebuild'}) and ($mdhash{'rebuild'} ne '')) {
|
|
- print "\tRebuilding status: $mdhash{'rebuild'}\n";
|
|
- }
|
|
- print "\tRebuilding @{$mdhash{'middle devices'}}\n";
|
|
+ if ($Detail <= 4) {
|
|
+ if (lc($mdhash{'state'}) =~ /clean|active/) {
|
|
+ print "$dev : $mdhash{'state'}\n" if $Detail;
|
|
+ } else {
|
|
+ print "$dev : $mdhash{'state'}\n";
|
|
+ if (defined($mdhash{'middle devices'})) {
|
|
+ if (defined($mdhash{'rebuild'}) and ($mdhash{'rebuild'} ne '')) {
|
|
+ print "\tRebuilding status: $mdhash{'rebuild'}\n";
|
|
}
|
|
- if (@{$mdhash{'bad devices'}}) {
|
|
- print "\tFailed @{$mdhash{'bad devices'}}\n";
|
|
- }
|
|
+ print "\tRebuilding @{$mdhash{'middle devices'}}\n";
|
|
}
|
|
+ if (defined($mdhash{'bad devices'})) {
|
|
+ print "\tFailed @{$mdhash{'bad devices'}}\n";
|
|
+ }
|
|
}
|
|
- elsif($Detail <= 9) {
|
|
- if (lc($mdhash{'state'}) =~ /clean|active/) {
|
|
- print "$dev : $mdhash{'state'} - @{$mdhash{'good devices'}}\n";
|
|
- } else {
|
|
- print "$dev : $mdhash{'state'}\n";
|
|
- if (@{$mdhash{'middle devices'}}) {
|
|
- if (defined($mdhash{'rebuild'}) and ($mdhash{'rebuild'} ne '')) {
|
|
- print "\tRebuilding status: $mdhash{'rebuild'}\n";
|
|
- }
|
|
- print "\t Rebuilding : @{$mdhash{'middle devices'}}\n";
|
|
- }
|
|
- if (@{$mdhash{'bad devices'}}) {
|
|
- print "\t Failed : @{$mdhash{'bad devices'}}\n";
|
|
- }
|
|
- print "\t Good : @{$mdhash{'good devices'}}\n";
|
|
- }
|
|
+ }
|
|
+ elsif($Detail <= 9) {
|
|
+ if (lc($mdhash{'state'}) =~ /clean|active/) {
|
|
+ print "$dev : $mdhash{'state'} - @{$mdhash{'good devices'}}\n";
|
|
} else {
|
|
print "$dev : $mdhash{'state'}\n";
|
|
- print "\t Raid Level : $mdhash{'level'}\n";
|
|
- print "\tGood Devices : @{$mdhash{'good devices'}}\n";
|
|
- if (defined ($mdhash{'middle devices'}) and @{$mdhash{'middle devices'}}) {
|
|
+ if (@{$mdhash{'middle devices'}}) {
|
|
if (defined($mdhash{'rebuild'}) and ($mdhash{'rebuild'} ne '')) {
|
|
print "\tRebuilding status: $mdhash{'rebuild'}\n";
|
|
}
|
|
print "\t Rebuilding : @{$mdhash{'middle devices'}}\n";
|
|
}
|
|
- if (defined($mdhash{'bad devices'}) and @{$mdhash{'bad devices'}}) {
|
|
+ if (@{$mdhash{'bad devices'}}) {
|
|
print "\t Failed : @{$mdhash{'bad devices'}}\n";
|
|
}
|
|
- if ($mdhash{'spare'} ne 0) {
|
|
- print "\t Spares : $mdhash{'spare'}\n";
|
|
+ print "\t Good : @{$mdhash{'good devices'}}\n";
|
|
+ }
|
|
+ } else {
|
|
+ print "$dev : $mdhash{'state'}\n";
|
|
+ print "\t Raid Level : $mdhash{'level'}\n";
|
|
+ print "\tGood Devices : @{$mdhash{'good devices'}}\n";
|
|
+ if (defined ($mdhash{'middle devices'}) and @{$mdhash{'middle devices'}}) {
|
|
+ if (defined($mdhash{'rebuild'}) and ($mdhash{'rebuild'} ne '')) {
|
|
+ print "\tRebuilding status: $mdhash{'rebuild'}\n";
|
|
}
|
|
- print "\n";
|
|
+ print "\t Rebuilding : @{$mdhash{'middle devices'}}\n";
|
|
}
|
|
+ if (defined($mdhash{'bad devices'}) and @{$mdhash{'bad devices'}}) {
|
|
+ print "\t Failed : @{$mdhash{'bad devices'}}\n";
|
|
+ }
|
|
+ if ($mdhash{'spare'} ne 0) {
|
|
+ print "\t Spares : $mdhash{'spare'}\n";
|
|
+ }
|
|
+ print "\n";
|
|
}
|
|
}
|
|
|