upgrade (software) capacidade RAID 1

0

Estou atualizando um array RAID 1 de software ( /dev/md0 ) de unidades de 2TB ( sda e sdb ) para 4TB ( sdc e sdd ). Direto; ext3 , partição única, sem MBR, sem LVM. No final, gostaria de ter dois dispositivos /dev/mdX , um com o array original, o outro com o novo array, ambos com os mesmos dados. Pelo que eu recolhi, existem duas opções:

OPÇÃO 1:

  1. backup da matriz existente
  2. desmontar matriz existente
  3. insira um disco de 4 TB e adicione-o ao array
    mdadm --manage /dev/md0 --add /dev/sdc1
  4. falha em um dos discos de 2 TB e aguarda a reconstrução da matriz
    mdadm --manage /dev/md0 --fail /dev/sda1
    mdadm --manage /dev/md0 --remove /dev/sda1
  5. insira o disco restante de 4 TB e adicione-o ao array
    mdadm --manage /dev/md0 --add /dev/sdd1
  6. falha no disco restante de 2 TB, aguarde a reconstrução do array
    mdadm --manage /dev/md0 --fail /dev/sdb1
    mdadm --manage /dev/md0 --remove /dev/sdb1
  7. o que eu faço aqui para reativar a matriz de 2TB sob um novo /dev/mdX number? Posso simplesmente digitar:
    mdadm create /dev/md1 --assume-clean /dev/sda1 /dev/sdb1

PROS: espelhamento garantido de dados, mdX device pode ser desmontado para evitar inconsistências
CONS: tem que sincronizar duas vezes (lento)

OPÇÃO 2:

  1. Crie uma nova matriz com os discos de 4 TB:
    mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
  2. Crie o sistema de arquivos em /dev/md1 (o mesmo usado em /dev/md0 )
  3. Montar /dev/md1
  4. Copie os arquivos usando um destes:
    tar -C /mnt/md0 --atime-preserve -clSf - . | tar -C /mnt/md1 -xvf -
    --or--
    rsync -avHhx --progress /mnt/md0 /mnt/md1

PROS: só tem que sincronizar uma vez
CONS: nenhuma garantia de que o backup é exato (além dos sinalizadores usados para tar ou rsync)

Qual seria o método preferido e por quê? Existe uma maneira melhor [1]?

[1] Li sobre o uso de dd , mas o redimensionamento de mdX após a cópia parece ser um problema, e ainda preciso criar um novo /dev/mdX para um dos arrays.

UPDATE No final, fui com a Opção 2, pois é certamente a mais segura e "mais limpa". Eu também incorporei os comentários / sugestões abaixo, com algumas ressalvas importantes:

  1. fdisk (atualmente) não funciona de forma confiável para partições com mais de 2 TB, parted usando uma tabela de partição gpt é recomendado
  2. O hash
  3. para verificar as transferências do rsync é uma excelente ideia. Infelizmente dd é inadequado porque lê o volume inteiro , zeros incluídos. Então, por definição, hashes de drives de 2TB e 4TB serão diferentes. Além disso, dd teria que ler todos os 2 TB de dados para fornecer um hash e não conseguir lidar com diretórios, o que exclui a verificação de pastas críticas individuais. Existem programas ( md5sumd ou md5deep ) que têm diretórios hash de forma recursiva, mas esse tipo de profundidade não garante o tempo necessário para ler e coletar 2 TB de dados. Em vez disso, criei um script grosseiro para diff da saída de ls -lAR para os dois volumes (por sorte, os tamanhos dos blocos eram os mesmos entre eles), e apenas agrupei quaisquer arquivos com tamanhos diferentes. No final, a verificação de 2 TB levou apenas alguns minutos.
por lyineyes 12.02.2015 / 08:28

1 resposta

0

Opção 1 realmente não é muito uma opção, depois de incluir os novos discos em md0, você ainda terá que expandir o sistema de arquivos ext3, o mesmo que a opção 2 se você usar o dd . Exceto que leva mais tempo e muitas chances de dar errado.

