Melhor maneira de aumentar o software Linux RAID 1 para RAID 10

22

mdadm parece não suportar o crescimento de uma matriz do nível 1 ao nível 10.

Eu tenho dois discos no RAID 1. Quero adicionar dois novos discos e converter a matriz em uma matriz RAID 10 de quatro discos.

Minha estratégia atual:

  1. Faça um bom backup.
  2. Crie uma matriz RAID 10 de 4 discos degradada com dois discos ausentes.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove um disco da matriz RAID 1.
  5. Adicione o disco disponível à matriz RAID 10 e aguarde a conclusão da ressincronização.
  6. Destrua a matriz RAID 1 e adicione o último disco à matriz RAID 10.

O problema é a falta de redundância na etapa 5.

Existe uma maneira melhor?

Hans Malherbe
fonte
5
Não se esqueça da etapa 0. Faça um bom backup de tudo.
Anthony Lewis
Eu acredito que seus passos estão corretos. Você perde a redundância durante o período em que está copiando os dados de um conjunto para outro.
21411 Kevin Kuphal
É possível criar um 4disk RAID10 degradado?
pauska 21/07/2009
1
Sim, você apenas usa "/ dev / hda ausente / dev / hdb ausente", porque, caso contrário, você perde um par inteiro e tudo desmorona. A "resposta aceita" para esta pergunta, aliás, está completamente errada e não funciona.
Womble
Também estou procurando uma boa maneira de fazer isso, e acho que o método descrito na pergunta é o melhor que encontrei até agora. A resposta de Mark Turner não ajuda porque cria uma matriz de 2 dispositivos que não pode ser remodelada para 4 dispositivos (os outros 2 só podem ser adicionados como peças de reposição). E a resposta de Suresh Kumar é a mesma descrita na pergunta, exceto que não funcionará exatamente assim; os dispositivos ausentes devem ser os 2º e 4º, não os 3º e 4º. Sobre as etapas da pergunta: Acho que a etapa 5 tem redundância total e a etapa 6 tem redundância para metade dos dados. Eu realmente ver os passos foram renumbere
aditsu

Respostas:

8

Com o linux softraid, você pode criar um array RAID 10 com apenas dois discos.

Nomes de dispositivos usados ​​abaixo:

  • md0 é a matriz antiga do tipo / nível RAID1.
  • md1 é a nova matriz do tipo / nível RAID10.
  • sda1e sdb2são novas partições vazias (sem dados).
  • sda2e sdc1são partições antigas (com dados cruciais).

Substitua nomes para se ajustarem ao seu caso de uso. Use, por exemplo, lsblkpara visualizar seu layout atual.

0) Backup, Backup, Backup, Backup oh e BACKUP

1) Crie a nova matriz (4 dispositivos: 2 existentes, 2 ausentes):

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Observe que, neste exemplo, o layout sda1tem uma contraparte ausente e sdb2outra contraparte ausente. Seus dados md1não estão seguros neste momento (efetivamente, é RAID0 até você adicionar membros ausentes).

Para visualizar o layout e outros detalhes da matriz criada, use:

mdadm -D /dev/md1

Nota! Você deve salvar o layout da matriz:

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2) Formate e monte. O /dev/md1deve ser imediatamente utilizável, mas precisa ser formatado e depois montado.

3) Copie arquivos. Use, por exemplo, rsync para copiar dados do RAID 1 antigo para o novo RAID 10. (este é apenas um exemplo de comando, leia as páginas de manual do rsync)

rsync -arHx / /where/ever/you/mounted/the/RAID10

4) Falha na 1ª parte do antigo RAID1 (md0) e adicione-o ao novo RAID10 (md1)

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2

Nota! Isso apagará os dados de sda2. O md0ainda deve ser utilizável, mas somente se o outro membro da raid foi totalmente operacional.

Observe também que isso começará os processos de sincronização / recuperação md1. Para verificar o status, use um dos comandos abaixo:

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

Aguarde até a recuperação terminar.

