Bug#587550: mdadm: "--manage --remove faulty" does not remove all faulty disks

Jim Paris jim at jtan.com
Tue Jun 29 18:24:07 UTC 2010


Package: mdadm
Version: 3.1.2-2
Severity: normal

Hi,

Here is an array with four faulty spares:

# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Fri Sep 22 06:18:01 2006
     Raid Level : raid1
     Array Size : 128384 (125.40 MiB 131.47 MB)
  Used Dev Size : 128384 (125.40 MiB 131.47 MB)
   Raid Devices : 6
  Total Devices : 10
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Jun 29 14:01:07 2010
          State : clean, degraded
 Active Devices : 2
Working Devices : 6
 Failed Devices : 4
  Spare Devices : 4

           UUID : dece84f3:a8f8be71:ea9d9fee:21fd5f90
         Events : 0.1770

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8        1        1      active sync   /dev/sda1
       9       8      145        2      spare rebuilding   /dev/sdj1
       3       0        0        3      removed
       4       0        0        4      removed
       5       0        0        5      removed

       6       8       97        -      spare   /dev/sdg1
       7       8      113        -      spare   /dev/sdh1
       8       8      129        -      spare   /dev/sdi1
      10       8       81        -      faulty spare
      11       8       65        -      faulty spare
      12       8       49        -      faulty spare
      13       8       33        -      faulty spare

To remove these spares, I used --remove faulty, but I had to run it
three times before they were all removed:

# mdadm --manage /dev/md0 --remove faulty
mdadm: hot removed 8:81
mdadm: hot removed 8:49
# mdadm --manage /dev/md0 --remove faulty
mdadm: hot removed 8:65
# mdadm --manage /dev/md0 --remove faulty
mdadm: hot removed 8:33
# mdadm --manage /dev/md0 --remove faulty
# 

My guess is that in Manage.c:Manage_subdevs, the loops like
    for (; j < array.raid_disks + array.nr_disks ; j++) {
are missing disks because the disk numbers are changing as they are
removed, but I didn't have the time to follow the code in detail.

-jim

-- System Information:
Debian Release: 5.0.5
  APT prefers stable
  APT policy: (990, 'stable'), (80, 'testing'), (50, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.34-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=POSIX, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages mdadm depends on:
ii  debconf                       1.5.24     Debian configuration management sy
ii  libc6                         2.10.2-5   Embedded GNU C Library: Shared lib
ii  lsb-base                      3.2-20     Linux Standard Base 3.2 init scrip
ii  makedev                       2.3.1-88   creates device files in /dev
ii  udev                          157-1      /dev/ and hotplug management daemo

Versions of packages mdadm recommends:
ii  module-init-tools        3.4-1           tools for managing Linux kernel mo
ii  sendmail-bin [mail-trans 8.14.3-5+lenny1 powerful, efficient, and scalable 

mdadm suggests no packages.

-- debconf information:
* mdadm/autostart: true
* mdadm/initrdstart: /dev/md1
  mdadm/initrdstart_notinconf: false
  mdadm/initrdstart_msg_errexist:
  mdadm/initrdstart_msg_intro:
  mdadm/initrdstart_msg_errblock:
* mdadm/warning:
* mdadm/start_daemon: true
* mdadm/mail_to: jim at jtan.com
  mdadm/initrdstart_msg_errmd:
  mdadm/initrdstart_msg_errconf:
* mdadm/autocheck: true





More information about the pkg-mdadm-devel mailing list