2012-06-03 42 views
0

我試圖使用一個Munin插件進行軟件raid。下面是插件的代碼:https://github.com/munin-monitoring/contrib/blob/master/plugins/disk/raidperl中的Munin插件無法獲取正確的數據

目前我正在恢復,這裏的電流輸出:

# cat /proc/mdstat 
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md2 : active raid1 sda3[0] sdb3[1] 
     2925544767 blocks super 1.2 [2/2] [UU] 
     [==>..................] resync = 14.4% (422554560/2925544767) finish=5246.6min speed=7950K/sec 

md1 : active raid1 sda2[0] sdb2[1] 
     524276 blocks super 1.2 [2/2] [UU] 
     resync=DELAYED 

md0 : active raid1 sda1[0] sdb1[1] 
     4193268 blocks super 1.2 [2/2] [UU] 
     resync=DELAYED 

unused devices: <none> 

但是當我運行插件,我得到下面的輸出(認爲所有磁盤都同步):

# munin-run raid 
md2.value 100 
md2_rebuild.value 100 
md1.value 100 
md1_rebuild.value 100 
md0.value 100 
md0_rebuild.value 100 

在下面的線I理解(我沒有程序員)期間代碼運行的時候,是$pct> = 100,等獲取設置爲100(這是我的所有RAID陣列輸出)。 那麼$nact$nmem代表我的cat /proc/mdstat輸出中的哪個值?這將幫助我找出原因$ PCT是> = 100

my $pct = 100 * $nact/$nmem; 
     my $rpct = 100; 
     if ($pct < 100) { 
     my @output = `/sbin/mdadm -D /dev/$dev | grep Rebuild`; 
     if($output[0] =~ /([0-9]+)% complete/) { 
      $rpct = $1; 
     } else { 
      $rpct = 0; 
     } 

我覺得這個正則表達式保存答案,但正如我所說,我不是程序員:P

while ($text =~ /(md\d+)\s+:\s+active\s+(\(auto-read-only\)\s+|)(\w+)\s+(.*)\n.*\[(\d+)\/(\d+)]\s+\[(\w+)]/) { 
    my($dev,$dummy,$type,$members,$nmem,$nact,$status) = ($1,$2,$3,$4,$5,$6,$7); 

謝謝推進:-)

回答

1

改變這一點:

if ($pct < 100) { 

這樣:

if ($pct <= 100) { 

並確保您以root身份運行該插件