Por que um dispositivo raid 10 precisa ser inicializado?

7

Ao criar um dispositivo raid de software Linux como um dispositivo raid10, estou confuso porque ele deve ser inicializado. A mesma pergunta se aplica a raid1 ou raid0, na verdade.

Em última análise, a maioria das pessoas colocaria um sistema de arquivos de algum tipo sobre ele, e esse sistema de arquivos não deveria assumir nenhum estado dos dados do disco. Cada gravação afetará os dois discos em uma configuraçã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, como acontecerá com o tempo.

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

É só para as pessoas se sentirem melhor com isso?

    
por Michael Graff 27.01.2016 / 06:28

4 respostas

7

O Raid 1, sendo um espelho, depende de todos os discos em um espelho serem cópias exatas um do outro. Pegue o seu disco rígido aleatório, e outro disco rígido aleatório, e você possivelmente terá dados diferentes, violando assim essa suposição. É por isso que a inicialização é necessária. Simplesmente copia o conteúdo da primeira unidade para outras pessoas. Note que, em algumas condições, você pode se safar de não inicializar as unidades - geralmente os novos dispositivos de fábrica já possuem zeros em todo o lugar, então você pode simplesmente ignorar isso. A mdadm option --assume-clean faz isso, mas avisa:

   --assume-clean

Tell mdadm that the array pre-existed and is known to be clean. It can be useful when trying to recover from a major failure as you can be sure that no data will be affected unless you actually write to the array. It can also be used when creating a RAID1 or RAID10 if you want to avoid the initial resync, however this practice -- while normally safe -- is not recommended. Use this only if you really know what you are doing.

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

Observe que, pelo menos, o mdadm do Linux inicializará a matriz em segundo plano. Você pode facilmente criar o FS no primeiro segundo. O desempenho vai sofrer até a inicialização terminar, mas isso é tudo.

Mas:

a) Ao fazer mkfs alguns utilitários verificam se já existe algo nessa unidade. Enquanto isso só toca em algumas regiões bem conhecidas do drive, ele lê antes de você escrever qualquer coisa, colocando você em perigo.

b) Se você fizer uma ressincronização periódica da sua matriz, o dispositivo RAID não conhece nada do seu FS. Ele simplesmente lê cada bloco de cada dispositivo e os compara. E se você não estiver usando um FS de copy-on-write (por exemplo, ZFS ou BTRFS) e nunca preencher seu FS, é perfeitamente plausível que um bloco permaneça não inicializado na perspectiva de FS por anos.

Por que ressincronizar com dispositivos RAID1?

Pela mesma razão, 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 do RAID (no RAID 5 ou 6). Se um bit foi virado de alguma forma (porque a memória HD tem um flip espontâneo, porque os celulares de vocês e seus 5 vizinhos apenas interferiram acidentalmente nessa região específica do disco, o que quer que seja) ele detectará inconsistência, mas não será capaz de ajudar você. Se, OTOH, um dos discos rígidos simplesmente informar "Não consigo ler esse bloco", o que é mais provável com uma unidade com falha, você só detectou uma falha no início e reduziu o tempo em execução no modo degradado (contando a partir de a falha da unidade, não a partir de quando você percebe isso). O Raid não o ajudará se uma unidade falhar e um mês depois a outra falhar se você não notar a primeira falha naquele mês.

RAID10

Agora, para o RAID10, todos os itens acima são válidos. Afinal, o RAID10 é apenas uma maneira inteligente de dizer "Estou colocando meus dois dispositivos RAID1 em um par RAID0".

Advertência:

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

    
por 27.01.2016 / 12:33
5

Lembre-se de que o RAID 1 é um espelho e que 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 recém-criada, isso não pode ser conhecido, pois os discos podem ter dados diferentes.

Lembre-se também que o RAID opera em um nível muito baixo; ele não sabe nada sobre sistemas de arquivos ou qualquer outro dado que possa estar armazenado no disco. Pode não haver nem mesmo um sistema de arquivos em uso.

Assim, a inicialização nesses arrays consiste nos dados de um disco em cada espelho sendo copiado como está para o outro disco.

Isso também significa que a matriz é segura de usar desde o 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 faz isso automaticamente.

    
por 27.01.2016 / 06:40
1

Simplificando, não é esperado que dois novos discos sejam cópias perfeitas de espelho 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 também.

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

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

    
por 27.01.2016 / 07:04
0

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

E você deveria estar fazendo verificações periódicas.

    
por 27.01.2016 / 11:04