detecção e correção de apodrecimento de bits com o mdadm

16

Estou prestes a reorganizar todos os meus HDDs na minha home linux box nas e gostaria de usar o mdadm raid para proteção de dados e sua flexibilidade para reformular os arrays. No entanto, antes de usar o mdadm para isso, gostaria de saber como ele lida com bit rot . Especificamente, os tipos de perda de bits que não resultam em mensagens de erro de leitura irrecuperáveis sendo enviadas do disco rígido.

Dado que provavelmente usarei pelo menos 21TB de HDDs em 8 discos nas nas e as várias citações em probabilidades de falhas em HDDs, estou pensando que, durante uma reconstrução a partir de uma única falha no disco, é provável que eu encontre alguma forma de podridão nos discos restantes. Se é um erro de leitura irrecuperável em uma das unidades, que a unidade realmente relata como um erro, acredito que deve ser bom com raid6 (é?). No entanto, se os dados lidos do disco estiverem ruins, mas não forem relatados como tal pelo disco, não será possível ver como isso pode ser corrigido automaticamente, mesmo com o raid6. Isso é algo que precisamos nos preocupar? Dado o artigo É 2010 e RAID5 ainda funciona , e minhas próprias experiências de sucesso em casa e no trabalho, as coisas não são necessariamente como desgraça e melancolia como as palavras de zumbido e marketing nos fazem acreditar, mas eu odeio ter que restaurar de backups apenas porque um HDD falhou.

Dado que os padrões de uso serão, escrever no máximo algumas vezes e ler ocasionalmente, eu precisarei executar depuração de dados . Eu vejo no o wiki do archlinux os comandos mdadm para depuração de dados uma matriz como

echo check > /sys/block/md0/md/sync_action

depois, para monitorar o progresso

cat /proc/mdstat

Isso me parece que lerá todos os setores de todos os discos e verificará se os dados correspondem à paridade e vice-versa. Embora eu note que há uma strong ênfase nos documentos para dizer que há circunstâncias significativas que a operação de "verificação" não será capaz de corrigir automaticamente, apenas detectar, e deixará para o usuário corrigir.

Que nível (s) de RAID do mdadm devo escolher para maximizar minha proteção contra a podridão de bits e qual manutenção e outras etapas de proteção devo fazer? E do que isso não me protege?

Edit: Eu não estou olhando para iniciar um RAID vs ZFS ou qualquer outro controle de qualidade da tecnologia. Eu quero saber especificamente sobre o ataque mdadm. É também por isso que estou perguntando sobre o Unix & Linux e não no superusuário .

Editar: é a resposta: O mdadm só pode corrigir UREs que são reportados pelos sistemas de disco durante uma depuração de dados e detectar a podridão de bits silenciosa durante uma depuração, mas não podem / não corrigirão isso?

    
por BeowulfNode42 16.12.2013 / 08:27

5 respostas

5

Francamente, acho surpreendente que você rejeitaria o RAIDZ2 ZFS. Parece se adequar às suas necessidades quase perfeitamente, exceto pelo fato de não ser o Linux MD. Eu não estou em uma cruzada para trazer o ZFS para as massas, mas o simples fato é que o seu é um dos tipos de problemas que o ZFS foi projetado do zero para resolver. Confiar no RAID (qualquer RAID "regular") para fornecer detecção e correção de erros, possivelmente em uma situação reduzida ou sem redundância, parece arriscado. Mesmo em situações em que o ZFS não consegue corrigir corretamente um erro de dados, ele pode, pelo menos, detectar o erro e informar que há um problema, permitindo que você tome uma ação corretiva.

Você não tem para executar scrubs completos regulares com o ZFS, embora seja uma prática recomendada. O ZFS verificará se os dados lidos do disco correspondem ao que foi gravado conforme os dados estão sendo lidos e, no caso de incompatibilidade, (a) usará redundância para reconstruir os dados originais ou (b) reportará um erro de E / S para a aplicação. Além disso, o scrubbing é uma operação on-line de baixa prioridade, bem diferente de uma verificação do sistema de arquivos na maioria dos sistemas de arquivos, que podem ser de alta prioridade e off-line. Se você estiver executando um scrub e algo diferente do scrub quer fazer I / O, o scrub ficará no banco de trás enquanto durar. Um scrub do ZFS toma o lugar de um scrid RAID e uma verificação de integridade dos metadados do sistema de arquivos e dados , portanto é muito mais completo do que apenas esfregar a matriz RAID para detectar qualquer bit rot (que não informa se os dados fazem algum sentido, apenas que foram escritos corretamente pelo controlador RAID).

