Recuperando setores incompatíveis em uma matriz RAID

3

Recentemente, recebi um e-mail automático dizendo "ATENÇÃO: mismatch_cnt não está em 0 / dev / md3".

Estou executando um array RAID5 de software usando o mdadm no CentOS 6.6

Ao pesquisar a mensagem, encontrei isto: -

The check operation scans the drives for bad sectors and automatically repairs them. If it finds good sectors that contain bad data (the data in a sector does not agree with what the data from another disk indicates that it should be, for example the parity block + the other data blocks would cause us to think that this data block is incorrect), then no action is taken, but the event is logged. This "do nothing" allows admins to inspect the data in the sector and the data that would be produced by rebuilding the sectors from redundant information and pick the correct data to keep.

Minha pergunta é: como eu inspeciono os dados e escolho os dados corretos para manter? Não parece haver qualquer menção de como fazer isso em qualquer lugar e não tenho idéia de quais arquivos esses setores estão afetando

    
por user3800918 15.12.2014 / 03:27

2 respostas

4

O método estúpido e demorado:

Para cada disco, monte o RAID com esse disco ausente e monte-o. Compare todos os arquivos dessas montagens; se você encontrar alguma diferença em algum dos arquivos, essa é a sua incompatibilidade.

Faça isso em um sistema de recuperação, onde seu RAID não está em execução. Para garantir que nenhuma alteração seja feita nos próprios membros do RAID, crie dispositivos de loop somente leitura para eles.

# losetup --find --show --read-only /dev/diska
/dev/loop0
# losetup --find --show --read-only /dev/diskb
/dev/loop1
# losetup --find --show --read-only /dev/diskc
/dev/loop2

Montar com um disco ausente:

# mdadm --assemble --run --readonly /dev/md42 /dev/loop0 /dev/loop1
mdadm: /dev/md42 has been started with 2 drives (out of 3).
# mount -o ro /dev/md42 loop/
# md5sum loop/file
95e3afde4229e266cb49f1d6e3fba705  file

Montar com outro disco ausente: (e fazer isso para cada disco por vez, então cada disco foi o disco ausente uma vez)

# mdadm --stop /dev/md42
# mdadm --assemble --run --readonly /dev/md42 /dev/loop0 /dev/loop2
mdadm: /dev/md42 has been started with 2 drives (out of 3).
# mount -o ro /dev/md42 loop/
# md5sum loop/file
679c261d076f268a880c0fe847739e64  file

Então, você tem um arquivo diferente. Se qualquer um deles pode ser o correto, você tem que decidir por si mesmo.

Localizar o endereço de incompatibilidade diretamente seria certamente mais inteligente; Eu não sei se md pode ser coagido para dar esses endereços para você, no entanto. Você ainda teria que encontrar em qual arquivo esse endereço poderia estar relacionado em seu sistema de arquivos. A facilidade com que isso pode ser feito depende do sistema de arquivos.

    
por 15.12.2014 / 12:59
-1

No caso do raid5, não há dados alternativos; Significa simplesmente que a soma de verificação não corresponde. Escreva repair a /sys/block/md0/md/sync_action para varrer o array e recalcule as somas de verificação incompatíveis.

    
por 15.12.2014 / 04:33