Adicionando novos dispositivos a um mdadm raid10 - novo dispositivo tem menos setores

5

Estou tentando adicionar duas novas unidades para desenvolver um raid10 criado com o mdadm v3.4 no teste debian com o kernel 4.4.6-1. O problema é que as novas unidades eu tenho apenas alguns setores a menos que a menor unidade que foi usada para criar a matriz. Existe uma maneira de diminuir as partições sem destruir o array?

root@debian-nas:~# mdadm /dev/md0 --add /dev/sdb1 /dev/sdd1
mdadm: /dev/sdb1 not large enough to join array

Aqui está a aparência da matriz agora.

root@debian-nas:~# mdadm --detail --verbose /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sat Mar 26 21:13:23 2016
     Raid Level : raid10
     Array Size : 5860268032 (5588.79 GiB 6000.91 GB)
  Used Dev Size : 2930134016 (2794.39 GiB 3000.46 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

  Intent Bitmap : Internal

    Update Time : Sun Mar 27 16:25:22 2016
          State : active
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : debian-nas:0  (local to host debian-nas)
           UUID : 86266375:bf94ae93:d449a171:aa746159
         Events : 13726

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync set-A   /dev/sda1
       1       8       33        1      active sync set-B   /dev/sdc1
       2       8       65        2      active sync set-A   /dev/sde1
       3       8       81        3      active sync set-B   /dev/sdf1

Estou tentando adicionar / dev / sdb1 e / dev / sdd1 a / dev / md0

root@debian-nas:~# blockdev --report /dev/sda1
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw  2048   512   512       2048   3000591916544   /dev/sda1

root@debian-nas:~# blockdev --report /dev/sdb1
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw  2048   512  4096       2048   3000590934016   /dev/sdb1

root@debian-nas:~# blockdev --report /dev/sdc1
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw  2048   512  4096       2048   3000591450112   /dev/sdc1

root@debian-nas:~# blockdev --report /dev/sdd1
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw  2048   512  4096       2048   3000590934016   /dev/sdd1

root@debian-nas:~# blockdev --report /dev/sde1
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw  2048   512  4096       2048   3000591450112   /dev/sde1

root@debian-nas:~# blockdev --report /dev/sdf1
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw  2048   512   512       2048   3000591916544   /dev/sdf1

Eu estou melhor apenas movendo os dados para fora do array, destruindo-os e, em seguida, criando-os com partições menores para que eu possa incluir as novas unidades?

    
por rickbassham 28.03.2016 / 14:00

2 respostas

2

Então, descobri uma maneira de fazer isso, usando /dev/sdb1 e /dev/sdd1 , sem recompilar a matriz e sem perder dados.

Isso funciona apenas com um kernel moderno (3.5 ou superior) e mdadm versão 3.3 ou superior.

Desmontar o array.

umount /dev/md0

Execute uma verificação do sistema de arquivos. Deve ser feito antes do próximo passo.

e2fsck -f /dev/md0

Redimensione o sistema de arquivos para 5 TB.

resize2fs /dev/md0 5000G

Execute outra verificação no sistema de arquivos. Certifique-se de que não estragamos tudo até agora.

e2fsck -f /dev/md0

Reduza o array para pouco mais de 5 TB. O parâmetro de tamanho aqui é quanto espaço usar em cada disco na matriz. Isso deve ser (size of fs / number of mirrors) + some small extra . No meu caso, eu fiz o sistema de arquivos 5 TB, eu tenho 4 discos em um ataque 10, então eu tenho uma faixa de 2 espelhos. ISTO DEVE DAR UM TOTALMENTE MAIOR QUE O SEU ARQUIVO DE ARQUIVOS OU VOCÊ PERDERÁ DADOS.

mdadm --verbose --grow --size=2685403136 /dev/md0 # 2.5TB + 1MB

Verifique o sistema de arquivos novamente.

e2fsck -f /dev/md0

Neste ponto, podemos adicionar nossas unidades menores ao ataque 10, mas primeiro, fazer verificações para garantir que seus dados sejam bons. Não confie apenas na verificação do sistema de arquivos. Na verdade, verifique se seus dados são bons.

Agora podemos adicionar as novas unidades!

mdadm --add /dev/md0 /dev/sdf1 /dev/sdg1

E desenvolva o array para usá-los.

mdadm --verbose --grow --raid-devices=6 /dev/md0

Neste ponto, fazer um cat /proc/mdstat deve mostrar algo como o seguinte:

Personalities : [raid6] [raid5] [raid4] [raid0] [raid10]
md0 : active raid10 sdd1[5] sdb1[4] sdf1[3] sde1[2] sdc1[1] sda1[0]
      5370806272 blocks super 1.2 512K chunks 2 near-copies [6/6] [UUUUUU]
      [>....................]  reshape =  2.8% (151477952/5370806272) finish=458.7min speed=189604K/sec
      bitmap: 11/31 pages [44KB], 131072KB chunk

unused devices: <none>

Faça outra verificação do sistema de arquivos após a conclusão da remodelação. (Estou paranóico, vou verificar isso a cada passo do caminho.)

e2fsck -f /dev/md0

Agora, aumente o tamanho da matriz de volta ao máximo que suas unidades suportarão.

mdadm --verbose --grow --size=max /dev/md0

Em seguida, redimensione o sistema de arquivos.

resize2fs /dev/md0

E verifique novamente.

e2fsck -f /dev/md0

Finalmente, podemos montar o novo sistema de arquivos expandido.

mount /dev/md0 /mnt/raid10
    
por 29.03.2016 / 01:44
4

Se você não precisa de uma tabela de partição em /dev/sd[bd] (basicamente, se você não precisa inicializar a partir de qualquer uma das unidades), você pode adicionar todas as unidades à matriz; que deve fornecer setores suficientes:

mdadm /dev/md0 --add /dev/sdb /dev/sdd

Como alternativa, você pode criar uma matriz nova e degradada nas novas partições, migrar seus dados para ela e mover progressivamente as unidades da matriz antiga para a nova.

    
por 28.03.2016 / 14:42

Tags