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

Saj*_*ikh 14 raid software-raid mdadm centos raid1

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

[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_]
Run Code Online (Sandbox Code Playgroud)

这是我尝试删除不存在的驱动器和分区的方法。例如,/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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

注意:阵列现在合法降级,我正在那里安装一个新驱动器。但是,正如您在上面看到的,这无关紧要。我应该仍然能够/dev/sdb1从这个数组中删除。

der*_*ert 16

这是因为设备节点不再存在于您的系统上(可能 udev 在驱动器死机时删除了它们)。您应该能够通过使用关键字faileddetached改为:

mdadm -r /dev/md0 failed     # all failed devices
mdadm -r /dev/md0 detached   # failed ones that aren't in /dev anymore
Run Code Online (Sandbox Code Playgroud)

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


Saj*_*ikh 7

我最终做的是mknod像@derobert 建议的那样使用来创建mdadm正在寻找的设备。我尝试了 mdadm 告诉我的主要/次要号码,它无法找到我试图删除的不同驱动器号,直到它起作用为止。

mknod /dev/sde1 b 8 17
Run Code Online (Sandbox Code Playgroud)

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

mdadm /dev/md0 --remove --force /dev/sde1
Run Code Online (Sandbox Code Playgroud)

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

rm /dev/sde1
Run Code Online (Sandbox Code Playgroud)


小智 5

您还可以通过对阵列中的磁盘数量进行脱脂来修复:

在我来说,我有RAID-1磁盘阵列/dev/md0/dev/sda1和“删除”。我只是简单地将其缩小为仅使用一个驱动器:

mdadm -G /dev/md0 --raid-devices=1 --force
Run Code Online (Sandbox Code Playgroud)

在删除之后真的被删除了(在 中没有删除的行mdadm --detail

  • 不过,您必须小心使用这种方法。在修改 --raid-devices 之前,请充分了解您正在处理的 RAID 类型。 (2认同)