Raid 5 reconstruir com tamanho de faixa errado e sem discos com falha - os dados são perdidos?

3

Estou curioso para saber se há complexidades ocultas nas reconstruções RAID5 e RAID5.

Meu entendimento é que (em uma matriz de 3 discos) uma reconstrução apenas computaria diretamente a paridade de discos 1 & 2 e escreva essa paridade no disco 3 (ou qualquer outro disco que tenha sido substituído). Se for realmente simples, existe alguma maneira de uma reconstrução causar perda de dados se nenhum disco for realmente substituído?

Por exemplo, "hipoteticamente", se eu configurei minha matriz de raid com todos os discos & os dados originais ainda existem, mas definem a simetria errada, o tamanho errado da faixa, os discos na ordem errada, etc, e então por algum motivo eu ressincronizei ou reconstruí a matriz, os dados poderiam ser perdidos (ou até mesmo alterados)?

    
por fuzic 05.09.2014 / 08:28

1 resposta

0

Se você remover um disco do seu RAID, mas o RAID ainda funcionar porque o disco ausente foi coberto pela redundância e, em seguida, você adicionar um disco de substituição, esse disco adicionado será sobrescrito. Não há perda de dados, pois os dados que você vê no dispositivo /dev/mdX não são alterados. No entanto, se você tiver dados importantes sobre esse disco adicionado, ele será perdido devido à sobregravação.

Portanto, tudo depende de os dados dos discos restantes estarem intactos ou não.

set the wrong symmetry, wrong stripe size, disks in the wrong order, etc

Tente evitar mdadm --create para recuperar um RAID. É a pior opção, porque é muito fácil errar (muitas variáveis, como ordem de disco, tamanho do fragmento, nível de raid, layout de raid, versão de metadados, offsets de dados, ... e padrões mdadm para aqueles que mudam tempo, então você deve especificar todos eles corretamente).

Se você precisar usá-lo, deverá fazê-lo no modo somente leitura: backups de regiões de metadados, em uma camada de instantâneo, em falta de disco, --assume-clean para impedir a sincronização, ...

Se uma sincronização incorreta destrói ou altera seus dados depende do quanto você errou as configurações. Basicamente, em um RAID5, desde que todos os discos estejam intactos e todos os dados de paridade estejam corretos, você pode sincronizar com qualquer ordem de disco e qualquer tamanho de bloco. A sincronização em si não causará nenhum dano. XOR é XOR, independentemente da ordem ou tamanho, o resultado é o mesmo.

# truncate -s 128M a b c
# losetup -f --show a b c
/dev/loop0
/dev/loop1
/dev/loop2
# mdadm --create /dev/md42 --level=5 --chunk=512 --raid-devices=3 /dev/loop0 /dev/loop1 /dev/loop2
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md42 started.
# shred -n 1 /dev/md42
# mdadm --stop /dev/md42
mdadm: stopped /dev/md42
# dd if=/dev/loop0 bs=1M skip=8 | md5sum
98f23e09198f7943e27030e8e0f9bc30  -
# dd if=/dev/loop1 bs=1M skip=8 | md5sum
90ef43c60e540b930c6db8dae831f8ab  -
# dd if=/dev/loop2 bs=1M skip=8 | md5sum
d010c8ae141fadc3347e8ed319b76db9  -
# mdadm --create /dev/md42 --level=5 --chunk=64 --raid-devices=3 /dev/loop2 /dev/loop0 /dev/loop1
mdadm: /dev/loop2 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Fri Sep  5 11:35:51 2014
mdadm: /dev/loop0 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Fri Sep  5 11:35:51 2014
mdadm: /dev/loop1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Fri Sep  5 11:35:51 2014
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md42 started.
# mdadm --wait /dev/md42
# mdadm --stop /dev/md42
mdadm: stopped /dev/md42
# echo 3 > /proc/sys/vm/drop_caches
# dd if=/dev/loop0 bs=1M skip=8 | md5sum
98f23e09198f7943e27030e8e0f9bc30  -
# dd if=/dev/loop1 bs=1M skip=8 | md5sum
90ef43c60e540b930c6db8dae831f8ab  -
# dd if=/dev/loop2 bs=1M skip=8 | md5sum
d010c8ae141fadc3347e8ed319b76db9  -

No entanto, se um disco estiver faltando no conjunto ou um disco excedente no conjunto; ou se você alterar outras coisas, como deslocamentos de partição em um dos discos; ou você usa um nível de RAID diferente, ele não funciona mais assim e você perde o que está escrito pela sincronização. E se você pode recuperar a partir daí, depende se os dados nos outros discos ainda têm redundância para cobrir o que foi substituído. Não há solução simples para recuperar-se de tal situação.

    
por 05.09.2014 / 11:55