A redundância do ZFS (RAIDZ, espelhamento, ...) tem a vantagem de que os locais de disco não utilizados não precisam ser verificados quanto à consistência durante as scrubs; somente os dados reais são verificados durante o scrubs, pois as ferramentas percorrem a cadeia de blocos de alocação. Isso é o mesmo que com um pool não redundante. Para RAID "regular", todos os dados (incluindo locais não utilizados no disco) devem ser verificados porque o controlador RAID (seja hardware ou software) não tem idéia de quais dados são realmente relevantes.

Usando RAIDZ2 vdevs, quaisquer duas unidades constituintes podem falhar antes que você corra o risco de perda real de dados devido a outra falha na unidade, já que você tem o valor de redundância de duas unidades. Isto é essencialmente o mesmo que o RAID6.

No ZFS, todos os dados, dados do usuário e metadados, são soma de verificação (exceto se você optar por não, mas é contra isso recomendado) e essas somas de verificação são usadas para confirmar que os dados não foram alterados por qualquer motivo. Novamente, se uma soma de verificação não corresponder ao valor esperado, os dados serão reconstruídos de forma transparente ou um erro de E / S será relatado. Se um erro de E / S for relatado ou um scrub identificar um arquivo com corrupção, você saberá que os dados nesse arquivo estão potencialmente corrompidos e podem restaurar esse arquivo específico a partir do backup; não há necessidade de uma restauração de matriz completa.

Simples, com paridade dupla, o RAID não protege você contra situações como, por exemplo, quando uma unidade falha e outra lê os dados incorretamente do disco. Suponha que uma unidade falhe e haja um único bit em qualquer lugar de qualquer uma das outras unidades: de repente, você tem corrupção não detectada e, a menos que esteja satisfeito com isso, precisará de uma maneira de, pelo menos, detectá-la. A maneira de mitigar esse risco é verificar cada bloco no disco e certificar-se de que a soma de verificação não possa ser corrompida junto com os dados (protegendo contra erros como gravações high-fly, gravações órfãs, gravações em locais incorretos no disco, etc.), é exatamente o que o ZFS faz contanto que a soma de verificação esteja ativada.

A única desvantagem real é que você não pode facilmente desenvolver um RAIDZ vdev adicionando dispositivos a ele. Existem soluções alternativas para isso, geralmente envolvendo coisas como arquivos esparsos como dispositivos em um vdev, e muitas vezes denominados "Eu não faria isso se fossem meus dados". Portanto, se você usar uma rota RAIDZ (independentemente de usar RAIDZ, RAIDZ2 ou RAIDZ3), será necessário decidir antecipadamente quantas unidades deseja em cada vdev. Embora o número de unidades em um vdev seja fixo, você pode aumentar gradualmente um vdev (certificando-se de permanecer dentro do limite de redundância do vdev) substituindo as unidades por outras de maior capacidade e permitindo uma conclusão completa resilver.

    
por 16.12.2013 / 14:08
2

Para a proteção que você quer, eu vou com o RAID6 + o backup externo normal em dois locais.

Pessoalmente, esfrego uma vez por semana de qualquer forma e faço backup todas as noites, semanalmente e mensalmente, dependendo da importância dos dados e da velocidade de alteração.

    
por 23.03.2015 / 16:20
2

Eu não tenho representante suficiente para comentar, mas quero ressaltar que o sistema mdadm no Linux NÃO corrige nenhum erro. Se você disser a ele para "corrigir" erros durante um scrub de, digamos, RAID6, se houver uma inconsistência, ele irá "consertar" isso assumindo que as partes de dados estão corretas e recalculando a paridade.

    
por 04.07.2016 / 20:00
2

Esta resposta é o produto do raciocínio baseado nas várias evidências que encontrei. Eu não sei como a implementação do kernel do Linux funciona, já que eu não sou um desenvolvedor do kernel e parece haver uma quantidade razoável de desinformação sem sentido por aí. Presumo que o kernel Linux faça escolhas sensatas. Minha resposta deve ser aplicada, a menos que eu esteja enganado.

