Que partes são incompatíveis em uma matriz Linux?

5

Este é um repost de uma pergunta que fiz no ServerFault e foi automaticamente excluído por falta de atividade. Vamos esperar que tenha mais sorte aqui .

Depois de executar uma "verificação" (escrevendo check to /sys/class/block/md0/md/sync_action ) de um array RAID de software md com redundância no Linux, o subsistema md atualizará o arquivo /sys/class/block/md0/md/mismatch_cnt virtual com o número de setores incluídos em pedaços que têm uma incompatibilidade.

Infelizmente, ele não diz qual parte ou setor eles são.

Em um array RAID 1 com 2 drives (por exemplo, md0 em sda e sdb), pode-se fazer:

blockdev --flushbufs /dev/md0 /dev/sda /dev/sdb
cmp -l /dev/sda /dev/sdb > sda-sdb.diff

Para descobrir quais bytes diferem e, em seguida, derivar o setor e informações adicionais (como qual arquivo é afetado se houver um sistema de arquivos).

Mas existe uma maneira de obter as mesmas informações para outros níveis de RAID? Por exemplo, com este array RAID10:

$ cat /sys/class/block/md0/md/mismatch_cnt
4608
$ cat /proc/mdstat
[...]
md0 : active raid10 sdd1[4] sdc1[3] sdb1[1] sda1[0]
      3906763776 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]

Como eu saberia onde estão as incompatibilidades em /dev/md0 ?

Neste caso particular, o algoritmo não é muito complicado: podemos usar mdadm -E para descobrir onde os dados começam nos dispositivos, e então sda1 é para ser o mesmo que sdb1 e sdc1 o mesmo que sdd1, o primeiro pedaço de / dev / md0 é encontrado no primeiro bloco de sda1 e sda2, o segundo no primeiro bloco de sdc1 e sdd1, então dado o deslocamento de uma diferença de byte em um par de dispositivos, não é difícil descobrir o deslocamento correspondente no dispositivo md, mas eu esperava que houvesse uma maneira de evitar que o algoritmo fosse executado manualmente

    
por Stéphane Chazelas 20.01.2016 / 13:23

0 respostas

Tags