Testes — Simular falha de disco em RAID1
Objetivo
Simular uma falha de disco em um array RAID1 e demonstrar como substituir o disco com segurança, garantindo que o sistema seja reintegrado e inicialize corretamente.
Importante: identifique corretamente os dispositivos (/dev/sda, /dev/sdb). Um erro de dispositivo pode causar perda de dados.
Pré-requisitos rápidos
- Acesso root ou sudo no servidor.
- mdadm instalado e configurado com arrays RAID1 (/dev/md0, /dev/md1 neste exemplo).
- Um disco de substituição fisicamente disponível (ou um dispositivo virtual) identificado como /dev/sdb no exemplo.
1. Simular a falha do disco (modo soft)
Você pode simular a falha descartando as partições do disco do array; aqui assumimos que /dev/sdb falhou. Os comandos abaixo marcam as partições como falhadas e removem-nas do array.
mdadm --manage /dev/md0 --fail /dev/sdb1
mdadm --manage /dev/md1 --fail /dev/sdb5
mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm --manage /dev/md1 --remove /dev/sdb5
Nota: Se preferir simular desligando o servidor e fisicamente removendo o disco, faça-o com cuidado e apenas em ambiente de teste.
2. Desligar o sistema e trocar o disco (opcional)
Para um teste que inclua manipulação física do hardware, desligue o sistema:
shutdown -h now
Depois, instale o novo disco. Se você simulou a falha de /dev/sda e moveu fisicamente os discos, assegure que o disco substituto fique aparecendo como /dev/sdb (ou ajuste os comandos abaixo conforme o mapeamento real).
3. Verifique o estado do array
Ao reiniciar, confirme que o array está degradado:
cat /proc/mdstat
Exemplo de saída degradada (apenas referência):
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[2]
4989940 blocks super 1.2 [2/1] [U_]
md0 : active raid1 sda1[2]
248820 blocks super 1.2 [2/1] [U_]
unused devices:
root@server1:~#
Você também pode inspecionar os discos com fdisk:
fdisk -l
Exemplo de saída (referência):
root@server1:~# fdisk -l
Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0003717c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 32 248832 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sda2 32 653 4990977 5 Extended
Partition 2 does not end on cylinder boundary.
/dev/sda5 32 653 4990976 fd Linux raid autodetect
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/md0: 254 MB, 254791680 bytes
...
root@server1:~#
4. Copiar a tabela de partições do disco em funcionamento para o disco substituto
Copie a tabela de partições de /dev/sda para /dev/sdb com sfdisk. Esse comando replica os offsets e tamanhos de partição (útil para RAID por partição):
sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Exemplo de diálogo do comando (para referência):
root@server1:~# sfdisk -d /dev/sda | sfdisk --force /dev/sdb
Checking that no-one is using this disk right now ...
Warning: extended partition does not start at a cylinder boundary.
DOS and Linux will interpret the contents differently.
OK
Disk /dev/sdb: 652 cylinders, 255 heads, 63 sectors/track
sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0
Device Boot Start End #sectors Id System
/dev/sdb1 * 2048 499711 497664 fd Linux raid autodetect
/dev/sdb2 501758 10483711 9981954 5 Extended
/dev/sdb3 0 - 0 0 Empty
/dev/sdb4 0 - 0 0 Empty
/dev/sdb5 501760 10483711 9981952 fd Linux raid autodetect
Warning: partition 1 does not end at a cylinder boundary
Successfully wrote the new partition table
Re-reading the partition table ...
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
root@server1:~#
Observação: o aviso sobre boundaries (cilindros) é antigo; as ferramentas modernas usam setores e é seguro prosseguir se você entender as implicações. Contudo, sempre tenha backup ou snapshots antes de operar em produção.
5. Remover assinaturas RAID antigas do novo disco
Se o disco novo tiver restos de metadata RAID, remova-os:
mdadm --zero-superblock /dev/sdb1
mdadm --zero-superblock /dev/sdb5
Isso limpa superblocos RAID antigos, evitando que o kernel tente montar participações incorretas.
6. Adicionar o disco ao array
Com as partições no lugar e o superbloco limpo, adicione as partições de volta ao array:
mdadm -a /dev/md0 /dev/sdb1
mdadm -a /dev/md1 /dev/sdb5
Verifique a sincronização:
cat /proc/mdstat
Exemplo durante a recuperação:
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[3] sda5[2]
4989940 blocks super 1.2 [2/1] [U_]
[========>............] recovery = 44.7% (2233024/4989940) finish=0.2min speed=159501K/sec
md0 : active raid1 sdb1[3] sda1[2]
248820 blocks super 1.2 [2/2] [UU]
unused devices:
root@server1:~#
Aguarde até que ambos os arrays mostrem [UU] (todos os membros sincronizados):
root@server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[3] sda5[2]
4989940 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdb1[3] sda1[2]
248820 blocks super 1.2 [2/2] [UU]
unused devices:
root@server1:~#
Tempo de sincronização depende do tamanho dos arrays e da carga do sistema.
7. Reinstalar o carregador de boot em ambos os discos
Para garantir que o servidor possa inicializar se um disco falhar, instale o GRUB em ambos os discos físicos:
grub-install /dev/sda
grub-install /dev/sdb
Verifique se o GRUB completou sem erros. Em sistemas com UEFI pode ser necessário ajustar o procedimento (ver seção de alternativas).
8. Confirmação final
Reinicie o sistema novamente e confirme que o array está saudável e que o sistema inicializa corretamente a partir de qualquer disco.
reboot
Após a reinicialização, confira:
cat /proc/mdstat
mdadm --detail /dev/md0
mdadm --detail /dev/md1
Checklist rápido (papéis)
- Sysadmin (antes da manutenção): garantir backup recente, agendar janela de manutenção, validar partições e UUIDs.
- Técnico de hardware (substituição física): desligar energia, trocar disco com ESD, anotar mapeamento físico -> /dev/*.
- Operador/On-call (pós-troca): executar comandos de re-sincronização, monitorar /proc/mdstat e logs do kernel (/var/log/syslog ou journalctl).
Mini‑metodologia: passos essenciais
- Confirmar que o array está degradado (cat /proc/mdstat).
- Copiar tabela de partições (sfdisk -d | sfdisk –force).
- Apagar metadados RAID antigos (mdadm –zero-superblock).
- Adicionar partições ao array (mdadm -a).
- Monitorar sincronização (cat /proc/mdstat).
- Reinstalar bootloader (grub-install) em ambos os discos.
- Testar reboot e verificar integridade.
Alternativas e variações
- Se você usar GPT/UEFI, prefira gdisk/parted em vez de sfdisk e instale o GRUB/efibootmgr conforme necessário.
- Para discos idênticos, você também pode clonar setores iniciais com dd: dd if=/dev/sda of=/dev/sdb bs=512 count=2048 (use com extrema cautela).
- Se o sistema usar LVM por cima do RAID, verifique os PVs com pvdisplay; às vezes é necessário ativar volumes LVM após a sincronização.
- Em ambientes Linux modernos, parted –script pode replicar partições respeitando alinhamento a 1MiB.
Quando esse procedimento pode falhar (contraexemplos)
- Disco substituto menor que o original — sfdisk irá falhar ao escrever partições maiores.
- Array com metadata RAID não padrão — versões do mdadm ou superblocos diferentes podem exigir comandos adicionais.
- Sistema com criptografia (LUKS) — você precisa reimportar/atualizar cabeçalhos de LUKS com cuidado.
- Falha no carregador de boot por configurações de UEFI: em servidores com UEFI e discos com ESP, é necessário criar/replicar a partição EFI e registrar entradas.
Guia de troubleshooting rápido
- Sincronização não começa: verifique dmesg/journalctl para erros de I/O. Confirme que as partições adicionadas estão presentes em /proc/partitions.
- mdadm rejeita dispositivo: confirme que as partições têm o mesmo tipo (fd para RAID auto) e que você usou –zero-superblock.
- Velocidade de reconstrução lenta: ajuste /proc/sys/dev/raid/speed_limit_min e speed_limit_max temporariamente para acelerar (requer cautela em produção).
Important: alterar speed_limit pode impactar desempenho de I/O para aplicações em produção.
Matriz de riscos e mitigação (qualitativa)
- Risco: seleção errada do dispositivo -> Mitigação: usar lsblk e uuid (ls -l /dev/disk/by-id) antes de operar.
- Risco: perda de boot depois da troca -> Mitigação: reinstalar GRUB em todos os discos e testar reboot.
- Risco: dados corrompidos por tabela de partições mal escrita -> Mitigação: snapshot ou backup antes da operação.
Pequeno glossário (1 linha cada)
- RAID1: espelhamento de discos; cada bloco é duplicado entre dois ou mais discos.
- mdadm: utilitário Linux para gerenciar arrays de software RAID.
- superblock: metadata do RAID armazenada nas partições que permite ao mdadm reconhecer membros.
- sfdisk: utilitário para manipular tabelas de partição MBR (e exportá-las).
Exercícios de verificação / critérios de aceitação
- O array mostra todos os membros como [UU] em /proc/mdstat.
- O sistema inicializa corretamente com apenas um dos discos fisicamente conectado.
- As partições de /dev/sdb têm os mesmos offsets e tamanhos esperados de /dev/sda (confirme com sfdisk -l /dev/sdb).
Resumo
Você simulou a falha de um disco em um RAID1, copiou a tabela de partições para o disco substituto, limpou metadados RAID antigos, re‑adicionou o disco ao array, monitorou a sincronização e reinstalou o GRUB. Teste sempre em ambiente controlado e tenha backups antes de operações em produção.
Links úteis
- The Software-RAID Howto: http://tldp.org/HOWTO/Software-RAID-HOWTO.html
- Debian: http://www.debian.org/
Materiais semelhantes

Chave de segurança Android para login Google no iOS

Instalar ADB e Fastboot no Macbook
Corrigir reparação pendente no Windows

Criar app Android grátis sem programar
Instalar barra lateral no Windows 11/10
