Por que um dispositivo RAID 10 precisa ser inicializado?

9

Ao criar um dispositivo de invasão de software linux como um dispositivo raid10, estou confuso por que ele deve ser inicializado. A mesma pergunta se aplica a raid1 ou raid0, realmente.

Por fim, a maioria das pessoas colocaria algum tipo de sistema de arquivos em cima dele, e esse sistema de arquivos não deveria assumir nenhum estado dos dados do disco. Cada gravação afetará os dois discos em uma instalação raid10 ou raid1, na qual os N espelhos são gravados. Não deve haver razão alguma para que um raid10 seja inicializado inicialmente, pois isso acontecerá com o tempo.

Eu posso entender o porquê de uma configuração raid5 / 6 em que há um requisito de paridade, mas mesmo assim parece que isso pode ser feito preguiçosamente.

Será que as pessoas se sentem melhor com isso?

Michael Graff
fonte
1
Boa pergunta. É possível pular a sincronização quando o RAID está sendo criado, e encontrei recomendações para fazer isso caso um ou mais dispositivos subjacentes sejam SSD. Não sei se existem cenários em que a sincronização é necessária para a operação correta.
kasperd

Respostas:

2

A sincronização inicial é necessária porque quaisquer diferenças entre os espelhos apareceriam como erros durante a verificação periódica.

E você deve fazer verificações periódicas.

Simon Richter
fonte
1
Eu posso ver por que verificações periódicas quanto à legibilidade dos dados podem ser úteis. Mas de que serve uma verificação periódica das réplicas idênticas? Tais verificações podem ser úteis se executadas por um sistema de arquivos que soma dados. Mas na camada RAID sem o conhecimento do sistema de arquivos, não é possível saber qual das duas réplicas diferentes é boa, não é possível saber como ocorreu a discrepância em primeiro lugar e não é possível saber qual arquivo (se houver) foi afetado. Portanto, parece que alertas sobre inconsistências nessa camada são inúteis, pois não há nada que o administrador possa fazer com os alertas de qualquer maneira.
precisa saber é o seguinte
Como você precisa ler os dados de qualquer maneira, o custo de compará-los é mínimo, mas pode mostrar que um dos discos desenvolveu um problema não detectado (por exemplo, RAM ruim no cache da própria unidade). O administrador dividiria a matriz, examinaria manualmente as diferenças e escolheria qual unidade substituir.
Simon Richter
Você deve expandir isso na sua resposta então.
precisa saber é o seguinte
Sei que já faz muitos anos, mas esse é o único motivo válido que posso ver. Eu acho que não importa se os dados estiverem fora de sincronia, pois, por definição, ainda não foram gravados, o sistema de arquivos aplicado à unidade de ataque nunca lerá esses blocos. Porém, garantir que as verificações periódicas sejam aprovadas desde o início torna isso necessário. Obrigado!
Michael Graff
7

O Raid 1, sendo um espelho, depende de todos os discos em um espelho serem cópias exatas um do outro. Pegue seu disco rígido aleatório e outro disco rígido aleatório, e você possivelmente possui dados diferentes, violando essa presunção. É por isso que a inicialização é necessária. Ele simplesmente copia o conteúdo da primeira unidade para outras pessoas. Observe que, em algumas condições, você pode evitar a inicialização das unidades - normalmente os dispositivos novos de fábrica já possuem zeros em todo o lugar, portanto, você pode simplesmente ignorar isso. A mdadmopção --assume-cleanfaz isso, mas avisa:

   --assume-clean

Diga ao mdadm que a matriz já existia e é conhecida por estar limpa. Pode ser útil ao tentar se recuperar de uma falha grave, pois você pode ter certeza de que nenhum dado será afetado, a menos que você realmente grave na matriz. Também pode ser usado ao criar um RAID1 ou RAID10 se você deseja evitar a ressincronização inicial, no entanto, essa prática - embora normalmente segura - não é recomendada. Use isso apenas se você realmente souber o que está fazendo.

Se você não fizer isso, há uma discrepância entre as unidades e a leitura, não há como saber o que a unidade irá ler. Você deve estar bem seguro com um sistema de arquivos (mas observe abaixo), porque provavelmente escreverá antes de ler qualquer coisa desse dispositivo e depois estará claro.

Observe que pelo menos o Linux mdadminicializará a matriz em segundo plano. Felizmente, você pode criar um FS no primeiro segundo. O desempenho vai sofrer até que a inicialização seja concluída, mas é tudo.

Mas:

a) Ao executar mkfsalguns utilitários, verifique se já existe algo nessa unidade. Embora isso atinja apenas algumas regiões conhecidas da unidade, ele é lido antes de você escrever qualquer coisa, colocando-o em perigo.

b) Se você fizer uma ressincronização periódica do seu array, o dispositivo RAID não saberá nada do seu FS. Ele simplesmente lê todos os blocos de cada dispositivo e os compara. E se você não estiver usando um FS de cópia na gravação (por exemplo, ZFS ou BTRFS) e nunca preencher seu FS, é perfeitamente plausível que um bloco fique não inicializado da perspectiva do FS por anos.

Por que sincronizar novamente com dispositivos RAID1?

Pelo mesmo motivo, você ressincroniza com dispositivos RAID5 ou qualquer outro nível (exceto RAID0). Ele lê todos os dados e compara / verifica as somas de verificação RAID (no RAID 5 ou 6). Se um pouco foi invertido de alguma forma (porque a memória HD ficou invertida espontaneamente, porque os celulares de você e seus cinco vizinhos apenas interferiram acidentalmente nessa região específica do prato, seja qual for), ele detectará inconsistência, mas não será capaz de ajudar você. Se, OTOH, um dos discos rígidos simplesmente reportar "Não consigo ler esse bloco", o que é mais provável em uma unidade com falha, você detectou uma falha mais cedo e reduziu o tempo em execução no modo degradado (contando de falha na unidade, não a partir de quando você a notar). O ataque não ajudará se uma unidade falhar e um mês depois a outra falhar se você não

