Reduzir array RAID degradado /dev/md1 — guia passo a passo
Você pode reduzir com segurança um array RAID1 degradado (/dev/md1) quando um disco falhou removendo o disco defeituoso, usando um sistema de resgate para ajustar LVM e sistema de arquivos, reduzindo o RAID com mdadm e recriando volumes lógicos necessários. Este guia explica os comandos, as verificações de segurança, alternativas e um playbook de recuperação e rollback.
Objetivo principal
Reduzir o array RAID1 degradado /dev/md1 (composto por /dev/sda5 e /dev/sdb5, com /dev/sda5 falhado) de ~5 GB para 4 GB, ajustando LVM e sistemas de arquivos sem perda de dados.
Variantes de intenção relacionadas
- reduzir array RAID degradado
- redimensionar mdadm e LVM
- diminuir PV/LV em RAID1
- reparar array RAID e ajustar LVM
- shrink mdadm com LVM
Resumo rápido dos termos
- RAID: conjunto de discos configurados para redundância ou desempenho. Aqui usamos RAID1 (espelhamento). Uma unidade falha e o array fica degradado.
- mdadm: utilitário Linux para gerenciar arrays de software RAID (/dev/md*).
- LVM (Logical Volume Manager): camada lógica para volumes; usa PV (Physical Volume), VG (Volume Group) e LV (Logical Volume).
- PV: volume físico (aqui /dev/md1). VG: grupo de volumes (server1). LV: volumes lógicos (root, swap_1).
Cenário inicial e saídas de diagnóstico
Verificamos o estado atual do RAID e do LVM usando os comandos a seguir. Mantenha essas saídas como referência antes de qualquer mudança.
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[1]
4988032 blocks [2/1] [_U]
md0 : active raid1 sda1[0] sdb1[1]
248896 blocks [2/2] [UU]
unused devices:
server1:~# df -h
server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
4.5G 741M 3.5G 18% /
tmpfs 126M 0 126M 0% /lib/init/rw
udev 10M 68K 10M 1% /dev
tmpfs 126M 0 126M 0% /dev/shm
/dev/md0 236M 18M 206M 8% /boot
server1:~#pvdisplay
server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/md1
VG Name server1
PV Size 4.75 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 1217
Free PE 0
Allocated PE 1217
PV UUID Ntrsmz-m0o1-WAPD-xhsb-YpH7-0okm-qfdBQG
server1:~#vgdisplay
server1:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.75 GB
PE Size 4.00 MB
Total PE 1217
Alloc PE / Size 1217 / 4.75 GB
Free PE / Size 0 / 0
VG UUID X3ZYTy-39yq-20k7-GCGk-vKVU-Xe0i-REdEu0
server1:~#lvdisplay
server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/server1/root
VG Name server1
LV UUID 3ZgGnd-Sq1s-Rchu-92b9-DpAX-mk24-0aOMm2
LV Write Access read/write
LV Status available
# open 1
LV Size 4.50 GB
Current LE 1151
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Logical volume ---
LV Name /dev/server1/swap_1
VG Name server1
LV UUID KM6Yq8-jQaQ-rkP8-6f4t-zrXA-Jk13-yFrWi2
LV Write Access read/write
LV Status available
# open 2
LV Size 264.00 MB
Current LE 66
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
server1:~#Importante: guarde estas saídas em um arquivo seguro. Elas ajudam a verificar o sucesso das operações e servem como ponto de restauração.
Pré-requisitos e segurança
- Tenha um backup válido dos dados críticos antes de mexer em LVM/RAID. Mesmo passos corretos podem falhar se houver corrupção.
- Use um sistema de resgate (live CD/USB) quando alterar UUIDs, PV sizes e arranjos físicos.
- Verifique que a partição a ser removida (/dev/sda5) realmente falhou.
- Tenha acesso físico ou um console remoto com serial/IPMI para recuperação.
Passo a passo consolidado (playbook)
Nota: execute os comandos como root. Leia cada etapa antes de executar.
- Marcar e remover o disco falho do array
- Confirme novamente o array e o disco. Depois marque como failed e remova.
mdadm --manage /dev/md1 --fail /dev/sda5
mdadm --manage /dev/md1 --remove /dev/sda5- Zere o superbloco da partição removida. IMPORTANTE: se esquecer, o disco pode ser re-adicionado automaticamente mais tarde e causar problemas.
mdadm --zero-superblock /dev/sda5- Reinicie no sistema de resgate e carregue módulos necessários
- No ambiente de resgate, carregue módulos para LVM e RAID.
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10- Ative arrays RAID e gere /etc/mdadm/mdadm.conf
- Faça cópia de segurança do arquivo de configuração mdadm e acrescente as entradas detectadas.
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
mdadm -A --scan- Inicie LVM
/ etc/init.d/lvm start- Verifique o sistema de arquivos antes de redimensionar
- Verifique com e2fsck antes de qualquer resize.
e2fsck -f /dev/server1/root- Planejamento de redução de espaço (raciocínio)
- PV (/dev/md1) contém os LVs (/dev/server1/root e /dev/server1/swap_1).
- LV root deve ficar menor que o LV em disco; PV deve ser ao menos soma dos LVs.
- Estratégia: reduzir FS em LV root, reduzir LV root, remover swap se estiver no final, reduzir PV, reduzir array md.
No caso exemplo:
- FS root: reduzir para 2 GB (escolha segura conforme uso real).
- LV root: reduzir para 2.5 GB.
- Deletar swap_1 (264 MB) porque está no final.
- Reduzir PV para 3 GB.
- Reduzir mdadm para 4 GB.
- Reduzir filesystem do LV root
- Sempre reduza o filesystem antes de reduzir o LV. Garanta espaço suficiente!
resize2fs /dev/server1/root 2G- Reduzir LV root
lvreduce -L2.5G /dev/server1/root- Remover swap se for necessário
- Se o swap estiver no final, remova-o para liberar espaço contíguo.
lvremove /dev/server1/swap_1- Reduzir tamanho do PV para caber no novo array
- Ajuste o PV para um valor menor que o tamanho final desejado do array. Aqui usamos 3G para o PV.
pvresize --setphysicalvolumesize 3G /dev/md1- Reduzir o array RAID com mdadm
- mdadm –grow –size usa unidades em KiB. No exemplo, 4 GiB = 4 x 1024 x 1024 = 4194304 KiB. O valor final deve ser múltiplo de 64.
mdadm --grow /dev/md1 --size=4194304- Ajustar PV para ocupar o máximo agora disponível
pvresize /dev/md1- Verificar o VG e recriar swap se necessário
- Após pvresize, verifique vgdisplay; crie swap novamente com a quantidade de PEs desejada.
Exemplo de saída do vgdisplay após operações no sistema de resgate:
root@Knoppix:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 26
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.00 GB
PE Size 4.00 MB
Total PE 1023
Alloc PE / Size 640 / 2.50 GB
Free PE / Size 383 / 1.50 GB
VG UUID X3ZYTy-39yq-20k7-GCGk-vKVU-Xe0i-REdEu0
root@Knoppix:~#- Recrie swap com o mesmo número de PEs que tinha antes (no exemplo, 66 PEs):
lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_1- Expandir LV root novamente com PEs livres
- Exemplo estende por +317 PEs disponíveis:
lvextend -l +317 /dev/server1/root
resize2fs /dev/server1/root
e2fsck -f /dev/server1/root- Reinicializar no sistema normal e re-adicionar o disco substituído
- Zere o superbloco da partição substituta (se trocou o disco) e adicione-a de volta ao array.
mdadm --zero-superblock /dev/sda5
mdadm -a /dev/md1 /dev/sda5- Verifique sincronização:
cat /proc/mdstatVocê deve ver /dev/sdb5 e /dev/sda5 sincronizando.
Checklists por função
Administrador Sênior
- Verificar backups atuais.
- Validar plano de redução e números (tamanhos de LV/PV).
- Aprovar janela de manutenção.
Administrador (execução)
- Executar comandos de validação (pvdisplay, vgdisplay, lvdisplay).
- Marcar e remover disco falho.
- Zerar superbloco e entrar em resgate.
- Seguir passo a passo do playbook.
- Testar boot e monitorar /proc/mdstat.
Engenheiro de Suporte (rollback)
- Ter imagem de disco/partição recente.
- Ter acesso a console para restauração de boot.
- Recriar ambiente de resgate para restaurar PV/LVs se necessário.
Critérios de aceitação (Kriterien de aceitação)
- O sistema boota normalmente no modo convencional.
- /dev/md1 tem exatamente o tamanho desejado (4 GiB conforme exemplo).
- Todos os volumes LVM esperados existem e montam com sucesso.
- /proc/mdstat mostra array sem falhas e, após re-adicionar, sincronizando.
Testes e casos de aceitação mínimos
- Teste 1: e2fsck sem erros em /dev/server1/root após resize2fs.
- Teste 2: lvdisplay mostra LVs com tamanhos esperados.
- Teste 3: reboot e verificação de mounts via df -h.
- Teste 4: mdadm –detail /dev/md1 mostra membros corretos.
Quando este procedimento falha — contramedidas
Problema: resize2fs falha por dados além do tamanho alvo.
Mitigação: aumente o tamanho alvo do resize2fs para acomodar dados; verifique uso real com du -sh antes.Problema: pvresize –setphysicalvolumesize rejeita tamanho por restrição de metadados.
Mitigação: garanta que LVs foram reduzidos e que PV tem espaço livre contíguo. Remova LVs não essenciais temporariamente.Problema: mdadm –grow falha por alinhamento.
Mitigação: verifique se o valor KiB passado é múltiplo de 64 e compatível com blocos do dispositivo.
Alternativas e abordagens diferentes
Abordagem segura (sem redução online): adicionar discos temporários, migrar dados, recriar array com novo layout e migrar LVM. Esta opção evita risco de reduzir PV já usado.
Usar LVM thin provisioning para armazenar temporariamente volumes durante a reorganização.
Se hardware permitir, clonar discos completos para backup offline e reconfigurar RAID do zero.
Fluxo de decisão (Mermaid)
flowchart TD
A[Disco falhou?] -->|Sim| B{Swap está no final do PV?}
A -->|Não| Z[Fazer manutenção padrão RAID]
B -->|Sim| C[Deletar swap_1, reduzir FS e LV]
B -->|Não| D[Reduzir apenas LV final e FS]
C --> E[pvresize menor]
D --> E
E --> F[mdadm --grow --size]
F --> G[Recriar swap, lvextend, resize2fs]
G --> H[Testes e reboot]
H --> I[Re-adicionar disco e sincronizar]Riscos e mitigação (matriz simplificada)
- Perda de dados por comando errado — Mitigação: backup completo e verificação dupla dos comandos antes de executar.
- Incompatibilidade entre versões do mdadm/LVM — Mitigação: usar ambiente de resgate com mesmas versões ou documentar diferenças.
- Disco de substituição com partições pré-existentes — Mitigação: sempre zerar superbloco antes de adicionar.
Notas de compatibilidade e migração
- mdadm e LVM mantêm compatibilidade razoável entre versões modernas. Porém, sempre teste em um ambiente não produtivo quando migrar major versions.
- Ao clonar partições, preserve alinhamento e tabelas de partição para evitar problemas de performance.
Mini-metodologia (resumo do processo)
- Identificar e remover o disco falho.
- Bootar em ambiente de resgate.
- Reduzir filesystem do LV alvo.
- Reduzir LV, remover LVs finais se necessário.
- Reduzir PV para caber no novo array reduzido.
- Reduzir array md com mdadm.
- Ajustar PV, recriar LVs, expandir filesystems.
- Re-adicionar disco substituído e verificar sincronização.
Checklist final antes de reiniciar no sistema normal
- e2fsck OK em todos os LVs relevantes
- vgdisplay mostra espaço livre e LVs esperados
- swap recriado e mkswap executado
- mdadm –grow completou sem erros
- backups validados
Resposta rápida para incidentes (runbook de rollback)
- Se o sistema não bootar, boot em resgate e monte volume raiz manualmente.
- Verifique logs em /var/log/syslog e dmesg.
- Se LVs foram reduzidos demais, tente restaurar a partir de snapshot ou backup de disco.
- Se PV corrompido, recuperar com backup de metadata LVM (vgcfgrestore) se houver cópias.
Glossário 1 linha
- mdadm: ferramenta para criar e gerenciar arrays RAID no Linux.
- LVM: camada de abstração de volumes lógicos para flexibilidade de armazenamento.
Resumo final
Reduzir um array RAID degradado implica planejamento cuidadoso: remover o disco falho, usar um ambiente de resgate, reduzir filesystem e LVs na ordem correta, ajustar PV e reduzir o array com mdadm, e finalmente re-criar quaisquer LVs removidos e re-adicionar discos. Sempre tenha backups e uma janela de manutenção aprovada.
Important: revise todos os tamanhos e uso real de disco antes de executar lvreduce/resize2fs. Erros nesses passos podem causar perda de dados.
Fim do guia.
Materiais semelhantes
Instalar e usar Podman no Debian 11
Apt‑pinning no Debian: guia prático
Injete FSR 4 com OptiScaler em qualquer jogo
DansGuardian e Squid com NTLM no Debian Etch
Corrigir erro de instalação no Android