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.