Como remover uma unidade de uma matriz RAID 5 de 2 unidades não padrão?

2

Existem algumas informações disponíveis sobre alterações de forma em matrizes RAID , mas estou um pouco nervoso e gostaria de confirmação:

Problema: tenho 2 unidades de 500 GB como o software RAID 5 (mdadm). Eu gostaria de liberar uma das duas unidades, pois a redundância RAID é para os fracos ... Posso apenas

mdadm --grow --array-size=1

seguido por um

mdadm --grow --raid-disks 1 ?

Isso parece muito simples. Como eu especificaria qual unidade é liberada? Parte do motivo dessa manobra é que não tenho espaço adicional para executar um backup.

Editar: Como está, esta é uma implementação não-padrão do RAID5 (veja os comentários de Dave M ou gman). No entanto, por favor, não me castigue pela imprudência. Estou simplesmente interessado no método menos arriscado de fazer essa remoção de unidade. Vamos supor que cuidei do problema de backup, mas não vou usá-lo para recriar a partir do backup.


$ sudo mdadm --detail --test /dev/md1 
/dev/md1:
        Version : 00.90
  Creation Time : Sat Sep  1 18:08:21 2007
     Raid Level : raid5
     Array Size : 488383936 (465.76 GiB 500.11 GB)
  Used Dev Size : 488383936 (465.76 GiB 500.11 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 1
    Persistence : Superblock is persistent

Update Time : Mon Nov 28 11:32:13 2011
      State : clean

Dispositivos ativos: 2 Dispositivos de trabalho: 2  Dispositivos com falha: 0   Dispositivos de reposição: 0

     Layout : left-symmetric
 Chunk Size : 64K

       UUID : XXX (local to host XXX)
     Events : 0.29336

Number   Major   Minor   RaidDevice State
   0       8       33        0      active sync   /dev/sdc1
   1       8       17        1      active sync   /dev/sdb1

    
por DrSAR 28.11.2011 / 18:53

2 respostas

3

Com o mdadm, um RAID 5 de 2 unidades é idêntico ao RAID1, não ao RAID 0, e não há nenhum dispositivo invisível mágico. Você pode dizer porque o array é o mesmo tamanho como cada um dos dois componentes, não sua soma:

Array Size : 488383936 (465.76 GiB 500.11 GB)
Used Dev Size : 488383936 (465.76 GiB 500.11 GB)

Você pode confirmar isso fazendo:

 dd if=/dev/sdb1 bs=512 count=1024 of=/tmp/b1
 dd if=/dev/sdc1 bs=512 count=1024 of=/tmp/c1

 md5sum /tmp/b1
 md5sum /tmp/c1

O md5 é o mesmo para cada um, porque as unidades são redundantes. Como isso é o mesmo que RAID, depois de pará-lo, podemos criar um RAID1 nos mesmos dispositivos e ter os mesmos dados:

mdadm -C /dev/md1  --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1

Ou faça um RAID1 com apenas um dispositivo, liberando o outro:

mdadm -C /dev/md1  --level=1 --raid-devices=1 --force /dev/sdb1

Em seguida, limpe o superbloco no bloco removido:

mdadm /dev/sdc1 --zero-superblock

Como se trata de uma versão super do bloco mdadm 0.90, cada unidade deve ser usada sozinha também. Desde que 1.1 e 1.2 colocam os meta-dados perto do começo no array, não funcionará para essas versões.

    
por 12.12.2011 / 05:46
1

Eu percebi que essa pergunta foi respondida há vários anos, mas recentemente resolvi um problema semelhante, e acho que posso adicionar alguma clareza tanto à pergunta quanto à resposta do Ray M ...

Um RAID5 de duas unidades semelhantes, versão 1.2 do superbloco, é, como Ray M disse, um binário idêntico ao RAID1. No entanto, diferentemente daqueles com a v0.9, matrizes com metadados 1.x podem deixar uma lacuna entre o início do dispositivo e o início dos dados da matriz. Assim, para verificar a equivalência dos dois dispositivos, determine primeiro o deslocamento de dados de cada componente:

mdadm --examine /dev/sdb1
mdadm --examine /dev/sdc1

Você deve ver uma linha como essa para cada dispositivo (por padrão, o mesmo para ambos):

Data Offset : 262144 sectors

É aqui que os dados do dispositivo são iniciados. Começando aqui, copie alguns dados:

dd if=/dev/sdb1 skip=262144 bs=512 count=1024 of=/tmp/b1
dd if=/dev/sdc1 skip=262144 bs=512 count=1024 of=/tmp/c1

As somas md5 devem ser iguais:

$ md5sum /tmp/b1 /tmp/c1
6b327bb46f25587806d11d50f95ff29b  /tmp/b1
6b327bb46f25587806d11d50f95ff29b  /tmp/c1

Como as unidades são, na verdade, espelhadas umas das outras, você pode falhar e remover uma unidade, deixando a matriz degradada:

mdadm /dev/md1 --fail /dev/sdc1 --remove /dev/sdc1
mdadm --zero-superblock /dev/sdc1

Ou comece de novo com um RAID1 de disco único:

mdadm --stop /dev/md1
mdadm --create /dev/md1 --level 1 --raid-devices 1 --force /dev/sdb1
mdadm --zero-superblock /dev/sdc1

Observe que, apesar da equivalência binária de dois discos do RAID5 para o RAID1, você não pode simplesmente:

mdadm --grow --raid-devices 1

com um RAID5 de duas unidades.

    
por 04.05.2015 / 21:20

Tags