mdadm - Remover disco do RAID0

11

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

  1. Começo com a configuração RAID0 em 2 discos: sdae sdb.
  2. Gostaria de adicionar mais um disco ao array sdce mover todos os dados sdbpara ele.
  3. Desconecte sdb.

No momento, vejo apenas uma opção - paro a matriz, copio sdbpara ou sdccom ddqualquer outra ferramenta de cópia em bloco e inicio a matriz novamente.

Perco alguma coisa? É possível fazer isso com o mdadm?

maniaque
fonte
Você pode transformar sdb em um espelho temporário e sincronizar sdc com ele em segundo plano - isso reduziu o tempo de inatividade necessário, embora eu não tenha feito isso como iniciante em seu lugar.
peterh - Restabelece Monica
Eu não sou iniciante com certeza :) Você pode me falar mais sobre espelho temporário? É o recurso mdadm?
Maniaque
Não, é um recurso simples de ataque. Eu pensei que uma matriz RAID1 temporária, que poderia ser o lugar de sdb em sua matriz RAID1. Enquanto estiver sincronizando sdb para sdc, você também poderá usá-lo como parte de sua matriz raid0.
peterh - Restabelece Monica
Então, eu entendo você certo? 1. Pare a matriz. 2. Crie mais uma matriz RAID1 com sbd e sdc. 3. E como eu poderia pedir ao mdadm para iniciar meu RAID0 com md1 em vez de sdb?
Maniaque
Ainda não pesquisamos muito, mas certamente parece que você deve crescer de um RAID0 -> RAID5. Em seguida, reduza novamente para um RAID0.
Zoredache

Respostas:

17

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

Créditos à Zoredache pela 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 poderá fazer uma cópia em bloco do disco com dd e remontar a matriz, o mdadm funcionará bem.

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

RAID0 -> RAID4 -> RAID0

Portanto, se você não se lembra do RAID4, é simples. Ele possui um bloco de paridade, mas, diferentemente do RAID5, não é distribuído pela matriz, mas reside em UM disco. Esse é o ponto, isso é importante e é por isso que o RAID5 não funcionará.

O que você precisará: mais dois discos do mesmo tamanho, como o disco que você deseja substituir.

Meio Ambiente:

  • Ubuntu 14.04 Thrusty Thar
  • mdadm - v3.2.5 - 18 de maio de 2012
  • / dev / sdb - começa com ele, substitui-o
  • / dev / sdc - comece com ele
  • / dev / sdd - será usado temporariamente
  • / dev / sde - será usado no lugar do sdb

O melhor guia mdadm de reposição a quente 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 uma matriz raid0, parece legal.

sudo md5sum /dev/md0

b422ba644a3c83cdf28adfa94cb658f3  /dev/md0

Este é o nosso ponto de verificação - se um bit diferir no resultado /dev/md0- 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, aumentamos nossa matriz para RAID4. Ainda não adicionamos o disco de paridade, então vamos fazê-lo. O crescimento será instantâneo - não há nada para recalcular 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 sddcomo disco de paridade. É 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 mantém não 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]

Fizemos o disco sdb com defeito, 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

Os 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 na matriz ao retornar 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 retirado.

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 a substituição do nosso disco sdb. E aqui vamos nós: agora os dados do 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]

Feito. No momento, estamos completamente seguros - todos os dados do sdb são recuperados e agora temos que remover o sdd (lembre-se, ele mantém a 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_]

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 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

Aaaaaaand bang!

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

Feito. Vejamos a soma de verificação MD5.

sudo md5sum /dev/md0

b422ba644a3c83cdf28adfa94cb658f3  /dev/md0

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

maniaque
fonte
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 RAID5 esses 3 discos que você tem. Dessa forma, no futuro, você poderá soltar um disco e ainda reconstruí-lo.

joeg1ff
fonte
Bem, eu sei como fazer o que falo com o RAID5 - posso adicionar um novo disco ao array (como sobressalente), marcar o disco que gosto de sair com defeito e removê-lo do array, limpando o superbloco posteriormente. Mas eu estou interessado em mesma operação com RAID0 :)
maniaque
@ maniaque Chama-se RAID 0 porque zero é o quanto RAID você recebe. Absolutamente nada de importância nunca deve ser colocado em um RAID 0.
Michael Hampton
@ MichaelHampton Acho que você quer dizer redundância, não RAID, mas sua afirmação está 100% correta.
1011814 joJo1ff
@MichaelHampton Por favor, veja a minha resposta abaixo :)
maniaque
0

O RAID 0 não fornece redundância.

Portanto, ele não suporta substituição de unidade quente.

user2743554
fonte
1
Basta olhar abaixo, por favor. Não há nada impossível, quando você entender os níveis de RAID;)
maniaque