如何摆脱 mdadm 中顽固的“已移除”设备

如何摆脱 mdadm 中顽固的“已移除”设备

我的服务器的一个驱动器发生故障,因此我从所有三个相关阵列中移除了发生故障的驱动器,将其换出,然后将新驱动器添加到阵列中。其中两个阵列运行正常。第三个阵列将该驱动器作为备用驱动器重新添加回来,详细信息中有一个奇怪的“已移除”条目mdadm

我都试过了

mdadm /dev/md2 --remove failed

mdadm /dev/md2 --remove detached

按照建议这里这里,两者都没有抱怨,但也都没有任何效果。

有人知道我怎样才能删除该条目并正确地重新添加驱动器吗?(理想情况下不需要第三次重新同步,我已经做了两次,而且花了几个小时。但如果这是需要的,那就需要这样做。)新的驱动器是/dev/sda,相关分区是/dev/sda3

以下是该阵列的详细信息:

# mdadm --detail /dev/md2
/dev/md2:
        版本:0.90
  创建时间:2011 年 10 月 26 日星期三 12:27:49
     突袭级别:raid1
     数组大小:729952192(696.14 GiB 747.47 GB)
  已使用设备大小:729952192 (696.14 GiB 747.47 GB)
   突袭设备:2
  设备总数:2
首选辅修科目:2
    持久性:超级块是持久的

    更新时间:2013年11月12日星期二17:48:53
          状态:干净、降级
 活跃设备:1
工作装置:2
 故障设备:0
  备用设备:1

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

    编号 主要 次要 RaidDevice 状态
       0 0 0 0 已移除
       1 8 19 1 活动同步 /dev/sdb3

       2 8 3 – 备用 /dev/sda3

如果相关的话,它就是一台 64 位服务器。它通常运行 Ubuntu,但现在我在数据中心的“救援”操作系统中,即 Debian 7(喘息)。上次我在 Ubuntu 中时,“已删除”条目就在那里(目前它不会从磁盘启动),所以我不认为这不是某种 Ubuntu/Debian 冲突(当然,它们是密切相关的)。


更新

在本地机器上使用测试设备进行了大量测试后,我发现mdadm这个数组的行为异常。例如,/dev/sda3再次从数组中删除后,我执行了以下操作:

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

这样就删除了“已移除”的设备,只剩下/dev/sdb3。然后我删除了/dev/sda3它(向其中写入了一个文件系统,因此它不再具有 raid fs),然后:

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

/dev/sdb3...正如您所期望的那样,它返回了一个位于插槽 0 中且在插槽 1 中“已移除”的数组。然后

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

...已添加 —再次作为备用。(又浪费了 3.5 个小时。)

因此,对于阵列中重建的备用设备,鉴于mdadm手册页显示

RAID 设备变更

...

当设备数量增加时,任何存在的热备用设备都将立即激活。

...我将阵列扩展到三个设备,以尝试激活“备用”:

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

我得到了什么?“删除”设备,以及备用设备。但是当我使用测试阵列执行此操作时,我没有得到此行为。

因此我/dev/sda3再次将其删除,并用它创建了一个全新的数组,并将数据从旧数组复制到新数组:

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

当然,这会花上几个小时。希望当我完成后,我可以完全停止旧阵列,将其删除/dev/sdb3,并将其添加到新阵列中。希望它不会被添加为备用!

答案1

好吧,所有常用选项(在我的问题中列出)都失败了,我别无选择,只能:

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

  2. 核爆

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

  4. rsync将文件从旧数组移至新数组

  5. 停止旧阵列

  6. 核弹/dev/sdb3

  7. 添加/dev/sdb3到新数组

它开始说“备用,重建”,但一旦重建,它就会作为活动驱动器添加到阵列中。

当然,这意味着要处理阵列变化带来的连锁反应(因为这是根文件系统,所以这非常麻烦)。

据我所知,前一个数组的定义已损坏,因为:

A)添加驱动器应该添加其他两个驱动器一样,

B) 如果没有,那么缩小和扩大数组应该有效。

相关内容