mdadm:无法删除RAID 1中的组件


14

我使用mdadm将我的/ boot分区放置在RAID 1阵列中。该阵列在过去已经退化了几次,每次我删除物理驱动器时,添加一个新的驱动器,使该阵列恢复正常,它将使用新的驱动器号。将旧的遗留在阵列中并失败了。我似乎无法删除所有不再存在的组件。

[root@xxx ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdg1[10] sde1[8](F) sdb1[7](F) sdd1[6](F) sda1[4] sdc1[5]
      358336 blocks super 1.0 [4/3] [UUU_]

这是我尝试删除不存在的驱动器和分区的方法。例如,/dev/sdb1

[root@xxx ~]# mdadm /dev/md0 -r /dev/sdb1
mdadm: Cannot find /dev/sdb1: No such file or directory
[root@xxx ~]# mdadm /dev/md0 -r faulty
mdadm: Cannot find 8:49: No such file or directory
[root@xxx ~]# mdadm /dev/md0 -r detached
mdadm: Cannot find 8:49: No such file or directory

8:49我相信是指所示的主要和次要号码--detail,但我不太肯定从这里走。我试图避免重新启动或重新启动mdadm。

[root@xxx ~]# mdadm --detail /dev/md0 
/dev/md0:
        Version : 1.0
  Creation Time : Thu Aug  8 18:07:35 2013
     Raid Level : raid1
     Array Size : 358336 (350.00 MiB 366.94 MB)
  Used Dev Size : 358336 (350.00 MiB 366.94 MB)
   Raid Devices : 4
  Total Devices : 6
    Persistence : Superblock is persistent

    Update Time : Sat Apr 18 16:44:20 2015
          State : clean, degraded 
 Active Devices : 3
Working Devices : 3
 Failed Devices : 3
  Spare Devices : 0

           Name : xxx.xxxxx.xxx:0  (local to host xxx.xxxxx.xxx)
           UUID : 991eecd2:5662b800:34ba96a4:2039d40a
         Events : 694

    Number   Major   Minor   RaidDevice State
       4       8        1        0      active sync   /dev/sda1
      10       8       97        1      active sync   /dev/sdg1
       5       8       33        2      active sync   /dev/sdc1
       6       0        0        6      removed

       6       8       49        -      faulty
       7       8       17        -      faulty
       8       8       65        -      faulty

注意:该阵列现在已经合理地降级了,在我们讲话时,我在那里有了一个新驱动器。但是,正如您在上面看到的,这无关紧要。我仍然应该能够/dev/sdb1从此阵列中删除。


您不需要--force即可将处于“已删除”状态的磁盘删除,这可能会隐藏更严重的问题。丢开。

Answers:


16

这是因为设备节点不再存在于系统中(驱动器死机时udev可能已将其删除)。您应该可以通过使用关键字failed或删除它们detached

mdadm -r /dev/md0 failed     # all failed devices
mdadm -r /dev/md0 detached   # failed ones that aren't in /dev anymore

如果您的mdadm版本太旧而无法执行此操作,则可以mknod通过使设备重新存在来使其工作。或者,说实话,只需忽略它-这不是真正的问题,下次重新启动时应该消失。


我尝试使用关键字,您可以在原始帖子中看到它给我的输出。我来看看mknod。是的,这可能不是问题,但我是强迫症,哈哈。
Sajan Parikh 2015年

是的,我用mknod做到了这一点,并且奏效了。
Sajan Parikh 2015年

@SajanParikh的确,我确实以某种方式错过了表明您已经尝试失败并分离的行。很高兴mknod起作用了。
derobert

6

我最终要做的是使用mknod@derobert建议的方法来创建所需的设备mdadm。我尝试了mdadm告诉我的主要/次要数字,直到我尝试删除的其他驱动器号都无法找到为止。

mknod /dev/sde1 b 8 17

然后,我不得不使用该--force选项来删除组件。

mdadm /dev/md0 --remove --force /dev/sde1

然后,我删除了创建的块设备。

rm /dev/sde1

嗯... 8:17是sdb1。(8:65是sde1)但是那个人也丢失了,所以我想那是可行的……
derobert

这对我没有用,mdadm继续说:“设备或资源繁忙”,但是这使我尝试不使用伪造的块设备来喂他,而是使用“真”块设备(例如回送安装的映像)来喂他。此时,我发现我有一个陈旧/dev/loop的文件,该文件仍在使用降级阵列上的文件。我分离了它,最后mdadm让我停止了阵列。哈雷!对于每个阅读本书的人来说,总是有一个mdadm如此愚蠢的逻辑解释,因此请寻找一个过时的进程/文件/挂载点/ nfs处理程序/ open bash /回送设备/等等。仍在使用降级的数组。:)
Avio

我能够使用完全相同的主要版本和次要版本(在我的情况下为8:18)来伪造一个伪造的/ dev / sdb2设备。之后,mdadm --remove从/ proc / mdstat删除/ dev / sdb2的陈旧记录。成功执行--remove操作后,请记住rm / dev / sdb2。
ILIV '18

3

您也可以通过减少阵列中的磁盘数量来解决问题:

就我而言,我的raid-1数组/dev/md0带有/dev/sda1和“已删除”。我只是将其缩小以仅使用一个驱动器:

mdadm -G /dev/md0 --raid-devices=1 --force

之后,除去真的删除(不删除的行再在mdadm --detail


但是,您必须谨慎使用此方法。在修改--raid-devices之前,请先了解要处理的RAID类型。
ILIV
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.