Você pode iniciar uma limpeza de um array mdadm com echo 'check' > /sys/block/mdX/md/sync_action
e, se um setor defeituoso for encontrado, ele iráreescreva-o automaticamente(de um espelho ou de informações de paridade para RAID5/6).
Contudo setodos os blocos foram lidos com sucesso, mas não são consistentes, então isso é considerado uma incompatibilidade. Neste caso, o reparo é complicado porque o mdadm não consegue dizer qual espelho contém os dados corretos (RAID1/10) ou se são dados ou paridade que estão corrompidos (RAID5).
Em teoria, este não é o caso do RAID6 se eu entendi o RAID6 corretamente. Como existe dupla paridade, deveria ser possível identificar onde está uma única corrupção, seja nos dados ou na paridade.
- Meu entendimento está correto, isso deveria ser possível em teoria?
- Se correto, o mdadm é capaz de reparar esses dados inconsistentes sem adivinhar qual bloco está corrompido?
Responder1
É possível em teoria: o dado+paridade dá três opiniões sobre quais deveriam ser os dados; se dois deles forem consistentes, você pode assumir que o terceiro é o incorreto e reescrevê-lo com base nos dois primeiros.
Linux RAID6 não faz isso. Em vez disso, sempre que houver uma incompatibilidade, os dois valores de paridade serão considerados incorretos e recalculados a partir dos valores dos dados. Houve propostas para mudar para um sistema de “votação por maioria”, mas ele não foi implementado.
O mdadm
pacote inclui outilitário raid6checkque tenta descobrir qual disco está com defeito no caso de incompatibilidade de paridade, mas tem algumas arestas, não é instalado por padrão e não corrige os erros que encontra.
Responder2
O raid6check
utilitário from mdadm
inclui um repair
modo desde a versão 3.3 (lançada em 03/09/2013) (mais precisamente desde este commit:https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/commit/?id=8a63c73123b9d022107c82bd684e17bf87bc081e)