mdadm: não é possível remover componentes no RAID 1

14

Eu tenho minha partição / boot em um array RAID 1 usando o mdadm. Esse array degradou algumas vezes no passado, e toda vez que eu removo o drive físico, adiciono um novo, trago o array para o normal, ele usa uma nova letra de drive. Deixando o antigo ainda na matriz e falhou. Não consigo remover todos esses componentes que não existem mais.

[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_]

Veja o que tentei remover as unidades e partições inexistentes. Por exemplo, /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

Esse 8:49 , acredito, refere-se ao número principal e menor exibido em --detail , mas não sei ao certo para onde ir a partir daqui. Estou tentando evitar uma reinicialização ou reiniciando o 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

Observação: o array está legitimamente degradado agora e estou recebendo uma nova unidade enquanto falamos. No entanto, como você pode ver acima, isso não importa. Ainda devo poder remover /dev/sdb1 dessa matriz.

    
por Sajan Parikh 18.04.2015 / 22:56

3 respostas

14

É porque os nós do dispositivo não existem mais no seu sistema (provavelmente o udev os removeu quando a unidade morreu). Você deve poder removê-los usando a palavra-chave failed ou detached :

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

Se a sua versão do mdadm for muito antiga para fazer isso, talvez você consiga que ela funcione em mknod 'para que o dispositivo volte a existir. Ou, honestamente, simplesmente ignore-o - não é realmente um problema e deve desaparecer na próxima vez que você reiniciar.

    
por 18.04.2015 / 23:02
6

O que acabei fazendo foi usar mknod como o @derobert sugeriu para criar os dispositivos que mdadm estava procurando. Eu tentei os números maiores / menores que o mdadm estava me dizendo que não poderia encontrar com as diferentes letras de drive que eu estava tentando remover até que funcionasse.

mknod /dev/sde1 b 8 17

Então eu tive que usar a opção --force para remover o componente.

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

Depois, removi o dispositivo de bloco criado.

rm /dev/sde1
    
por 19.04.2015 / 00:01
3

Você também pode corrigir apenas desengordurando o número de discos na matriz:

No meu caso, eu tenho a raid-1 array /dev/md0 com /dev/sda1 e "removed". Eu simplesmente a reduzi para usar apenas uma unidade:

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

Depois disso, a remoção foi removida (não há mais linhas removidas em mdadm --detail )

    
por 09.09.2015 / 09:42