Avançar para o conteúdo
Home » Como funciona o sistema de paridade Unraid? – Explicação da Paridade Unraid

Como funciona o sistema de paridade Unraid? – Explicação da Paridade Unraid

Advertisements

Some of the links shared in this post are affiliate links. If you click on the link and make a purchase, we will receive an affiliate commission at no additional cost to you.


A paridade é utilizada pelo unRAID para proteger contra a perda de dados. Se uma unidade na matriz falhar, os dados nas outras unidades podem ser combinados com os dados de paridade para reconstruir os dados em falta.

Porquê a paridade? Porque só existem dois tipos de discos rígidos no mundo:

  • Discos rígidos que já falharam.
  • Discos rígidos que ainda não falharam, mas que precisam de um pouco mais de tempo antes de falharem.

Como funciona a paridade

Em geral, um processo de paridade é concebido para reconhecer uma alteração de um único bit num determinado conjunto de bits, definindo o valor de um bit adicionado para forçar uma soma sobre esse conjunto de bits para um valor conhecido. O bit adicionado é designado por bit de paridade.

Com o unRAID, os bits de paridade são armazenados numa unidade de paridade que é independente das unidades de dados. Este bit de paridade funciona através do conjunto de bits na mesma posição de bit relativa em cada unidade. Assim, o 57º bit da unidade de paridade é o bit de paridade para o 57º bit de todas as unidades de dados. Assim, uma verificação de paridade da posição do 57º bit soma todos os 57º bits de todos os drives, incluindo o drive de paridade, e verifica se a soma é um número par. Se o valor devolvido não for par, o bit de paridade é comutado para que a verificação de paridade devolva um número par.

Porquê um número par? O unRAID usa “paridade par”, o que significa simplesmente que o processo de soma (usando uma operação matemática chamada “exclusive OR” ou “XOR”) sobre este conjunto de bits deve retornar um valor que é um número par.

Os dados digitais são armazenados como um 1 ou um 0:

Se tiveres 4 unidades com os valores de bits 1,1,1,1, a paridade é 0 (1+1+1+1+1+0=par). Se os valores de bits forem 1,0,0,0, a paridade é 1 (1+0+0+0+1=par).

Se uma unidade for adicionada a uma matriz unRAID protegida por paridade, é primeiro eliminada escrevendo zeros em todos os bits de todos os sectores desta unidade. Um valor zero não tem efeito sobre a paridade. Quando a nova unidade estiver cheia de zeros, o unRAID pode facilmente inseri-la na matriz sem ter que restaurar a paridade. Desta forma, vários discos rígidos podem ser adicionados ao mesmo tempo.

Reconstrução de dados

Existem apenas duas situações em que os dados de paridade unRAID são utilizados para reconstruir dados:

  • quando um suporte de dados é reconstruído; e
  • se for detectado um sector defeituoso.

Nestes momentos, todos os discos (incluindo a paridade) são lidos para reconstruir os dados a serem escritos no disco alvo. Como a soma dos bits é sempre par, o unRAID pode reconstruir qualquer UM elemento de dados em falta (a paridade ou um disco de dados) desde que os outros elementos estejam corretos.

Nos dois exemplos acima, digamos que o 2.

  • 1+x+1+1+0=par, x tem de ser igual a 1
  • 1+x+0+0+1=par, x tem de ser igual a 0

Uma vez que a paridade é tão importante para a reconstrução de dados, deves garantir que a paridade está correta, efectuando verificações regulares da paridade.

Se removeres fisicamente um único disco da tua matriz, podes continuar a ler e a escrever nele. É simulado através da leitura de todos os outros discos de dados e da paridade. Da mesma forma, o disco de paridade é atualizado conforme necessário ao escrever para o disco simulado. Se agora instalares um disco de substituição, este pode ser completamente reconstruído utilizando o conteúdo recentemente reconstruído com base na paridade e em todas as outras unidades de dados.

Verificação de paridade

Durante uma sincronização de paridade, o sistema lê todos os discos de dados e escreve a paridade calculada no disco de paridade.

Durante uma verificação de paridade, o sistema lê todos os discos de dados e o disco de paridade e compara a paridade calculada com a paridade armazenada. Esta operação tem um sinalizador:

