Jan Wagner schrieb am 29.03.2010 00:02: > Hi Christoph, > > Okay ... found an example, hopefully equivalent to your problem: > > bb:~# cat /tmp/mdstat > Personalities : [raid1] [raid10] > md2 : active raid1 sdd2[4] sdc2[1] sdb2[2] sda2[0] > 16386176 blocks [4/3] [UUU_] > resync=DELAYED > > md1 : active raid1 sdd3[4] sdc3[1] sdb3[2] sda3[0] > 6144768 blocks [4/3] [UUU_] > resync=DELAYED > > md3 : active raid10 sdd4[4](F) sdc4[1] sdb4[5](F) sda4[0] > 1887974656 blocks 64K chunks 2 near-copies [4/2] [UU__] > [==========>..........] recovery = 50.3% (474987648/943987328) > finish=4363639.0min speed=1K/sec > > md0 : active raid1 sdd1[4](S) sdc1[5] sdb1[2] sda1[0] > 10241280 blocks [4/2] [U_U_] > resync=DELAYED > > unused devices: <none> > > bb:~# /tmp/check_linux_raid md3 > WARNING md3 status=[UU__], recovery=50.3%, finish=4363639.0min. > bb:~# /tmp/check_linux_raid_new md3 > WARNING md3 status=[UU__], recovery=recovery, finish=4363639.0min. > bb:~# diff -Nur /tmp/check_linux_raid /tmp/check_linux_raid_new > --- /tmp/check_linux_raid 2010-03-28 23:19:08.000000000 +0200 > +++ /tmp/check_linux_raid_new 2010-03-28 21:33:44.000000000 +0200 > @@ -61,7 +61,7 @@ > if (defined $device) { > if (/(\[[_U]+\])/) { > $status{$device} = $1; > - } elsif (/recovery = (.*?)\s/) { > + } elsif (/(recovery|resync) = (.*?)\s/) { > $recovery{$device} = $1; > ($finish{$device}) = /finish=(.*?min)/; > } elsif (/^\s*$/) { > > I don't see, how that should help. :) Did I miss something?
I see now, that the patch is wrong. It should not output "recovery = x%" There should be a $2 in the line below: } elsif (/(recovery|refresh) = (.*?)\s/) { $recovery{$device} = $2; > > I just did have a closer look, what do you think about the following: > > --- /tmp/check_linux_raid 2010-03-28 23:19:08.000000000 +0200 > +++ /tmp/check_linux_raid_new 2010-03-28 23:48:11.000000000 +0200 > @@ -50,6 +50,7 @@ > my $msg = ""; > my %status; > my %recovery; > +my %resync; > my %finish; > my %active; > my %devices; > @@ -64,6 +65,8 @@ > } elsif (/recovery = (.*?)\s/) { > $recovery{$device} = $1; > ($finish{$device}) = /finish=(.*?min)/; > + } elsif (/resync=(.*?)\s/) { > + $resync{$device} = $1; > } elsif (/^\s*$/) { > $device=undef; > } > @@ -84,6 +87,10 @@ > $msg .= sprintf " %s status=%s, recovery=%s, > finish=%s.", > $devices{$k}, $status{$k}, $recovery{$k}, > $finish{$k}; > $code = max_state($code, "WARNING"); > + } elsif (defined $resync{$k}) { > + $msg .= sprintf " %s status=%s, resync=%s.", > + $devices{$k}, $status{$k}, $resync{$k}; > + $code = max_state($code, "WARNING"); > } else { > $msg .= sprintf " %s status=%s.", $devices{$k}, > $status{$k}; > $code = max_state($code, "CRITICAL"); > > Maybe thats what you expecting? This is also not correct, because the "resync" line might also have the %-value and the finish= value. Christoph
<<attachment: martin.vcf>>
signature.asc
Description: OpenPGP digital signature