Como descubro qual disco em um mdadm multi-disco RAID1 disparou uma reconstrução?

2

Estou usando o mdadm para vários espelhos RAID1. md7 é um espelho N-way que consiste em 3 discos giratórios (todos gravados na maioria das vezes) e um SSD:

md7 : active raid1 sdd1[0] sde5[3](W) sdf5[4](W) sdc1[1](W)
      234428416 blocks [4/4] [UUUU]

md6 : active raid1 sdf6[0] sde6[1]
      1220988096 blocks [2/2] [UU]

md2 : active raid1 sdb6[0] sda6[1]
      282229824 blocks [2/2] [UU]

md1 : active raid1 sdb2[0] sda2[1]
      19534976 blocks [2/2] [UU]

md0 : active raid1 sdb1[0] sda1[1]
      192640 blocks [2/2] [UU]

O sistema inteiro foi suspenso 3 vezes nas últimas 2 semanas, exigindo uma reinicialização total. Por enquanto, vou assumir que o travamento do sistema não está relacionado ao meu problema de md, embora eu não possa desconsiderar completamente essa possibilidade. Cada vez que reinicializamos, o md7 exigiu uma reconstrução, mas não consigo descobrir como, a partir dos logs, qual disco acionou a reconstrução. Eu pensei que o iostat poderia me ajudar enquanto o RAID ainda estava sendo reconstruído:

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              43.39      1038.34       558.83     223108     120075
sdb              66.88      1445.47       648.86     310588     139420
sdc              36.42        12.99     22256.81       2792    4782320
sdd             190.75     23227.78       331.14    4990954      71152
md0               2.11        21.39         0.23       4596         50
md1             173.72      1855.87       522.14     398770     112192
md2              11.68        65.84        27.59      14146       5928
md6              27.42       149.83        69.51      32194      14936
sde              75.83        70.81     22326.91      15214    4797384
sdf              79.31        99.41     22326.91      21360    4797384
sr0               0.04         2.61         0.00        560          0
md7             202.31      1287.41       331.07     276626      71136

... mas parece-me que o md7 está usando o sdd para reconstruir todos os outros discos nesse RAID. Eu pensei que talvez isso fosse simplesmente porque o sdd é um SSD e todos os outros discos são marcados como write-mostly, mas nesse caso, ele deve reconstruir apenas o disco que estava fora de sincronia (a menos que todos os discos giratórios estejam fora de sincronia) de sincronização, o que parece improvável para mim).

Outra teoria que eu tenho é que todos os discos giratórios estão sempre fora de sincronia na reinicialização simplesmente porque as gravações do SSD são tão rápidas que ele tem tempo de terminar de escrever um bloco enquanto as outras ainda estão escrevendo, então o sistema simplesmente acontece travar antes que os outros discos terminem de escrever aquele bloco?

Então, como eu sei qual (is) disco (s) disparou (m) o resync? É o fato de eu ter um espelho n-way com SSD misturado e discos giratórios possivelmente responsáveis pelo fato de que todos os discos giratórios são sempre reconstruídos após um desses congelamentos, ou o driver md garante que um bloco não seja considerado escrito? em um disco até que seja gravado com sucesso em todos os discos?

    
por rob 15.11.2012 / 18:38

2 respostas

1

Como Michael aponta acima, os bloqueios e a consequente parada não limpa é a razão pela qual você está vendo sua reconstrução de RAID. O driver md do kernel reconstrói as matrizes sujas para garantir que elas estejam realmente sincronizadas, já que um travamento ou falha ou perda de energia não garantirão quais gravações realmente foram liberadas para o disco.

Agora, a respeito de porque sdd está sendo usado, a primeira coisa a ser entendida é que, em um desligamento não limpo, a matriz real, em oposição a um dispositivo membro individual, está marcada como suja. Na manpage eu vinculei acima, o seguinte é dito sobre o RAID-1:

If the md driver finds an array to be dirty at startup, it proceeds to correct any possibly inconsistency. For RAID1, this involves copying the contents of the first drive onto all other drives.

No seu exemplo, a matriz md7 tem partições nas unidades sdc , sdd , sde & sdf , mas se você observar sua mdstat output:

md7 : active raid1 sdd1[0] sde53 sdf54 sdc11

observe como a primeira partição, marcada com [0] , está em sdd , ou seja, sdd1 . Essa é a razão pela qual sdd está sendo usado - é a primeira unidade em md7 .

    
por 25.11.2014 / 18:47
1

Eu entendo que o raid (pelo menos o linux) funciona como um sistema de arquivos para essas finalidades - se o sistema travar enquanto estiver em uso, ele precisará ser verificado na reinicialização. Assim, a causa das falhas do seu sistema pode não ser qualquer disco na matriz.

    
por 15.11.2012 / 18:54