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?
fonte
Respostas:
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.
fonte
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
mdadm
opção--assume-clean
faz isso, mas avisa: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
mdadm
inicializará 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
mkfs
alguns 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 / oumdadm
ferramentas que eu estou usando também podem se comportar de maneira diferente.fonte
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.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?urandom
um 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.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.
fonte
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.
fonte