Depois de uma falha em um RAID1, fiz algumas investigações e testes.
Fazendo o seguinte:
# dd if=/dev/zero of=1 bs=1M count=256
# dd if=/dev/zero of=2 bs=1M count=256
# losetup /dev/loop1 1
# losetup /dev/loop2 2
# mdadm --create /dev/md0 -l 1 -n 2 /dev/loop1 /dev/loop2
# mdadm --stop /dev/md0
# dd if=/dev/urandom of=/dev/loop2
O que deve acontecer quando o array é montado novamente? Eu esperaria 1) algum aviso en /proc/mdstat
, ou 2) as informações em bom disco foram sincronizadas com o disco randomizado, ou 3) o disco "ruim" randomizado foi sincronizado com o bom.
Somente o seguinte é mostrado no buffer de anel do kernel:
md/raid1:md0: not clean -- starting background reconstruction
md/raid1:md0: active with 2 out of 2 mirrors
md0: detected capacity change from 0 to 268107776
md: resync of RAID array md0
md: md0: resync done.
O que é isso resync? Nem a primeira unidade nem a segunda foram alteradas após essa ressincronização.
Quando a matriz for remontada, /proc/mdstat
mostrará "resync" e segundos depois que tudo estiver OK com /proc/mdstat
:
md0 : active raid1 loop2[1] loop1[0]
261824 blocks super 1.2 [2/2] [UU]
Também forçar a gravação de ressincronização em /sys/devices/virtual/block/md0/md
faz qualquer alteração.
Esse é o comportamento esperado?
Eu fiz os testes depois que um RAID1 passou por um disco fisicamente defeituoso, e o disco bom não tinha nenhuma informação, mas apenas 0x00
e 0x55
bytes.
Tags mdadm software-raid raid1 md