Muitas unidades usam ECCs (códigos de correção de erros) para detectar erros de leitura. Se os dados estiverem corrompidos, o kernel deve receber um URE (erro de leitura irrecuperável) para aquele bloco de uma unidade de suporte ECC. Sob essas circunstâncias (e há uma exceção abaixo), copiar dados corrompidos ou vazios por dados bons seria insanidade. Nesta situação, o kernel deve saber quais são bons dados e quais são dados incorretos. De acordo com o É 2010 e o RAID5 ainda funciona… :

Consider this alternative, that I know to be used by at least a couple of array vendors. When a drive in a RAID volume reports a URE, the array controller increments a count and satisfies the I/O by rebuilding the block from parity. It then performs a rewrite on the disk that reported the URE (potentially with verify) and if the sector is bad, the microcode will remap and all will be well.

No entanto, agora para a exceção: se uma unidade não suporta ECC, uma unidade está relacionada a corrupção de dados ou o firmware é particularmente disfuncional, então um URE pode não ser relatado e dados corrompidos serão fornecidos ao kernel. No caso de dados incompatíveis: parece que se você estiver usando um RAID1 de 2 discos, ou um RAID5, então o kernel não pode saber quais dados estão corretos, mesmo quando em um estado não degradado, porque há apenas uma paridade bloquear e não foi relatado URE. Em um RAID1 de 3 discos ou um RAID6, um único bloco corrompido não sinalizado por URE não corresponderia à paridade redundante (em combinação com os outros blocos associados), portanto a recuperação automática adequada deveria ser possível.

A moral da história é: use unidades com ECC. Infelizmente, nem todas as unidades que suportam ECC anunciam esse recurso. Por outro lado, tenha cuidado: conheço alguém que usou SSDs baratos em um RAID1 de 2 discos (ou um RAID10 de 2 cópias). Uma das unidades retornou dados corrompidos aleatórios em cada leitura de um setor específico. Os dados corrompidos foram copiados automaticamente pelos dados corretos. Se o SSD usasse ECCs e estivesse funcionando corretamente, o kernel deveria ter tomado a ação corretiva apropriada.

    
por 04.10.2016 / 20:53
-2

bit rot fud. claro ...

Eu acho que você precisa falar com o SEAGATE. (esqueça? é a desculpa)? as unidades agora têm correção ECC de 100 bits você precisa provar a podridão primeiro.
Eu aposto que você não pode. (é coisa FUD se preocupar, certo?) como medo de fantasmas ou o # 13? e não feito aqui. prova zero aconteceu. e pior, nenhuma prova de causa.

Primeiro, defina o que significa rot. ai ... HDD: O ECC verifica os dados (até 1 bit) no armazenamento ECC de 100 bits. se estiver errado, ele corrige, se continuar falhando o mecanismo SMART, com certeza em drives SAS, ele substitui logicamente o cluster ou setor por um que seja bom. usando clusters sobressalentes. isso repara o dano. Sim, todas as unidades aumentam os bits ruins desde o primeiro dia até o fim, das primeiras unidades da IBM até o NOW. mas agora fazemos auto-reparo Leia os white papers completos da Seagate. infinito lá, e aprenda como funciona um drive. ok?

isso continua até você ficar sem peças, (hdd brain, smart) e então o SMART grita FIM DA VIDA. (ou ainda mais cedo, como a HP faz) em dizer um controlador HP P420, assiste isso o tempo todo. O meu até me envia um email, mostrando os clusters NEAR OUT OF SPARE. Às vezes as peças vão muito mais rápido, um sinal claro de desgraça em breve, (10 anos de idade, certamente, menos em sata junky.

Eu chamo BOGUS e FUD em bit rot.

Meu palpite é alguém brinquedo PC escreveu os dados errado, para que nunca razões. não está executando a memória ECC? oops, servidores reais possuem RAM ECC. infectado por vírus. ou perda de energia durante a gravação (sem UPS & gt ;?)? ou tem memória ruim? ou ESD danificado. Ou PSU fazendo toneladas de ruído (ruim)

Eu chamo FUD aqui. desculpe,

    
por 07.05.2018 / 21:02

Tags