mdadm: Crescendo uma estranheza de matriz RAID0

5

Eu criei 3 arrays RAID0 usando o mdadm em 3 Rackspace CloudServers usando CloudBlockStorage da Rackspace como seus dispositivos. Cada matriz possui seu próprio conjunto de volumes CBS. O RS-CBS tem um limite superior de 1 TB para suas unidades e eu precisava de armazenamento maior. Um dos servidores é para armazenamento de dados, o segundo é um espelho ao vivo desse servidor e o terceiro é um instantâneo noturno. Eu criei o array em cada um dos servidores usando este comando:

mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/xvdb1 /dev/xvdd1 /dev/xvde1

Quando chegou a hora de aumentar o array, e como essa foi a primeira vez que desenvolvi um, comecei no servidor menos crítico: o servidor de instantâneos. Eu adicionei um novo volume e, com um pouco de brincadeira, surgiu com este comando:

mdadm --grow /dev/md0 --raid-devices=4 --add /dev/xvdf1

De acordo com a página do manual do mdadm, ele diz que você não é capaz de desenvolver um RAID0, então o mdadm o converte em RAID4, cresce e converte de volta. (Nunca converte de volta, mas isso é outro problema). O array é reformulado, mas o tamanho nunca muda. Minha suposição é que a nova unidade acabou se tornando a unidade de paridade para a matriz. Então, para obter o espaço de que preciso, adicionei outro volume:

mdadm --grow /dev/md0 --raid-devices=5 --add /dev/xvdg1

Isso remodela e me dá os 500 GB extras que eu esperava, então eu faço o resize2fs /dev/md0 e estou pronto para ir; 2 TB de espaço.

Então é aí que a estranheza acontece. Eu mudo para crescer a matriz no servidor espelho. Sabendo das etapas anteriores que precisarei adicionar dois volumes para obter o espaço extra de que preciso, uso este comando:

mdadm --grow /dev/md0 --raid-devices=5 --add /dev/xvdf1 /dev/xvdg1

Ele é reformulado e tudo parece bem, mas quando eu faço o resize2fs /dev/md0 seguido por um df -hal eu vejo que ele cresceu e está reportando 2.5 TB de espaço, não o 2.0 TB que eu esperava. É como se ele não criasse a unidade de paridade que eu assumi que fizesse desde a primeira execução e usei todo o espaço disponível para a matriz.

Uma coisa que parecia diferente foi a saída de mdadm -D /dev/md0 após a reformulação no servidor espelho. Eu vi isso para os dispositivos RAID:

    Number   Major   Minor   RaidDevice State
   0     202       17        0      active sync   /dev/xvdb1
   1     202       49        1      active sync   /dev/xvdd1
   2     202       65        2      active sync   /dev/xvde1
   5     202       97        3      active sync   /dev/xvdg1
   4     202       81        4      active sync   /dev/xvdf1
   5       0        0        5      removed

A saída de cat /proc/mdstat mostra que ele foi convertido em RAID4:

    Personalities : [raid0] [raid6] [raid5] [raid4]
md0 : active raid4 xvdg1[5] xvdf1[4] xvdd1[1] xvdb1[0] xvde1[2]
      2621432320 blocks super 1.2 level 4, 512k chunk, algorithm 5 [6/5] [UUUUU_]

unused devices: <none>

Então, minhas preocupações são ... eu cresci o primeiro array (servidor de snapshots) incorretamente e ele deveria ter obtido 2,5 TB, mas meu erro só deu 2,0 TB? Ou eu cresci o segundo array (mirror server) incorretamente e não tenho a unidade de paridade que eu pensei que iria conseguir? O que posso fazer ou o que devo fazer para aumentar consistentemente essas matrizes?

    
por Ken S. 09.04.2013 / 16:48

1 resposta

2

Também acertei o problema dele e, depois de alguns testes, posso aumentar um array RAID 0 de software.

Eu encontrei uma opção que, se você pensar nisso, faz sentido incluir no comando grow, a opção é --backup-file . Se você pensar sobre isso para crescer realisticamente uma matriz RAID 0, como faria se fizesse isso em hardware, você precisaria copiar os dados em outro lugar para destruir e recriar a matriz, se não, eu gostaria de ver a matemática crescer um array RAID 0 sem o espaço extra (realmente).

Outra coisa que encontrei é que não consegui adicionar apenas uma unidade à matriz RAID 0; ela só funciona se eu adicionar duas unidades, mas ainda não tentei mais do que isso.

Então o comando para crescer um array RAID 0 seria (para o seu caso):

mdadm --grow /dev/md0 --raid-devices=5 \
  --backup-file=/drive/With/Enough/Space/growth.bak --add /dev/xvdf1 /dev/xvdg1
    
por 13.01.2015 / 19:01