code: def _parse_array_recovery(self, block):
          
          array_recovery_regexp = re.compile(
              '^ *\[.*\] *recovery = (?P<percent>\d*\.?\d*)%'
              ' \(\d*/\d*\) finish=(?P<remaining_time>\d*\.?\d*)min '
              'speed=(?P<speed>\d*)K/sec$',
              re.MULTILINE
          )
  
          regexp_res = array_recovery_regexp.search(block)
  
          # recovery is optionally in mdstat
          if not regexp_res:
              return None
  
          array_recovery_dict = regexp_res.groupdict()
  
          array_recovery_dict['percent'] = \
              float(array_recovery_dict['percent'])
  
          # convert speed to bits
          array_recovery_dict['speed'] = \
              int(array_recovery_dict['speed']) * 1024
  
          # convert minutes to milliseconds
          array_recovery_dict['remaining_time'] = \
              int(float(array_recovery_dict['remaining_time'])*60*1000)
  
          return array_recovery_dict
docs: Parse the recovery progress of the md array.
  
          >>> block = 'md0 : active raid1 sdd2[0] sdb2[2](S) sdc2[1]\n'
          >>>         '      100171776 blocks super 1.2 [2/2] [UU]\n'
          >>>         '      [===================>.]  recovery = 99.5% '
          >>>         '(102272/102272) finish=13.37min speed=102272K/sec\n'
          >>>         '\n'
          >>> print _parse_array_recovery(block)
          {
              'percent': '99.5',
              'speed': 104726528,
              'remaining_time': 802199
          }
  
          :return: dictionary of recovery progress status information
          :rtype: dict