5) Instale o GRUB na nova matriz (supondo que você esteja inicializando a partir dela). Alguns CDs de inicialização / resgate do Linux funcionam melhor.

6) Inicialize na nova matriz. SE FUNCIONAR CORRETAMENTE Destrua a matriz antiga e adicione o disco restante à nova matriz.

PONTO DE RETORNO

Nesse ponto, você destruirá os dados no último membro da matriz md0 antiga. Tenha certeza absoluta de que tudo está funcionando.

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1

E novamente - aguarde até a recuperação md1terminar.

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7) Atualize a configuração do mdadm

Lembre-se de atualizar /etc/mdadm/mdadm.conf(remover md0).

E salve a configuração no initramfs (disponível após a reinicialização)

update-initramfs -u
Mark Turner
fonte
1
Onde os quatro discos entram nele?
Womble
Eh? Eu claramente declaro criar a matriz com 2 discos, copiar os dados, falhar no RAID 1 removendo um disco, adicionar esse disco ao RAID10 e inicializar no RAID10, se funcionou, destruir o RAID1 e mover o último disco para o novo RAID ....
Mark Turner
4
Você editou sua resposta após o meu comentário. Além disso, seu procedimento fornece um RAID-10 de dois discos com duas peças de reposição ... dificilmente um RAID-10 de quatro discos. Os volumes RAID-10 também não podem ser remodelados.
Womble
2
Executei os comandos conforme você os forneceu e termino com um RAID-10 de dois discos com duas peças, conforme mostrado por / proc / mdstat. Isso está no kernel 2.6.30, com o mdadm v2.6.7.2.
Womble
3
"mdadm: raid10 array / dev / md1 não pode ser remodelado." Isso também é mencionado na página de manual do mdadm.
Womble
9

Siga o mesmo procedimento que Mark Turner, mas ao criar a matriz de incursões, mencione 2 discos ausentes

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

E então prossiga com outras etapas.

Em resumo, crie RAID10 com um total de 4 discos (dos quais 2 estão ausentes), ressincronize e adicione outros dois discos depois disso.

Sam Whited
fonte
6

Acabei de passar do LVM em dois RAID 1 de mdadm de disco de 2 TB para o LVM em um RAID 10 de quatro discos (dois originais + dois novos discos).

Como o @aditsu observou, a ordem das unidades é importante ao criar a matriz.

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

O código acima fornece uma matriz utilizável com dois discos ausentes (adicione números de partição se você não estiver usando discos inteiros). Assim que o terceiro disco for adicionado, ele começará a sincronizar. Eu adicionei o quarto disco antes que o terceiro terminasse a sincronização. Ele apareceu como sobressalente até o terceiro disco terminar e começou a sincronizar.

Passos para a minha situação:

  1. Faça um bom backup.

  2. Crie uma matriz RAID 10 de 4 discos degradada com dois discos ausentes (chamaremos os discos ausentes # 2 e 4).

  3. Diga à esposa para não alterar / adicionar nenhum arquivo de que ela se importe

  4. Falha e remova um disco da matriz RAID 1 (disco 4).

  5. Mova as extensões físicas da matriz RAID 1 para a matriz RAID 10, deixando o disco 2 vazio.

  6. Mate a matriz RAID 1 ativa, adicione esse disco agora vazio (disco 2) à matriz RAID 10 e aguarde a conclusão da ressincronização.

  7. Adicione o primeiro disco removido do RAID 1 (disco 4) à matriz RAID 10.

  8. Dê esposa vá em frente.

Na etapa 7, acho que a unidade 1, 2 ou OR pode falhar (durante a ressincronização do disco 4) sem matar a matriz. Se a unidade 3 falhar, os dados na matriz são brindados.

user75601
fonte
+1, especialmente para a etapa 3;)
-1, instrução claro, não têm esposa, perder meus dados
ZAB
1

Eu mudei meu raid1 para raid10 agora e enquanto esta página me ajudou, mas há algumas coisas ausentes nas respostas acima. Especialmente meu objetivo era manter os horários de nascimento ext4.

