Substituir disco falho em RAID1 — teste e recuperação
Importante: este guia assume um array RAID1 gerenciado por mdadm em Linux. Teste em um ambiente controlado antes de aplicar em produção. “sda” e “sdb” são exemplos; ajuste conforme sua topologia.
Objetivo e variantes da intenção
- Objetivo principal: substituir um disco falho em um array RAID1 e recuperar a redundância.
- Variantes relacionadas: simular falha de disco, recriar tabela de partições, re-sincronizar RAID, reinstalar bootloader, procedimentos de recuperação offline.
1. Contexto rápido
RAID1 mantém cópias idênticas dos dados em dois discos. Se um disco falhar, o sistema continua a operar em modo degradado; quando um disco novo é adicionado, o array é re-sincronizado. mdadm é a ferramenta de gerenciamento deste tipo de array em muitas distribuições Linux.
Definição em 1 linha: RAID1 = espelhamento de discos para redundância (dados idênticos em cada disco).
2. Simular a falha do disco
Você pode simular uma falha removendo fisicamente o disco ou usando mdadm para marcá-lo como com falha e removê-lo logicamente:
mdadm –manage /dev/md0 –fail /dev/sdb1
mdadm –manage /dev/md1 –fail /dev/sdb2
mdadm –manage /dev/md0 –remove /dev/sdb1
mdadm –manage /dev/md1 –remove /dev/sdb2
Em seguida, desligue o sistema:
shutdown -h now
Substitua o disco físico por um novo (ou troque nomes de dispositivo conforme necessário) e inicialize o sistema. Ele deve subir em modo degradado.
3. Verificar estado do array degradado
Execute:
cat /proc/mdstat
Você deverá ver algo como (exemplo):
[root@server1 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0]
104320 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
10377920 blocks [2/1] [U_]
unused devices:
[root@server1 ~]#
E confira as partições e discos com:
fdisk -l
(Exemplo de saída reduzida no original; confirma que /dev/sdb não tem tabela de partições válida.)
4. Copiar tabela de partições do disco bom para o novo disco
Copie a tabela de partições de /dev/sda para /dev/sdb com sfdisk:
sfdisk -d /dev/sda | sfdisk /dev/sdb
Se houver erro referente à assinatura msdos, tente forçar:
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Exemplo de saída útil que confirma a escrita bem-sucedida da nova tabela de partições está presente no procedimento original.
5. Limpar superblocos RAID antigos e adicionar o disco ao array
Zere superblocos mdadm que possam existir no novo disco para evitar confusão:
mdadm –zero-superblock /dev/sdb1
mdadm –zero-superblock /dev/sdb2
Em seguida, adicione as partições do novo disco ao array:
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb2
Verifique novamente:
cat /proc/mdstat
Você verá o array iniciando a recuperação e sincronização, por exemplo:
[======>..............] recovery = 32.3% (3360768/10377920) finish=1.5min speed=74238K/sec
Aguarde até os arrays mostrarem [UU] (dois discos online) em cada mdX.
6. Reinstalar o GRUB no(s) disco(s)
Após a sincronização, reinstale o bootloader em ambos os discos para garantir que o sistema possa inicializar se o outro disco falhar:
Execute o shell do grub (varia conforme versão; exemplo clássico):
grub
Dentro do prompt do grub:
root (hd0,0)
setup (hd0)
root (hd1,0)
setup (hd1)
quit
Se sua distro usa grub2, o procedimento é diferente (por exemplo: grub-install /dev/sda; grub-install /dev/sdb; update-grub). Use o método compatível com sua instalação.
7. Quando isso pode falhar — cenários e soluções rápidas
- Tabela de partições incompatível: use dd para copiar setores iniciais ou reconstrua manualmente com fdisk/parted.
- Superblocos restantes: se somem inconsistências, verifique com mdadm –examine /dev/sdb1 e –zero-superblock novamente.
- Partições com offset diferente: certifique-se de que start/end e tipos (Id fd) sejam idênticos.
- Problemas de boot após GRUB: reinstale com grub-install apropriado para grub2; verifique /etc/fstab por UUIDs conflitantes.
- Velocidade de rebuild muito lenta: pode ser I/O saturado; limpe I/O não essencial e ajuste /proc/sys/dev/raid/speed_limit_min/max se necessário (com cuidado).
8. Abordagens alternativas
- Hot-swap físico: se chassis e controladora suportarem, troque o disco com o sistema em execução e adicione a partição; evita downtime.
- Recriar array do zero: se ambos os discos falharem, restaura a partir de backup e recrie o array; é um plano de último recurso.
- Utilizar LVM sobre RAID: facilita snapshots e movimentação de volumes, mas não substitui testes de disco.
9. Modo mental (heurísticas) para decidir ações
- Se o disco estiver offline mas os dados intactos no outro: copie tabela e adicione ao array.
- Se ambos perderem partições, restaure tabela de um backup (sfdisk -d regularmente) ou use backups de dados.
- Priorize a integridade dos dados antes do tempo de inatividade: não force rebuilds quando erros de I/O persistirem.
10. SOP / Playbook resumido (passo a passo)
- Verificar estado atual: cat /proc/mdstat e fdisk -l.
- Simular falha (ou remover fisicamente) e bootar sistema.
- Copiar tabela: sfdisk -d /dev/sda | sfdisk /dev/sdb.
- Zerar superblocos: mdadm –zero-superblock /dev/sdbX.
- Adicionar partições: mdadm -a /dev/mdX /dev/sdbX.
- Monitorar sincronização: cat /proc/mdstat até [UU].
- Reinstalar bootloader em ambos discos.
- Validar: reboot e verificar boot sem erros; checar /proc/mdstat e dmesg.
11. Checklist por função
- Operador/Administrador: executar comandos, monitorar progresso, reportar tempo de rebuild.
- Engenheiro de armazenamento: analisar logs de I/O se rebuild muito lento ou falhando.
- Engenheiro de sistema: garantir bootloader instalado e testar reboot.
- Suporte/DevOps: atualizar inventário de hardware e criar ticket de substituição física se necessário.
12. Critérios de aceitação
- O array RAID mostra [UU] para todas as unidades relevantes em cat /proc/mdstat.
- Sistema inicializa normalmente a partir de qualquer um dos dois discos (teste de reboot).
- Não há mensagens críticas relacionadas a erros de disco em dmesg após rebuild.
- Tabela de partições do novo disco corresponde exatamente ao disco original (start/end/tipo).
13. Caixa de fatos e números-chave
- RAID1: número mínimo de discos = 2; suporta uma falha de disco sem perda de serviço.
- Comandos críticos: mdadm, sfdisk, fdisk, grub/grub-install.
- Arquivo de verificação: /proc/mdstat (estado do array); mdadm –detail /dev/mdX (detalhes do array).
14. Exemplo de diagrama de decisão (Mermaid)
flowchart TD
A[Disco problemático detectado] --> B{Disco está fisicamente ausente?}
B -- Sim --> C[Substituir fisicamente disco]
B -- Não --> D{Marcar como falha com mdadm?}
D -- Sim --> E[mdadm --manage --fail/--remove]
E --> F[Inserir novo disco]
C --> F
F --> G[Copiar tabela: sfdisk -d /dev/sda | sfdisk /dev/sdb]
G --> H[Zerar superblocos: mdadm --zero-superblock]
H --> I[Adicionar ao array: mdadm -a]
I --> J[Monitorar /proc/mdstat até [UU]]
J --> K[Reinstalar GRUB em ambos discos]
K --> L[Fim]
15. Solução de problemas detalhada
- Rebuild não inicia: verifique se particições adicionadas têm o tipo certo (fd para autodetect RAID) e se o kernel reconheceu as partições (releia tabela de partições com partprobe ou reboot).
- Mensagens de I/O durante rebuild: pare o rebuild, cheque SMART do disco novo (smartctl), substitua se houver erros.
- UUID duplicado em /etc/fstab: atualize fstab para usar UUIDs corretos (blkid para listar) ou ajuste fstab para dispositivos /dev/mdX.
16. Dicas operacionais e segurança
- Faça backup regular das tabelas de partições com: sfdisk -d /dev/sda > sda-partitions.sfdisk
- Antes de operações arriscadas, tenha backups atualizados dos dados.
- Proteja acesso root e registros de comando; sudo e logs ajudam auditoria.
17. Resumo
Substituir um disco em RAID1 envolve: identificar o estado degradado, replicar a tabela de partições do disco funcional, limpar superblocos antigos, adicionar o novo disco ao array e aguardar a sincronização. Reinstalar o bootloader em ambos os discos garante arrancada resiliente.
Links
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- CentOS: http://www.centos.org/