Como fazer um software Linux RAID1 detectar corrupção de disco?

6

Este é um dos dias de pesadelo: um servidor virtualizado executado em um Linux SW-RAID1 executa uma VM que exibe segfaults aleatórios em codecunks aparentemente aleatórios.

Durante a depuração, descubro que um arquivo fornece md5sums diferentes em cada execução. Indo mais a fundo, acho que: As partições de disco bruto que compõem o espelho RAID1 contêm duas diferenças de bit e ca. 9 setores estão completamente vazios em um disco e são preenchidos com dados no outro disco.

Obviamente, o Linux devolve um setor de um disco escolhido indeterministicamente do conjunto de espelhos. Então às vezes o mesmo setor é retornado OK, às vezes o corrompido é devolvido.

Os documentos dizem:

RAID cannot and is not supposed to guard against data corruption on the media. Therefore, it doesn't make any sense either, to purposely corrupt data (using dd for example) on a disk to see how the RAID system will handle that. It is most likely (unless you corrupt the RAID superblock) that the RAID layer will never find out about the corruption, but your filesystem on the RAID device will be corrupted.

Obrigado. Isso vai me ajudar a dormir. : - /

Existe uma maneira de o Linux detectar pelo menos essa corrupção usando a soma de verificação do setor ou algo assim? Isso seria detectado em uma configuração RAID5? É este o momento que eu gostaria de usar o ZFS ou o btrfs (uma vez que se torne utilizável sem as capacidades do uber-admin)?

Editar: Eu não estou sozinho .

    
por Paul 07.01.2011 / 10:05

2 respostas

5

Você pode forçar uma verificação de (por exemplo) md0 com

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

Você pode verificar o estado do teste com

cat /sys/block/md0/md/sync_action

enquanto retorna check a verificação está em execução, uma vez que retorna idle você pode fazer um

cat /sys/block/$dev/md/mismatch_cnt

para ver se a contagem de incompatibilidade é zero ou não. Muitas distros automatizam essa verificação para executar, por exemplo, semanalmente, de qualquer maneira, assim como a maioria dos RAIDs de hardware industriais executam isso em segundo plano (eles geralmente chamam de "lavagem RAID") enquanto a matriz está inativa. Note que de acordo com os comentários no arquivo de checagem automatizado do fedora, as gravações do RAID1 no kernel são sem buffer e, portanto, a contagem de incompatibilidade pode ser diferente de zero mesmo para um array saudável se o array estiver montado.

Portanto, desativar os arrays fazendo essa verificação enquanto a VM está inativa, se possível, provavelmente é uma boa ideia.

Gostaria de acrescentar que concordo com os documentos quando dizem que

RAID cannot and is not supposed to guard against data corruption on the media

O RAID deve proteger contra falha completa de um dispositivo; A proteção contra falhas aleatórias incrementais em elementos de um dispositivo de armazenamento é um trabalho para verificação de erros e remapeamento de blocos, o que é provavelmente o melhor feito no próprio controlador. Estou feliz que os documentos avisam as pessoas sobre as limitações do RAID, especialmente se ele for implementado em cima de dispositivos esquisitos. Acho que as freqüentes verificações de integridade do smartctl dos meus discos me ajudam a ficar em cima das unidades que estão começando a mostrar o tipo de erro que leva a espelhos fora de sincronia.

    
por 07.01.2011 / 12:50
0

Você marcou essa? link

    
por 07.01.2011 / 12:51