Tenho um host debian configurado como NAS usando 6 discos em uma configuração RAID 5. A configuração atual é a seguinte:
# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Fri Mar 12 11:42:23 2021
Raid Level : raid5
Array Size : 19534424640 (18.19 TiB 20.00 TB)
Used Dev Size : 3906884928 (3.64 TiB 4.00 TB)
Raid Devices : 6
Total Devices : 6
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Sat Jan 18 17:44:06 2025
State : clean
Active Devices : 6
Working Devices : 6
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 64K
Consistency Policy : bitmap
Name : data:0
UUID : 2265a382:cb20817f:de0f543b:a830605c
Events : 547472
Number Major Minor RaidDevice State
9 8 33 0 active sync /dev/sdc1
8 8 17 1 active sync /dev/sdb1
10 8 81 2 active sync /dev/sdf1
11 8 97 3 active sync /dev/sdg1
6 8 65 4 active sync /dev/sde1
7 8 49 5 active sync /dev/sdd1
sdb
e sdd
são discos de 8 TB, todos os outros membros RAID são de 4 TB. Agora, quero substituir os quatro discos de 4 TB por novos discos de 16 TB, converter a configuração RAID5 atual para RAID6 e aumentar o tamanho do dispositivo usado para 8 TB (o novo máximo, até que eu possa substituir os dois discos de 8 TB restantes por outros de 16 TB).
Agora estou procurando um procedimento para fazer isso com segurança, sem perda de dados e o mais livre de problemas possível. Durante o procedimento, o tempo de inatividade é aceitável, a perda de dados não. Como todos os slots SATA estão em uso no momento, não posso adicionar os novos discos enquanto os antigos ainda estiverem online. Terei que substituir um após o outro. Como tal, acho que seria sensato converter o RAID5 existente para RAID6 primeiro e, em seguida, trocar os discos um por um. Isso adicionaria outra camada de redundância durante o processo de reconstrução.
Depois de pesquisar online, o seguinte é o procedimento que eu criei. Alguém pode confirmar se essa é a maneira mais sensata de fazer isso, ou há etapas que estou esquecendo / há maneiras mais fáceis de fazer isso, dadas minhas restrições (atualização no local).
Meu plano atual:
- faça backup de todos os dados de /mnt/md0
- verificar integridade do backup
- desmontar /mnt/md0
- reduza o sistema de arquivos em /dev/md0 para o tamanho mínimo possível, veja https://access.redhat.com/articles/1196333 para o procedimento
e2fsck -f /dev/md0
verificar sistema de arquivos, -f força a verificação mesmo se estiver limporesize2fs -P /dev/md0
estimar tamanho mínimoresize2fs -p -M /dev/md0
reduzir ao tamanho mínimo (-M) e imprimir o progresso (-p)e2fsck -f /dev/md0
verifique o sistema de arquivos novamente para ter certeza de que está limpo
- verifique o novo tamanho atual do sistema de arquivos:
dumpe2fs -h /dev/md0 |& awk -F: '/Block count/{count=$2} /Block size/{size=$2} END{print count*size}'
- falha em um dos discos de 8 TB no array RAID5:
falhamos em um disco de 8 TB porque isso garante que o mdadm não decidirá que a unidade é muito pequena (por algum motivo) quando a adicionarmos novamente mais tardemdadm /dev/md0 --fail /dev/sdd
- Estime o novo tamanho do array RAID5, tentando executar este comando e verificando a mensagem de erro:
mdadm --grow /dev/md0 --raid-devices=5
- Verifique se o sistema de arquivos é pequeno o suficiente para caber. Então, encolha o dispositivo de bloco:
mdadm --grow /dev/md0 --array-size [new_size]
- reduzir a matriz RAID5 de 6 para 5 discos
mdadm --grow /dev/md0 --raid-devices=5 --backup-file=/root/md0_raid5_shrink.bak
- aguarde o RAID5 terminar a reconstrução
- adicione o disco removido como um hotspare
mdadm --add /dev/md0 /dev/sdd
- aumentar a matriz RAID5 para RAID6 com 6 discos
mdadm --grow /dev/md0 --raid-devices 6 --level 6 --backup-file=/root/md0_raid5_to_raid6.bak
- aguarde o RAID6 terminar a reconstrução
- substitua cada disco de 4 TB um por um por discos de 16 TB, esperando que o RAID6 termine de reconstruir a cada vez, isso deve nos permitir manter a redundância durante a migração
mdadm --fail /dev/md0 /dev/sdX
mdadm --remove /dev/md0 /dev/sdX
- desligar e substituir disco
mdadm --add /dev/md0 /dev/sdX
- aguarde o RAID6 terminar a reconstrução
- aumentar o array RAID6 até o tamanho máximo (limitado pelos dois discos de 8 TB)
mdadm --grow /dev/md0 --size=max
- aumentar o sistema de arquivos em /dev/md0 para o tamanho máximo
resize2fs /dev/md0
- remontar /mnt/md0
Minhas perguntas são as seguintes:
- Esta é a maneira recomendada de atualizar um array RAID5 para RAID6?
- Já que quero evitar fazer uma pergunta sim/não: Se meu procedimento faz sentido, há maneiras de melhorá-lo para evitar o risco de perda de dados/ter que restaurar do backup? Há uma maneira mais rápida de fazer isso?
- Tenho um arquivo de configuração gerado automaticamente no
/etc/mdadm/mdadm.conf
. Terei que alterá-lo de alguma forma? Isso acontecerá automaticamente ou não tem relação com todo o processo?
Mais algum contexto / outras informações:
- O sistema de arquivos em /dev/md0 é ext4.
- A raiz do sistema / está em /dev/sda, que não é impactada pela migração
- A maioria dos guias fala sobre adicionar um novo spare primeiro e depois migrar de RAID5 para RAID6. Isso não é (facilmente) possível neste caso porque todos os slots SATA já estão em uso.
A resposta "de acordo com o livro": Faça e verifique um backup, destrua seu raid atual, crie o novo raid exatamente como necessário, restaure, encerre o dia. Provavelmente essa também é a abordagem mais rápida, ao considerar os tempos de ressincronização.
A resposta para sua pergunta: Não, você não precisa adaptar manualmente
mdadm.conf
ao usar o mdadm.Não questiono o fato, mas a conclusão. Como o mdadm é flexível e pode gerenciar arrays que incluem discos conectados por meio de diferentes interfaces. Isso permite que você use armazenamento externo temporário (como unidades USB) para auxiliar no processo de substituição de disco, mesmo quando todos os slots SATA internos estão em uso no momento. Então você tem opções.
Sobre seu plano atual: No geral, Nahhhh. Como dito no começo, eu não faria dessa forma em geral. Mas minha preocupação desapareceu por um minuto e assumindo a abordagem como descrita por você, então...
Ponto 1 e 2 (primeiro backup e depois verificação): Muito bom, sempre o início correto. Aprovado.
Ponto 2,3,4: (desmonte e reduza o sistema de arquivos): Acho que essas etapas não são necessárias, pois
mdadm
operam independentemente do fs. O processo de reconstrução do RAID lida com blocos de dados e paridade, independentemente de como o fs é organizado em cima desses blocos. Se você tiver um backup adequado e seu array RAID estiver em um estado estável, você pode prosseguir com a substituição dos discos um por um sem reduzir ou tocar no fs. Então você pode pular essas etapas.Ponto 5: Nunca falha, sem remover. Por quê? Como isso é importante para garantir que o mdadm entenda que um disco não faz mais parte do array, e não deve mais esperar usá-lo para armazenamento de dados ou redundância. Corrigido:
--grow
opção pode ser usada para aumentar o número de dispositivos, mas não para diminuir. Até onde eu sei, isso não é suportado pelo mdadm. (Por favor, corrija-me alguém se eu estiver errado neste ponto)Caso você realmente queira fazer uma substituição no local, então :
Antes de começar, pesquise no Google os diferentes tempos de reconstrução do Raid5 e do Raid6, depois faça um cálculo rápido para decidir se você realmente quer investir tanto tempo. (Você foi avisado)
Caso você ainda queira fazer dessa forma e aceite os tempos de reconstrução:
Em seguida, repita o seguinte procedimento para o disco
sd[c|e|f|g]
, basicamente para substituir cada disco de 4 TB, um por um, por discos de 16 TB:(Substitua
sdX1
porsdc1
na primeira execução, porsde1
na segunda execução e assim por diante...)sdX
pela nova variante de 16 TB e ligue novamente.Aguarde até que a reconstrução esteja completa, antes de prosseguir para o próximo disco. Continue com as próximas etapas quando todos os discos de 4 TB tiverem sido substituídos por discos de 16 TB e o array for reconstruído.
Para ser bem claro e preciso sobre esse ponto de conversão de raid, a fim de definir as expectativas corretas: Essa conversão de Raid5 para Raid6 funcionará tecnicamente muito bem, e você acabará em um estado Raid6 limpo também. Mas ainda assim, o Raid6 permanecerá em estado degradado, até que você adicione um spare. Eu entendi que você não pode adicionar um disco como spare, pois todos os assentos já estão cheios em seu sistema. Então isso talvez (muito provavelmente) não seja o que você deseja alcançar.
DICA DICA DICA : Teste as ideias em um espaço seguro antes de prosseguir com dados reais. O mdadm é flexível e suporta qualquer tipo de dispositivo de bloco, incluindo os virtuais criados a partir de arquivos.
Essa flexibilidade permite que você teste qualquer procedimento em um ambiente controlado antes de implementar em dados reais. Aqui está como replicar sua configuração atual para seus testes:
E aqui está como se livrar dele: