mdadm - Remover disco de RAID0

9

Então, eu gostaria de saber, é possível fazer o seguinte com o mdadm:

  1. Eu começo com a configuração RAID0 em dois discos: sda e sdb .
  2. Eu gostaria de adicionar mais um disco à matriz, sdc e mover todos os dados de sdb para ele.
  3. Desconecte sdb .

Neste momento, vejo apenas uma opção: interrompo a matriz, copio sdb para sdc com dd ou qualquer outra ferramenta de cópia de bloco e inicio a matriz de volta.

Eu sinto falta de algo? É possível fazer isso com o mdadm?

    
por maniaque 09.07.2014 / 16:55

3 respostas

13

Primeiro de tudo: para aqueles que ainda acreditam em "RAID0 não tem hot spare". Pode ter uma reserva manual, feita por humanos, que entendem os níveis de RAID e o mdadm. O mdadm é um software RAID, por isso pode fazer muitas coisas interessantes.

Créditos para Zoredache para a ideia!

Então, a situação:

  • você tem uma matriz RAID0 de dois discos
  • você gostaria de substituir um deles sem tempo de inatividade da matriz

Se o tempo de inatividade for aceitável, você sempre pode apenas fazer uma cópia em bloco do disco com o dd e remontar a matriz, o mdadm fará OK.

Solução: use o RAID4 como solução intermediária

RAID0 - > RAID4 - > RAID0

Então, se você não se lembra do RAID4, é simples. Tem um bloco de paridade, mas ao contrário do RAID5, ele não é distribuído pela matriz, mas reside em um disco. Esse é o ponto, isso é importante e esta é a razão pela qual o RAID5 não funcionará.

Do que você precisa: mais dois discos do mesmo tamanho que o disco que você deseja substituir.

Ambiente:

  • Ubuntu 14.04 Thrusty Thar
  • mdadm - v3.2.5 - 18 de maio de 2012
  • / dev / sdb - comece com isso, irá substituí-lo
  • / dev / sdc - comece com
  • / dev / sdd - será usado temporariamente
  • / dev / sde - será usado em vez de sdb

O último guia mdadm hot-spare RAID0;)

sudo mdadm -C /dev/md0 -l 0 -n 2 /dev/sd[bc]

md0 : active raid0 sdc[1] sdb[0]
      2096128 blocks super 1.2 512k chunks

Criamos o array raid0, parece doce.

sudo md5sum /dev/md0

b422ba644a3c83cdf28adfa94cb658f3  /dev/md0

Este é o nosso ponto de verificação - se mesmo um bit diferir em /dev/md0 resultante - falhamos.

sudo mdadm /dev/md0 --grow --level=4

md0 : active raid4 sdc[1] sdb[0]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]

Então, crescemos nossa matriz para ser RAID4. Nós ainda não adicionamos o disco de paridade, então vamos fazer isso. O crescimento será instantâneo - não há nada para recompilar ou recalcular.

sudo mdadm /dev/md0 -a /dev/sdd

md0 : active raid4 sdd[3] sdc[1] sdb[0]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
      [===>.................]  recovery = 19.7% (207784/1048064) finish=0.2min speed=51946K/sec

Adicionamos sdd como disco de paridade. Isso é importante lembrar - a ordem dos discos na primeira linha não é sincronizada com a imagem na segunda linha! [UU _]

sdd é exibido primeiro, mas na verdade é o último e não contém os dados, mas a paridade.

sudo mdadm /dev/md0 -f /dev/sdb

md0 : active raid4 sdd[3] sdc[1] sdb[0](F)
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]

Tornamos nosso disco sdb com falha, para removê-lo nas próximas etapas.

sudo mdadm --detail /dev/md0

State : clean, degraded

    Number   Major   Minor   RaidDevice State
       0       0        0        0      removed
       1       8       32        1      active sync   /dev/sdc
       3       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty spare   /dev/sdb

Detalhes nos mostram a remoção do primeiro disco e aqui podemos ver a verdadeira ordem dos discos na matriz. É importante rastrear o disco com paridade, não devemos deixá-lo no array quando voltarmos ao RAID0.

sudo mdadm /dev/md0 -r /dev/sdb

md0 : active raid4 sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]

sdb é completamente removido, pode ser removido.

sudo mdadm /dev/md0 -a /dev/sde

md0 : active raid4 sde[4] sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [_UU]
      [==>..................]  recovery = 14.8% (156648/1048064) finish=0.2min speed=52216K/sec

Adicionamos o substituto para o nosso disco sdb. E aqui vamos nós: agora os dados de sdb estão sendo recuperados usando paridade. Sweeeeet.

md0 : active raid4 sde[4] sdd[3] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/3] [UUU]

Concluído. Neste momento estamos completamente seguros - todos os dados do sdb são recuperados, e agora temos que remover o sdd (lembre-se, ele contém paridade).

sudo mdadm /dev/md0 -f /dev/sdd

md0 : active raid4 sde[4] sdd[3](F) sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]

Made sdd com defeito.

sudo mdadm /dev/md0 -r /dev/sdd

md0 : active raid4 sde[4] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]

Removido o sdd da nossa matriz. Estamos prontos para nos tornar RAID0 novamente.

sudo mdadm /dev/md0 --grow --level=0 --backup-file=backup

md0 : active raid4 sde[4] sdc[1]
      2096128 blocks super 1.2 level 4, 512k chunk, algorithm 5 [3/2] [UU_]
      [=>...................]  reshape =  7.0% (73728/1048064) finish=1.5min speed=10532K/sec

Aaaaaa e bang!

md0 : active raid0 sde[4] sdc[1]
      2096128 blocks super 1.2 512k chunks

Concluído. Vamos ver a soma de verificação do MD5.

sudo md5sum /dev/md0

b422ba644a3c83cdf28adfa94cb658f3  /dev/md0

Mais alguma pergunta? Então o RAID0 poderia ter um hot spare. É chamado "usuário";)

    
por 10.07.2014 / 19:24
1

Até onde eu sei, depois de configurar um RAID0, você não pode alterar um dos discos. Você pode fazer um backup e alternar os discos e restaurar o backup. Gostaria apenas de RAID5 esses 3 discos que você tem. Dessa forma, no futuro, você pode soltar um disco e ainda reconstruí-lo.

    
por 09.07.2014 / 19:25
0

O RAID 0 não fornece redundância.

Por isso, não suporta a substituição do disco quente.

    
por 10.07.2014 / 03:18

Tags