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

Chave de segurança Android para login Google no iOS
Segurança

Chave de segurança Android para login Google no iOS

Instalar ADB e Fastboot no Macbook
Tutoriais

Instalar ADB e Fastboot no Macbook

Corrigir reparação pendente no Windows
Windows

Corrigir reparação pendente no Windows

Criar app Android grátis sem programar
Desenvolvimento Mobile

Criar app Android grátis sem programar

Instalar barra lateral no Windows 11/10
Produtividade

Instalar barra lateral no Windows 11/10

Recuperar arquivos excluídos no Teams
Produtividade

Recuperar arquivos excluídos no Teams