Como o resync do mdraid funciona?

3

Eu tenho dois drives em um espelho (linux sw raid / mdadm); uma unidade de alguma forma deixou o espelho no passado e seu conteúdo está agora com vários dias de idade. Neste momento, estou usando o espelho degradado (faltando um disco) e considerando:

  • clone uptodate drive para o segundo com dd
  • adicionar segunda unidade e ressincronizar, mas não sei como funciona o processo de resync e quais dados serão sobrescritos (há volumes LVM nesse espelho)

Eu acho que dd é uma maneira segura, de qualquer forma, estou interessado em como funciona a resicronização.

    
por dmnc 22.02.2013 / 14:02

2 respostas

9

A coisa certa a fazer é algo como mdadm --add /dev/md0 /dev/sdb1 . Use a matriz correta no lugar de md0 e a partição correta no lugar de sdb1 .

O principal é que a matriz está sendo executada . Sua completamente inequívoca quais dados copiar: os dados que estão sendo executados no momento. Se você tiver os bitmaps ativados, a ressincronização será bem rápida, pois copiará apenas o que foi alterado. Caso contrário, copiará tudo.

Se você é extremamente paranóico - ou está preocupado com o fato de seu sistema de disco ter perdido gravações, e o bitmap pode não estar correto - e não se importe em forçar uma cópia completa, você pode limpar o superbloco do disco está prestes a adicionar usando mdadm --zero-superblock /dev/sdb1 (mais uma vez, use a partição correta).

Se a matriz não estava em execução no momento (por exemplo, se essa foi uma reconstrução montada a partir de um desligamento não limpo), a decisão sobre o que copiar será feita usando os campos de contagem de atualizações armazenados no superbloco. É possível que ele se recuse a adicionar novamente um disco com uma contagem de atualizações muito alta (forçando você a zerar o superbloco), mas ele não sobrescreverá os dados ativos.

Se você usasse a abordagem dd , então: (a) Você acabaria copiando o superbloco, e acabaria com dois discos 1s (o superbloco armazena a posição do disco na matriz ); (b) você teria uma cópia inconsistente, a menos que você tenha interrompido o array (ou talvez no modo somente leitura) durante a cópia. (E então, para corrigir aeb, você limparia o superbloco e deixaria o mdraid copiar os dados, como acima).

Em suma, quando você decide usar o mdraid (ou qualquer outro RAID), você fornece gerenciamento de redundância a ele. Você quase nunca quer contornar isso. O mesmo acontece com o LVM: se você quiser mover os dados, use pvmove , etc. Você não usa dd .

PS: "uma unidade de alguma forma deixou o espelho" não é algo que você deve aceitar. Existem logs; descobrir porque ele saiu do espelho. Mesmo com um kernel meio recente, os blocos defeituosos não descartam mais as unidades, portanto, a movimentação aleatória não deve acontecer. Verifique o status inteligente, etc.

    
por 22.02.2013 / 14:55
3

Se você configurou seu RAID-1 para usar um bitmap (consulte a página man), então --re-add é muito mais rápido, porque apenas as áreas escritas após a quebra da conexão devem ser escritas.

De qualquer forma (mesmo sem um bitmap uma sincronização completa) você pode mais facilmente do que com dd configurar a velocidade de sincronização via / sys / block / md0 / md / sync_speed _ *

A sincronização com o dd exigiria que você tornasse os discos ativos somente leitura durante esse período também. Então você deveria deixar o driver md funcionar. E se você ainda não fez: Adicione um bitmap.

    
por 22.02.2013 / 14:09