Reconstrução de MD RAID1 compatível com SSD / NVME no Linux

Oct 06 2020

Eu uso matrizes SSD e NVME RAID1 para armazenar principalmente discos de máquinas virtuais. Mais de 75% dos dados são zeros (imagens pré-alocadas, espaço livre).

Se um disco falhar e for substituído, a reconstrução copia e grava todos os dados no disco de substituição, o que causa estrangulamento térmico no NVME e presumo mais desgaste no SSD / NVME. Existe uma maneira de configurar a reconstrução para comparar os dados de ambos os discos primeiro e gravar no novo disco apenas se necessário?

Ou os chips SSD / NVME deveriam verificar se os dados são apenas zeros e se os blocos de destino ainda não foram gravados (dando zeros na leitura), eles apenas descartariam os dados sem desperdiçar ciclos de gravação? Ou se houver algum dado de destino, ele deve apenas cortar o bloco para produzir zeros?

Eu encontrei um tópico antigo em https://www.spinics.net/lists/raid/msg57529.html mas não deu uma resposta.

Eu tentei uma solução alternativa, mas acho que é feio além do RAID deve estar offline.

mdadm --fail /dev/md0 /dev/sde
mdadm -r /dev/md0 /dev/sde

(substitua / dev / sde)

mdadm -S /dev/md0
ddpt if=/dev/sdd of=/dev/sde verbose=1 oflag=sparing
mdadm -C -v /dev/md0 --assume-clean -l 1 -n 2 /dev/sdd /dev/sde

Alguma ideia para reconstrução RAID1 de comparação e gravação? Obrigado.

Respostas

2 Nils Oct 11 2020 at 04:41

A resposta curta é não.

O driver md é ajustado para desempenho. E tem um mapa simplesmente sujo para manter os membros do raid 1 em sincronia.

Portanto, se um membro falhar, todo o mapa estará sujo. Como o md é apenas baseado em blocos, ele não se importa com o conteúdo dos blocos, ele apenas copia sobre os blocos e limpa os bits sujos desses blocos.

Princípio do KISS - mantenha-o simples, estúpido. Qualquer outra coisa estaria em um nível superior.

Se você quiser, pode usar drbd com dois membros locais em vez de md raid1. O DRBD fornece os meios para verificar antes de sincronizar.

2 JohnLeeMcMahon Oct 16 2020 at 10:00

Portanto, a única maneira de fazer a reconstrução de comparação e gravação em MDRAID1 (além de sincronizar offline por exemplo, ddpt) parece ser o reparo (o array deve ser interrompido e reconfigurado ao substituir o disco, o disco bom deve ir primeiro no novo array para se tornar o ID 0 e a fonte de dados)

mdadm -C -v /dev/md0 -l 1 -n 2 /dev/sdd /dev/sde
mdadm /dev/md0 -f /dev/sdd -r /dev/sdd
mdadm -S /dev/md0
mdadm -C -v /dev/md0 -l 1 -n 2 --assume-clean /dev/sde /dev/sdd
echo repair > /sys/block/md0/md/sync_action

Parece funcionar para vários espelhos também:

mdadm -C -v /dev/md0 -l 1 -n 3 /dev/sdd /dev/sde /dev/sdf
mdadm /dev/md0 -f /dev/sde -f /dev/sdf -r /dev/sde -r /dev/sdf
mdadm -S /dev/md0
mdadm -C -v /dev/md0 -l 1 -n 3 --assume-clean /dev/sdd /dev/sde /dev/sdf
echo repair > /sys/block/md0/md/sync_action

Eu também experimentei ideias de remodelar a matriz sem parar (RAID0 -> RAID1_or_RAID10 -> RAID0), mas não vi comparar e gravar em RAID10 (aparentemente usado para RAID10 pelo thread Linux-raid original) e as coisas não funcionam como Eu esperava em RAID0 -> conversões RAID1.

Cópia completa, mas funciona:

mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdd /dev/sde
mdadm -G /dev/md0 -n 4 -l 10 -a /dev/sdf -a /dev/sdg
mdadm /dev/md0 -f /dev/sdf -f /dev/sdg -r /dev/sdf -r /dev/sdg
mdadm -G /dev/md0 -n 2 -l 0

Cópia completa, também funciona:

mdadm -C -v /dev/md0 -l 0 -n 3 /dev/sdd /dev/sde /dev/sdf
mdadm -G /dev/md0 -n 6 -l 10 -a /dev/sdg -a /dev/sdh -a /dev/sdi
mdadm /dev/md0 -f /dev/sdg -f /dev/sdh -f /dev/sdi -r /dev/sdg -r /dev/sdh -r /dev/sdi
mdadm -G /dev/md0 -n 3 -l 0

Mas problemas aqui:

mdadm -C -v /dev/md0 -l 1 -n 2 /dev/sdd /dev/sde
mdadm /dev/md0 -f /dev/sde -r /dev/sde
mdadm -G /dev/md0 -n 1 -l 0

Não é possível alterar o número de discos na conversão RAID1-> RAID0

mdadm -G /dev/md0 -l 0

mas sem -n 1 funciona

mdadm -G /dev/md0 -l 1 -n 2 --force -a /dev/sde

Mudança de nível impossível solicitada

mdadm -C -v --force /dev/md0 -l 0 -n 1 /dev/sdd
mdadm -G /dev/md0 -l 1 -n 2 --force -a /dev/sde

Mudança de nível impossível solicitada