Linux software RAID6: 3 unidades off-line - como forçar on-line?

1

Isso é semelhante a 3 unidades caíram de Raid6 mdadm - reconstrução ? exceto que não é devido a um cabo com falha. Em vez disso, a terceira unidade ficou offline durante a reconstrução de outra unidade.

A unidade falhou com:

kernel: end_request: I/O error, dev sdc, sector 293732432
kernel: md/raid:md0: read error not correctable (sector 293734224 on sdc).

Após a reinicialização, esses dois setores e os setores ao seu redor estão bem. Isso me leva a acreditar que o erro é intermitente e, portanto, o dispositivo simplesmente demorou muito para corrigir o setor e refazê-lo.

Espero que nenhum dado tenha sido gravado no RAID depois de ter falhado. Portanto, espero que, se eu puder chutar o último dispositivo com falha on-line, o RAID esteja bem e que o xfs_filesystem esteja OK, talvez com alguns arquivos recentes ausentes.

Fazer um backup dos discos no RAID leva 24 horas, por isso prefiro que a solução funcione na primeira vez.

Por isso, configurei um cenário de teste:

export PRE=3

parallel dd if=/dev/zero  of=/tmp/raid${PRE}{} bs=1k count=1000k ::: 1  2  3  4  5
parallel mknod /dev/loop${PRE}{} b 7 ${PRE}{} \; losetup /dev/loop${PRE}{} /tmp/raid${PRE}{} ::: 1  2  3  4  5
mdadm --create /dev/md$PRE -c 4096 --level=6 --raid-devices=5  /dev/loop${PRE}[12345]
cat /proc/mdstat
mkfs.xfs -f /dev/md$PRE
mkdir -p /mnt/disk2
umount -l /mnt/disk2
mount /dev/md$PRE /mnt/disk2
seq 1000 | parallel -j1 mkdir -p /mnt/disk2/{}\;cp /bin/* /mnt/disk2/{}\;sleep 0.5 &
mdadm --fail /dev/md$PRE /dev/loop${PRE}3 /dev/loop${PRE}4
cat /proc/mdstat

# Assume reboot so no process is using the dir
kill %1; sync &
kill %1; sync &

# Force fail one too many
mdadm --fail /dev/md$PRE /dev/loop${PRE}1
parallel --tag -k mdadm -E ::: /dev/loop${PRE}? | grep Upda
# loop 2,5 are newest. loop1 almost newest => force add loop1

O próximo passo é adicionar loop1 de volta - e é aí que estou preso.

Depois disso, verifique a consistência do xfs.

Quando isso funcionar, verifique se a solução também funciona em dispositivos reais (como 4 pen drives USB).

    
por Ole Tange 30.10.2012 / 17:16

1 resposta

1

A mágica parece ser mdadm -A --force e, em seguida, apenas os dispositivos conhecidos são bons + o último dispositivo com falha. Para o cenário de teste, seria:

mdadm -A --force /dev/md$PRE /dev/loop${PRE}[125]

Isso inicia o dispositivo RAID. xfs_check diz para você montar o disco para reproduzir o log:

mount /dev/md$PRE /mnt/disk2

Neste ponto, não usa o diretório: No cenário de teste, eu pelo menos uma vez tive o xfs reclamando e travando. Então, ao invés disso:

umount /mnt/disk2

e depois:

xfs_check /dev/md$PRE

Isso levou 20 minutos em um sistema de arquivos de 50 TB. Curiosamente, a maior parte do tempo era tempo de CPU e não esperava por E / S de disco. É usado na ordem de 100 GB de RAM.

Agora, o sistema de arquivos pode ser usado novamente:

mount /dev/md$PRE /mnt/disk2

Tudo até o último sync está OK. Somente as coisas escritas depois da última sincronização são exibidas.

Adicione algumas peças de reposição e faça a reconstrução.

Quando a cópia dos discos existentes terminar amanhã, testarei o que precede. Se funcionar, então o acima é uma resposta. Caso contrário, uma nova cópia do conjunto original será iniciada e novas ideias serão bem-vindas (mas, por favor, teste-as no cenário de teste).

==

As peças sobressalentes agora são adicionadas e a reconstrução é iniciada. Cada milésimo arquivo foi copiado para um diretório no sistema de arquivos e isso não causou problemas nos registros. Então parece que o sistema de arquivos está OK. Resta ver se os usuários perdem alguns arquivos.

==

Nenhum usuário informou arquivos ausentes até o momento, então parece funcionar.

    
por 30.10.2012 / 18:38