Guia de tecnologias

Testes — Simular falha de disco em RAID1

6 min read Administração Atualizado 11 Oct 2025
Simular falha de disco em RAID1
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

  1. Confirmar que o array está degradado (cat /proc/mdstat).
  2. Copiar tabela de partições (sfdisk -d | sfdisk –force).
  3. Apagar metadados RAID antigos (mdadm –zero-superblock).
  4. Adicionar partições ao array (mdadm -a).
  5. Monitorar sincronização (cat /proc/mdstat).
  6. Reinstalar bootloader (grub-install) em ambos os discos.
  7. 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

Autor
Edição

Materiais semelhantes

Instalar e usar Podman no Debian 11
Containers

Instalar e usar Podman no Debian 11

Apt‑pinning no Debian: guia prático
Administração de sistemas

Apt‑pinning no Debian: guia prático

Injete FSR 4 com OptiScaler em qualquer jogo
Tecnologia

Injete FSR 4 com OptiScaler em qualquer jogo

DansGuardian e Squid com NTLM no Debian Etch
Infraestrutura

DansGuardian e Squid com NTLM no Debian Etch

Corrigir erro de instalação no Android
Android

Corrigir erro de instalação no Android

KNetAttach: Pastas de Rede remota no KDE
KDE

KNetAttach: Pastas de Rede remota no KDE