RAID10

Agora, para o RAID10, todas as opções acima são válidas. Afinal, o RAID10 é apenas uma maneira inteligente de dizer 'estou colocando meus dois dispositivos RAID1 em um par RAID0'.

Embargo:

Tudo isso é um comportamento indefinido. Por que verifiquei no Linux, usando mdadm, outras implementações de RAID de software podem se comportar de maneira diferente. Outras versões do kernel do Linux e / ou mdadmferramentas que eu estou usando também podem se comportar de maneira diferente.

Torinthiel
fonte
1
Forneça uma citação para If you don't do it, there is a discrepancy between the drives and it's read, the RAID device will report failure of a drive. Acredito que essa afirmação esteja incorreta. Pelo menos, forneça um exemplo da mensagem de erro, de modo que seja possível consultar a fonte para verificar sob quais circunstâncias ela é produzida.
kasperd
1
Isso é melhor. Você verificou a declaração sobre como escrever zeros? Eu acho que não escreve zeros, mas sim copia um dos discos para os outros.
kasperd
1
While this only touches a few well-known regions of drive, it reads before you write anything, thus putting you in danger.Em perigo de quê? Sei que a leitura pode resultar em algo, mas por que isso resultaria em algum tipo de perigo para o usuário se (a) as informações lidas não são usadas em nenhum lugar e (b) uma gravação está prestes a acontecer?
Vegard 27/01
1
@ kasperd você está certo, ele copia o primeiro dispositivo para o segundo. O teste em urandomum dispositivo inicializado, com o linux mdadm, mostra que os primeiros 80k permanecem diferentes e os últimos 48k. Este último provavelmente deve-se ao arredondamento do tamanho do RAID para o tamanho do bloco. Não testei com diferentes tamanhos de dispositivo, mas o 80 + 48 é exatamente a diferença de tamanho entre o dispositivo RAID e o dispositivo de bloco subjacente.
Torinthiel 27/01
1
Uma coisa a considerar é que, geralmente durante a inicialização, o sistema RAID sempre lê o disco A e o copia no disco B. Por que? Como você pode usar o disco enquanto ele está inicializando, você pode ter gravado dados no bloco 100.000. Uma vez que o init da invasão chega a esse bloco, ambos A e B já são idênticos, então nada acontece. Se fosse zerar blocos, limparia bons dados. Portanto, mais uma vez, vejo duas razões para garantir que os blocos sejam idênticos: "sempre foi feito" e "para que você possa executar uma verificação posteriormente" - também questiono a utilidade dessa verificação. A leitura é boa, comparando? não tenho certeza.
Michael Graff
5

Lembre-se de que o RAID 1 é um espelho e o RAID 10 é uma faixa de espelhos.

A questão é: em qual disco em cada espelho os dados são válidos? Em uma matriz criada recentemente, isso não pode ser conhecido, pois os discos podem ter dados diferentes.

Lembre-se também de que o RAID opera em um nível muito baixo; não sabe nada sobre sistemas de arquivos ou quaisquer dados que possam ser armazenados no disco. Pode até não haver um sistema de arquivos em uso.

Assim, a inicialização nessas matrizes consiste nos dados de um disco em cada espelho sendo copiados como estão no outro disco.

Isso também significa que a matriz é segura de usar a partir do momento da criação e pode ser inicializada em segundo plano; a maioria dos controladores RAID (e Linux mdraid) tem uma opção para isso, ou o faz automaticamente.

Michael Hampton
fonte
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Michael Hampton
1

Simplificando, porque não se espera que dois novos discos sejam cópias perfeitas um do outro desde o início.

Eles precisam ser transformados em cópias perfeitas um do outro.

Além disso, a inicialização inclui a configuração do superbloco de metadados com informações sobre a configuração da matriz.

O arquivo / proc / mdstat deve informar que o dispositivo foi iniciado, que o espelho está sendo reconstruído e uma ETA da conclusão da reconstrução. A reconstrução é feita usando a largura de banda de E / S ociosa. Portanto, seu sistema ainda deve ser responsivo, embora os LEDs do disco também mostrem muita atividade.

O processo de reconstrução é transparente, então você pode realmente usar o dispositivo, mesmo que o espelho esteja atualmente em reconstrução.

HBruijn
fonte
2
Mas por que eles precisam ser cópias perfeitas um do outro? O que poderia resultar da inconsistência dos dois em setores que nunca foram usados ​​pelo sistema de arquivos?
kasperd
O @kasperd RAID é implementado em um nível inferior a qualquer sistema de arquivos. Então, a pergunta se torna: qual é o "sistema de arquivos" ao qual você se refere.
Taemyr 27/01
@ Taemyr Não estou me referindo a nenhum sistema de arquivos específico. Escolha o que você preferir e explique o que seria quebrado usando-o em um RAID-1 onde as réplicas não estavam sincronizadas antes de inicializar o sistema de arquivos.
kasperd
@kasperd Não existe um sistema de arquivos para quebrar no nível em que o RAID opera.
Taemyr 27/01
1
No meu caso, como pôster original, não me importo com o sistema de arquivos. Não conheço nenhum sistema de arquivos que leia setores para os quais nunca foram gravados; portanto, qualquer estado indeterminado desses setores não escritos não importa.
Michael Graff