Se você tiver que percorrer esse caminho, faça o seguinte:

Crie uma partição raid (0xDA ou 0xFD) com fdisk

fdisk /dev/sdc
fdisk /dev/sdd

Adicione o novo disco ao array

mdadm --fail /dev/md0 /dev/sda1
mdadm --remove /dev/md0 /dev/sda1
mdadm --add /dev/md0 /dev/sdc1

Aguarde que a ressincronização termine e adicione outra

mdadm --fail /dev/md0 /dev/sdb1
mdadm --remove /dev/md0 /dev/sdb1
mdadm --add /dev/md0 /dev/sdd1

Aguarde que a ressincronização termine e aumente md0. Lembre-se de que você está vulnerável a falhas de disco durante a ressincronização, o que acontece com mais frequência do que a maioria das pessoas pensa, porque os discos estão sob estresse máximo.

mdadm --grow /dev/md0 --size=max --backup-file=/root/mnt/grow_md0.bak
mdadm --detail --scan >> /etc/mdadm.conf

Você não precisa da opção de arquivo de backup, mas protege contra falhas inesperadas, como corte de energia durante a operação. Ele precisa estar em um disco físico diferente (reformatar + remontar um dos discos antigos ou em uma unidade flash) ou ele acaba com o objetivo.

Dê ao md0 uma boa checagem primeiro, então você pode aumentar o ext3 fs

umount /mount/point-md0
fsck /dev/md0
resize2fs /dev/md0
mount -t ext3 /dev/md0 /mount/point-md0

A única vantagem potencial dessa abordagem é que, se você estiver disposto a assumir alguns riscos, poderá fazer isso sem que o md0 fique off-line. O resize2fs pode realmente aumentar o seu fs online (mas não encolher), e nesse caso você simplesmente faz sem a sequência umount-fsck-mount.

Para reativar o antigo array, você tem que usar --assemble, --create provavelmente irá corromper / destruir os dados existentes.

mdadm --assemble --force /dev/md1 /dev/sda1 /dev/sdb1

A opção 2 é definitivamente a solução "mais limpa". Muito menos chances de dar errado, porque você sempre tem pelo menos um array totalmente redundante.

Crie uma partição raid (0xDA ou 0xFD) com fdisk

fdisk /dev/sdc
fdisk /dev/sdd

faça md1

mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1

Crie um sistema de arquivos e monte-o

mkfs.ext3 -L some-label /dev/md1
mount -t ext3 /dev/md1 /mount/point-md1

Torne o md0 read-only, e o rsync deve garantir a integridade do arquivo, com a vantagem adicional de limpar toda a fragmentação no caminho.

mount -o remount,r /dev/md0 /mount/point-md0
rsync -axHAXS --delete --progress /mount/point-md0 /mount/point-md1

Atualize o mdadm.conf

mdadm --detail --scan > /etc/mdadm.conf

E não se esqueça de atualizar o fstab!

Tangente para este assunto:

  • O rsync só copiará os arquivos, onde o resync do mdadm copiará os espaços indefinidos 'vazios' também.

  • Existem algumas razões para usar o RAID1, a menos que você esteja inicializando (nesse caso, você precisa atualizar o gerenciador de inicialização também), o RAID10 lhe dará a mesma proteção, mas melhor desempenho se você tiver mais do que dois discos na matriz.

  • O LVM ajuda você com a migração e o backup. Por exemplo, na Opção 2, em vez de montá-lo somente leitura antes de copiar os arquivos, que é semi-off-line por um tempo muito longo, você pode fazer um instantâneo LVM, dois passos rsync e concluir a migração apenas com alguns segundos de inatividade.

  • Se eu puder manter todos os quatro discos físicos na caixa, eu faria três partições RAID em cada um. Um pequeno RAID1 para / boot, tamanho decente LVM + RAID10 para peças de alto desempenho, como banco de dados, e LVM + RAID5 / 6 para armazenamento.

por 12.02.2015 / 19:56