a configuração foi:

  • 2 discos RAID1 de cada tipo msdos e md0 com partição ext4 e mbr com msdos
  • 2 novos discos novos tornando-se os novos primários (todos do mesmo tamanho)
  • resultando em um ataque de 4 discos md127 ext4, mas devido ao tamanho, tive que mudar de mbr para gpt
  • é o meu disco doméstico, portanto, nenhuma configuração do gerenciador de inicialização é necessária ou pretendida
  • usando meu ubuntu todos os dias (então: não usando o disco de recuperação externo)
  • usando gparted, dd e mdadm

como já foi dito antes: a etapa zero deve ser backup e sempre pode haver algo errado no processo, resultando em dataloss extremo

  1. CÓPIA DE SEGURANÇA

  2. configuração do novo ataque

    1. criar um novo ataque

      mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
      

      (eu achei que o layout é importante. o 2º e o 4º parecem ser as duplicatas em um ataque padrão 'near')

    2. definir a partição do ataque que eu estava usando gparted, configurar o gpt no md127 e adicionar uma nova partição (ext4) do tamanho da antiga ou maior
  3. migrar

    1. agora recuperando os dados ... eu estava primeiro tentando usar o rsync que funcionava, mas não conseguia manter o nascimento ... use o dd para clonar do antigo ataque para o novo

      dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
      

      ESPERE POR ISSO,
      você pode verificar enviando USR1 para esse processo

      kill -s USR1 <pid>
      
    2. consertar o ataque
      gparted é uma ótima ferramenta: você deve verificar e corrigir a partição e redimensioná-la para o tamanho máximo desse disco com apenas alguns cliques do mouse;)

    3. defina um novo uuid para essa partição e atualize seu fstab com ele (mude o uuid)

    4. armazene seu ataque em conf

      mdadm --examine --scan  >> /etc/mdadm/mdadm.conf
      

      e remova o antigo

      vim /etc/mdadm/mdadm.conf 
      
    5. reinicie se você não estiver em um rescusystem
  4. destruindo o antigo

    1. falhar no primeiro e adicioná-lo ao novo ataque

      mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
      

      então faça gpt nesse dispositivo e defina uma nova partição vazia

      mdadm /dev/md127 --add /dev/sdc1
      

      ESPERE POR ISSO,
      você pode verificar com

      cat /proc/mdstat
      
    2. pare o segundo

      mdadm --stop /dev/md0 
      

      então faça gpt nesse último dispositivo e defina uma nova partição vazia novamente

      mdadm /dev/md127 --add /dev/sdd1
      

      Aguarde novamente

Summer-Sky
fonte
0

Eu fiz isso com o LVM. Configuração inicial: - sda2, sdb2 - e criou o raid1 md1 no topo. sda1 e sdb1 foram usados ​​para a segunda raid1 para a partição / boot. - md1 era pv no espaço do grupo de volumes, com alguns lvm nele.

Adicionei discos sdc e sdd e criei partições como no sda / sdb.

Tão:

  1. criou md10 como:

    mdadm --criar / dev / md10 --nível raid10 --raid-devices = 4 / dev / sdc2 ausente / dev / sdd2

  2. estender vg nele:

    pvcreate / dev / md10 vgextend espaço / dev / md10

  3. volumes movidos de md1 para md10:

    pvmove -v / dev / md1 / dev / md10

(aguarde a conclusão) 4. reduza o grupo de volumes:

vgreduce space /dev/md1
pvremove /dev/md1
  1. Parar matriz md1:

    mdadm -S / dev / md1

  2. adicione discos do md1 antigo para o md10:

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. atualize a configuração em /etc/mdadm/mdadm.conf:

    mdadm -E --scan >> / dev / mdadm / mdadm.conf

(e remova lá md1 velho)

Tudo feito no sistema ativo, com volumes ativos usados ​​para kvm's;)

indefinir
fonte