Como digo ao mdadm para começar a usar um disco ausente em meu array RAID5 novamente?

Como digo ao mdadm para começar a usar um disco ausente em meu array RAID5 novamente?

Eu tenho uma matriz RAID de 3 discos em execução no meu servidor Ubuntu. Isto tem funcionado perfeitamente há mais de um ano, mas recentemente fui forçado a desmontar, mover e reconstruir a máquina.

Quando coloquei tudo de volta no lugar e executei o Ubuntu, tive alguns problemas com os discos não sendo detectados. Algumas reinicializações depois e resolvi esse problema. O problema agora é que a matriz de 3 discos aparece degradada toda vez que eu inicializo. Por alguma razão, parece que o Ubuntu criou um novo array e adicionou o disco que faltava a ele.

Tentei parar a nova matriz de 1 disco e adicionar o disco ausente, mas estou com dificuldades. Na inicialização eu recebo isso:

root@uberserver:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d1 : inactive sdf1[2](S)
      1953511936 blocks

md0 : active raid5 sdg1[2] sdc1[3] sdb1[1] sdh1[0]
      2930279808 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

Eu tenho duas matrizes RAID e aquela que normalmente aparece como md1 não está aparecendo.

Eu li em algum lugar que a chamada mdadm --assemble --scanremontaria o array ausente, então tentei primeiro parar o array existente que o Ubuntu iniciou:

root@uberserver:~# mdadm --stop /dev/md_d1
mdadm: stopped /dev/md_d1

... e então tentei dizer ao Ubuntu para pegar os discos novamente:

root@uberserver:~# mdadm --assemble --scan
mdadm: /dev/md/1 has been started with 2 drives (out of 3).

Então isso iniciou o md1 novamente, mas não está pegando o disco do md_d1:

root@uberserver:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid5 sde1[1] sdf1[2]
      3907023872 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]

md_d1 : inactive sdd1[0](S)
      1953511936 blocks

md0 : active raid5 sdg1[2] sdc1[3] sdb1[1] sdh1[0]
      2930279808 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

O que está errado aqui? Por que o Ubuntu está tentando escolher sdd1um array diferente? Como faço para que o disco perdido volte para casa?

[Editar]- Percebi que não tinha adicionado md1 para inicialização automática em mdadm.conf. Depois de adicionar o md1 a mdadm.confele, agora tenta montar o array na inicialização, mas ainda está faltando sdd1. Se eu disser para tentar montar automaticamente, tenho a impressão de que ele sabe que precisa, sdd1mas não pode usá-lo:

root@uberserver:~# mdadm --assemble --scan
/dev/md1: File exists
mdadm: /dev/md/1 already active, cannot restart it!
mdadm:   /dev/md/1 needed for /dev/sdd1...

o que estou perdendo?

Responder1

Não tenho certeza se essa foi a maneira mais limpa de resolver o problema, mas o seguinte parece ter funcionado novamente:

root@uberserver:~# mdadm --stop /dev/md_d1
mdadm: stopped /dev/md_d1

root@uberserver:~# mdadm --add /dev/md1 /dev/sdd1
mdadm: re-added /dev/sdd1

root@uberserver:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid5 sdd1[3] sde1[1] sdf1[2]
      3907023872 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]
      [>....................]  recovery =  0.0% (121728/1953511936) finish=1337.0min speed=24345K/sec

md0 : active raid5 sdg1[2] sdc1[3] sdb1[1] sdh1[0]
      2930279808 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

Ainda não entendo por que não foi possível simplesmente adicionar o disco de volta :-/

Responder2

Encontrei um problema semelhante - possivelmente um cabo de alimentação solto fez com que meu array derrubasse uma unidade - então o mdstat mostrou [U_UU] e a unidade também desapareceu para outras ferramentas, como o SeaChest. Depois de recolocar todos os conectores, a unidade reapareceu, mas o mdadm não se recuperou automaticamente. Parecia que simplesmente o tinha deixado cair.

me@server:~$ sudo mdadm --details /dev/md0

mostrou a unidade como removida, embora estivesse presente e funcionando e tivesse as tags UUID corretas.

Para recuperar eu só tive que executar:

me@server:~$ sudo mdadm --add /dev/md0 /dev/sdb1

e imediatamente adicionou a unidade e iniciou a recuperação (não foi necessário parar o array primeiro).

informação relacionada