Atualmente tenho 8 discos de tamanho 32G cada, formando um RAID 10. Agora, quero aumentar o tamanho desse RAID adicionando discos extras. Este é um dispositivo de produção, portanto já existem dados críticos no RAID. O sistema de arquivos é XFS. Existe alguma maneira de aumentar o tamanho deste RAID sem afetar a leitura/gravação em execução nesse RAID. Se não, como fazer isso com tempo offline mínimo?
Responder1
As respostas existentes estão bastante desatualizadas. Aqui em 2020, agora é possível desenvolver um mdadm
RAID 10 de software, simplesmente adicionando 2 ou mais discos do mesmo tamanho.
Criando o array RAID 10 de exemplo
Para fins de teste, em vez de unidades físicas, criei 6 volumes LVM de 10 GB, /dev/vg0/rtest1
para rtest6
os quais o mdadm não teve queixas.
# Using the thinpool lvthin on VG vg0 - I created 6x 10G volumes
lvcreate -T vg0/lvthin -V 10G -n rtest1
lvcreate -T vg0/lvthin -V 10G -n rtest2
...
Em seguida, criei um array RAID 10 mdadm usando os primeiros 4 rtestX
volumes
mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/vg0/rtest[1-4]
Usando mdadm -D
(igual a --detail
), podemos ver que o array possui 4x "drives", com capacidade de 20GB dos 40GB de volumes, como é esperado com o RAID 10.
root@host ~ # mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Nov 20 09:02:39 2020
Raid Level : raid10
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Fri Nov 20 09:04:24 2020
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : someguy123:0 (local to host someguy123)
UUID : e49ab53b:c66321f0:9a4e272e:09dc25b1
Events : 23
Number Major Minor RaidDevice State
0 253 9 0 active sync set-A /dev/dm-9
1 253 10 1 active sync set-B /dev/dm-10
2 253 11 2 active sync set-A /dev/dm-11
3 253 12 3 active sync set-B /dev/dm-12
Expandindo o RAID10 com 2 novos volumes/discos de tamanhos iguais
Para aumentar a matriz, primeiro você precisa do --add
(s) par(es) de discos para a matriz e, em seguida, usar --grow --raid-devices=X
(onde X é o novo número total de discos no RAID) para solicitar que o mdadm remodele o RAID10 para usar os 2 discos sobressalentes como parte da matriz.
mdadm --add /dev/md0 /dev/vg0/rtest5 /dev/vg0/rtest6
mdadm --grow /dev/md0 --raid-devices=6
Monitore o processo de ressincronização
Aqui está a parte chata - esperar de minutos a horas, dias ou até semanas, dependendo do tamanho do seu RAID, até que o mdadm termine de remodelar as novas unidades.
Se verificarmos mdadm -D
, podemos ver que o RAID está sendo remodelado.
mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Nov 20 09:02:39 2020
Raid Level : raid10
Array Size : 20953088 (19.98 GiB 21.46 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 6
Total Devices : 6
Persistence : Superblock is persistent
Update Time : Fri Nov 20 09:15:05 2020
State : clean, reshaping
Active Devices : 6
Working Devices : 6
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Reshape Status : 0% complete
Delta Devices : 2, (4->6)
Name : someguy123:0 (local to host someguy123)
UUID : e49ab53b:c66321f0:9a4e272e:09dc25b1
Events : 31
Number Major Minor RaidDevice State
0 253 9 0 active sync set-A /dev/dm-9
1 253 10 1 active sync set-B /dev/dm-10
2 253 11 2 active sync set-A /dev/dm-11
3 253 12 3 active sync set-B /dev/dm-12
5 253 14 4 active sync set-A /dev/dm-14
4 253 13 5 active sync set-B /dev/dm-13
Aproveite seu array RAID10 maior!
Eventualmente, depois de mdadm
terminar a remodelagem, podemos ver que o tamanho do array é de aproximadamente 30G em vez de ~20G, o que significa que a remodelação foi bem-sucedida e relativamente fácil de fazer :)
mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Nov 20 09:02:39 2020
Raid Level : raid10
Array Size : 31429632 (29.97 GiB 32.18 GB)
Used Dev Size : 10476544 (9.99 GiB 10.73 GB)
Raid Devices : 6
Total Devices : 6
Persistence : Superblock is persistent
Update Time : Fri Nov 20 09:25:01 2020
State : clean
Active Devices : 6
Working Devices : 6
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : someguy123:0 (local to host someguy123)
UUID : e49ab53b:c66321f0:9a4e272e:09dc25b1
Events : 93
Number Major Minor RaidDevice State
0 253 9 0 active sync set-A /dev/dm-9
1 253 10 1 active sync set-B /dev/dm-10
2 253 11 2 active sync set-A /dev/dm-11
3 253 12 3 active sync set-B /dev/dm-12
5 253 14 4 active sync set-A /dev/dm-14
4 253 13 5 active sync set-B /dev/dm-13
Responder2
Existem 2 casos:
- você adiciona novas unidades A maneira mais fácil e segura é criar um novo array nas novas unidades, criar um volume físico no novo array e aqui está você. Nenhuma perda de desempenho aqui. Como bônus, você pode criar um novo grupo de volumes para colocar seus dados em um array ou outro.
- Você substitui as unidades existentes por outras maiores. Substitua-as uma por uma, cada vez criando 2 partições no disco. Você adiciona o primeiro (por exemplo, sdX1 ao array existente (ele deve se recuperar automaticamente) e pode então criar um novo array em todas as segundas partições (o sdX2). Dependendo do seu uso, pode haver um impacto no desempenho de algumas operações ( basicamente se você copiar dados entre os dois arrays).
Em ambos os casos você não perderá dados e se o seu hardware permitir hotplug você não terá tempo de inatividade.
A propósito, mesmo que o mdadm permitisse um redimensionamento dinâmico do array, eu não arriscaria com os dados de produção.
Responder3
Supondo que isso esteja no Linux mdadm
- você não pode.
mdadm
não suporta o crescimento do RAID10