MD RAID 1 com bitmap externo não sincroniza totalmente

MD RAID 1 com bitmap externo não sincroniza totalmente

Tenho uma configuração interessante: sistema dual boot com RAID 1 que precisa estar visível tanto no Windows quanto no Linux. A instalação do Windows é o Win 7 Enterprise e a instalação do Linux é o Kubuntu 10.04. Para fazer o RAID funcionar, eu o configurei usando o RAID 1 de "Discos Dinâmicos" do Windows e o criei no Linux usando MD sem superbloco persistente e um bitmap de intenção de gravação em outra partição. (Sem esse bitmap, o MD não tinha como saber que o array estava sincronizado e faria uma ressincronização completa toda vez que o array fosse iniciado.) O array é montado da seguinte forma:

mdadm --build /dev/md1 -l 1 -n 2 -b /var/local/md1.bitmap /dev/sdb2 /dev/sdc2

Eu esperava que na primeira vez que executei esse comando, ele ressincronizasse o array, escrevesse um bitmap sem pedaços sujos e tudo ficaria bem. Não foi esse o caso: após completar a ressincronização, o bitmap foimajoritariamentelimpos, mas restaram cerca de 5% de blocos sujos, conforme revelado por

mdadm -X /var/local/md1.bitmap

Não montei o sistema de arquivos em /dev/md1 nem toquei nele de nenhuma outra forma.

Descobri então que parar e reiniciar o array:

mdadm --stop /dev/md1
mdadm --build /dev/md1 -l 1 -n 2 -b /var/local/md1.bitmap /dev/sdb2 /dev/sdc2

de fato leu o bitmap, com uma ressincronização subsequente que ocorreu rapidamente porque a maioria dos blocos estava marcada como limpa. A parte confusa é que essa ressincronização reduziu ainda mais o número de blocos sujos, mas ainda não removeu todos eles. Parando e reiniciando repetidamente, consegui reduzir lentamente a contagem de blocos sujos para cerca de 0,6%, onde parecia se estabilizar.

Alguma ideia sobre o que poderia estar causando isso? Para mim, parece uma condição de corrida em algum lugar que faz com que os blocos sejam ignorados durante a sincronização ou não sejam devidamente limpos do bitmap, mas realmente não tenho nenhuma evidência para provar isso. Não parece haver problemas de hardware, pois ambas as unidades são novas e não apresentam erros de leitura e setores realocados relatados por smartctl -a.

Responder1

Espero não ofendê-lo com esse palpite rápido, mas você monitorou o /proc/mdstatarquivo para garantir que --builda operação foi concluída antes de verificar mdadm -X?

# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 nbd0[3] sda10[0]
      53246315 blocks super 1.2 [3/1] [U__]
      [>....................]  recovery =  1.0% (537088/53246315) finish=203.0min speed=4326K/sec
      bitmap: 1/1 pages [4KB], 65536KB chunk

A segunda coisa a verificar é se /var/local é ext2/ext3, citando man:

Nota: bitmaps externos só funcionam em ext2 e ext3. Armazenar arquivos bitmap em outros sistemas de arquivos pode resultar em problemas sérios.

informação relacionada