CORRECTO - se ocorrer uma incompatibilidade de paridade, grava o disco de paridade com a paridade calculada e reporta no syslog
 NOCORRECT - apenas relata no syslog

Apenas os primeiros 100 erros de verificação de paridade são reportados. (As mensagens no registo do sistema são geradas para cada endereço de sector onde ocorre uma correspondência de paridade incorrecta. Por conseguinte, se efetuar uma verificação de paridade numa matriz que não tenha paridade válida, o registo do sistema tornar-se-á rapidamente muito grande; daí o limite de 100 mensagens).

Estes erros de paridade são chamados “erros de sincronização” ou “erros de sincronização de paridade”. Indicam quantos endereços de bloco foram encontrados onde a paridade calculada não estava “sincronizada” (ou seja, não correspondia) com a paridade armazenada. (Um ‘bloco’ consiste em 4096 bytes. Este é também o tamanho do PAGE do Linux – a unidade básica de I/O).

Um disco de paridade válido significa que existe um disco de paridade e que uma sincronização de paridade foi concluída em algum momento no passado sem erros (ou aborto). Quando a sincronização da paridade estiver concluída, o disco de paridade é sempre “válido” (e tem um ponto verde). Válido”, neste sentido, significa que pode ser utilizado para reconstruir um disco de dados que falhou.

(Na verdade, ‘válido’ é um estado que se aplica a todos os discos da matriz, tanto os discos de dados como o disco de paridade. Se todos os discos da matriz, exceto um, forem válidos, isto significa que o disco inválido pode ser reconstruído com os dados dos outros).

Se uma verificação/correção de paridade resultar em erros, porque é que o disco de paridade ainda está marcado como “válido”? Se o sistema marcar o disco de paridade como “inválido” devido a um punhado de erros de paridade e depois outro disco falhar, este outro disco já não pode ser reconstruído (porque agora haveria dois discos inválidos na matriz). O disco de paridade inteiro não é portanto marcado como inválido devido aos erros de paridade detectados. Claro que um utilizador pode declarar a paridade inválida a qualquer momento cancelando a sua atribuição.

Uma vez calculada a paridade, só devem existir 2 possibilidades de ocorrência de erros de verificação de paridade:

  • Um encerramento não limpo, ou seja, uma falha de energia súbita ou uma reinicialização do sistema. Neste caso, as operações de escrita nos discos de paridade e/ou de dados podem estar pendentes mas não concluídas, pelo que a banda correspondente tem uma paridade inconsistente.
  • Um erro de hardware não reconhecido (por exemplo, corrupção silenciosa da memória).

Disco rígido de paridade em Unraid

Tamanho

O tamanho do disco de paridade deve ser igual ou superior ao da maior unidade de dados.

Desempenho

Utilizar a paridade para proteger os seus dados irá inevitavelmente afetar o desempenho quando escreve dados na matriz. Sempre que um disco de dados é gravado, o disco de paridade também deve ser atualizado. Cada operação de escrita para um disco de dados unRAID protegido por paridade resulta em 4 operações de disco: Lê e escreve para a paridade e lê e escreve para os dados. O prato de cada disco deve fazer uma rotação completa após a leitura para reposicionar a cabeça do disco sobre o sector onde está a ser gravado.

A escrita na matriz unRAID também é limitada pela velocidade mais lenta (velocidade de rotação) das unidades envolvidas. Se apenas a unidade de paridade for uma unidade de 7200 rpm, continua a estar limitado pela velocidade da unidade de dados. Não verá qualquer melhoria na velocidade de escrita, a menos que várias unidades de dados mais lentas estejam a ser gravadas ao mesmo tempo e uma unidade de paridade mais rápida de 7200 rpm esteja a tentar acompanhar ambas.

Paridade dupla

Com matrizes de grandes dimensões, a “paridade dupla”, ou seja, a possibilidade de ter um segundo disco rígido de paridade, não é simplesmente um espelhamento do primeiro. Isto permite duas falhas de unidade simultâneas sem perda de dados.

Em um sistema de redundância P + Q (como em um sistema RAID-6) haveria dois discos de redundância: ‘P’, que é a paridade XOR usual, e ‘Q’, que é um código Reed-Solomon. Isto permite que o unRAID recupere de 2 falhas de disco com um impacto mínimo na performance. (Requer esclarecimento de que isso é realmente usado)

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Mastodon