如何摆脱mdadm中固执的“删除”设备

我的一台服务器的驱动器发生故障,所以我从所有三个相关arrays中移除了故障驱动器,将驱动器换出,然后将新驱动器添加到arrays中。 其中两个arrays工作完美。 第三个将驱动器添加为备用,并且在mdadm细节中有一个奇怪的“已删除”条目。

我尝试了两个

 mdadm /dev/md2 --remove failed 

 mdadm /dev/md2 --remove detached 

就像这里和这里所build议的,这两者都没有抱怨,但也没有任何影响。

有谁知道我可以摆脱这个条目,并得到正确的驱动器加回来? (理想情况下,不用第三次重新同步,我已经做了两次,这需要几个小时,但是如果这是需要的,那就需要这么做)。新的驱动器是/dev/sda ,相关的分区是/dev/sda3

这里是数组的细节:

  #mdadm --detail / dev / md2
的/ dev / MD2:
        版本:0.90
  创作时间:周三10月26日12:27:49 2011
     团队副本:raid1
     数组大小:729952192(696.14 GiB 747.47 GB)
  使用的开发尺寸:729952192(696.14 GiB 747.47 GB)
    RAID设备:2
  设备总数:2
优先轻微:2
    持久性:超级块是持久的

    更新时间:2013年11月12日17:48:53
          状态:干净,退化 
 有源器件:1
工作设备:2
 失败的设备:0
  备用设备:1

            UUID:2fdbf68c:d572d905:776c2c25:004bd7b2(本地到主机等等)
         事件:0.34665

    数量主要次要RaidDevice状态
        0 0 0 0删除
        1 8 19 1主动同步/ dev / sdb3

        2 8 3  - 备用/ dev / sda3 

如果相关的话,它是一个64位的服务器。 它通常运行Ubuntu,但现在我在数据中心的“救援”操作系统,这是Debian 7(wheezy)。 “删除”的项目是我最后一次在Ubuntu(目前不会从磁盘启动),所以我不认为这不是一些Ubuntu / Debian的冲突(当然,他们是密切的有关)。


更新

在本地机器上用testing设备进行了大量testing之后,我只是简单地从这个数组中获取了mdadmexception行为。 例如,再次从数组中删除/dev/sda3 ,我这样做:

 mdadm /dev/md2 --grow --force --raid-devices=1 

而那摆脱了“删除”的设备,留下我只是用/dev/sdb3 。 然后我nuked /dev/sda3 (写了一个文件系统,所以它没有raid fs了),那么:

 mdadm /dev/md2 --grow --raid-devices=2 

…这给了我一个arrays/dev/sdb3插槽0和“删除”插槽1,如你所料。 然后

 mdadm /dev/md2 --add /dev/sda3 

…补充说 – 作为一个备用 。 (另外3.5小时排水。)

所以在arrays中重build备份,因为mdadm的手册页说

RAID设备更改

当设备数量增加时,所有存在的热备件将立即激活。

…我把这个arrays扩大到三个设备,试图激活“备用”:

 mdadm /dev/md2 --grow --raid-devices=3 

我得到了什么? 两个 “删除”设备,和备用。 但是,当我用一个testing数组做这个,我不明白这个行为。

所以我再次拷贝/dev/sda3 ,用它来创build一个全新的数组,并将数据从旧数组复制到新数组:

 rsync -r -t -v --exclude 'lost+found' --progress /mnt/oldarray/* /mnt/newarray 

这当然会花费数小时。 希望当我完成后,我可以完全停止旧的数组,nuke /dev/sdb3 ,并将其添加到新的数组。 希望它不会被添加为备用!

那么所有通常的选项(列在我的问题中)都失败了,我别无select,只能:

  1. 从数组中删除/dev/sda3

  2. 核武器

  3. 创build一个包含它和一个空槽的降级数组

  4. 将旧数组中的文件rsync到新的数组中

  5. 停止旧的数组

  6. Nuke /dev/sdb3

  7. /dev/sdb3添加到新arrays

它开始说“备用,重build”,但一旦它被重build,它被添加到arrays作为主动驱动器。

当然,这意味着处理arrays的连锁效应已经发生了变化(因为这是根文件系统,这是一个皇家的痛苦)。

据我所知,在前一个数组的定义中有一些已经被破坏,因为:

A)添加驱动器应该像Just Worked (tm)一样,与其他两个一样,

B)如果没有,收缩和增长arrays应该工作。