Guia de tecnologias

Criando arrays RAID e migrando dados em CentOS

10 min read Servidores Atualizado 29 Sep 2025
RAID em CentOS: criar arrays e migrar dados
RAID em CentOS: criar arrays e migrar dados

Objetivo e escopo

Este documento descreve como: criar arrays RAID1 com mdadm, preparar um dos arrays para uso com LVM, atualizar a configuração do sistema para usar os novos dispositivos RAID, mover dados do disco original para os arrays redundantes e finalizar a sincronização. É destinado a administradores Linux com acesso root que trabalham em sistemas similares ao CentOS 5 (ex.: layout com /boot em partição separada e LVM para /).

Importante: execute esses passos com acesso físico à máquina ou uma sessão de console remoto confiável. Nunca remova discos ativos nem interrompa uma sincronização de RAID sem ter backups válidos.

Índice

  • Criar arrays RAID
  • Checar o estado do RAID
  • Criar sistema de arquivos e preparar LVM
  • Atualizar mdadm.conf, /etc/fstab, /etc/mtab e GRUB
  • Regenerar initrd
  • Mover os dados com pvmove e adicionar discos ao RAID
  • Verificações, playbook resumido e listas de verificação
  • Fluxograma de decisão e matriz de riscos
  • Resumo

1. Criar nossos arrays RAID

Agora vamos criar os arrays RAID /dev/md0 e /dev/md1. /dev/sdb1 será adicionado a /dev/md0 e /dev/sdb2 a /dev/md1. /dev/sda1 e /dev/sda2 não podem ser adicionados neste momento porque o sistema está rodando neles; por isso usamos o placeholder missing nos comandos a seguir:

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2

O comando a seguir mostrará o estado dos arrays:

cat /proc/mdstat

A saída deverá indicar que você tem dois arrays RAID degradados ([U] ou [U] indica array degradado; [UU] indica array OK):

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb2[1]
10377920 blocks [2/1] [_U]

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices:
[root@server1 ~]#

Nota: o estado inicial com “missing” é normal quando o segundo disco do par ainda está ausente. O array funcionará em modo degradado até adicionarmos o segundo membro.

Criar sistema de arquivos no md0

Agora criamos um sistema de arquivos ext3 no array não-LVM /dev/md0:

mkfs.ext3 /dev/md0

Preparar md1 para LVM

Para preparar o array LVM (/dev/md1):

pvcreate /dev/md1

Em seguida, adicione /dev/md1 ao grupo de volumes VolGroup00:

vgextend VolGroup00 /dev/md1

Verifique os physical volumes:

pvdisplay

A saída deverá mostrar que /dev/md1 foi adicionado ao volume group VolGroup00:

[root@server1 ~]# pvdisplay
— Physical volume —
PV Name /dev/sda2
VG Name VolGroup00
PV Size 9.90 GB / not usable 22.76 MB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 316
Free PE 0
Allocated PE 316
PV UUID aikFEP-FB15-nB9C-Nfq0-eGMG-hQid-GOsDuj

— Physical volume —
PV Name /dev/md1
VG Name VolGroup00
PV Size 9.90 GB / not usable 22.69 MB
Allocatable yes
PE Size (KByte) 32768
Total PE 316
Free PE 316
Allocated PE 0
PV UUID u6IZfM-5Zj8-kFaG-YN8K-kjAd-3Kfv-0oYk7J

[root@server1 ~]#

Em seguida, confira o volume group:

vgdisplay

Saída esperada (exemplo):

[root@server1 ~]# vgdisplay
— Volume group —
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 2
Act PV 2
VG Size 19.75 GB
PE Size 32.00 MB
Total PE 632
Alloc PE / Size 316 / 9.88 GB
Free PE / Size 316 / 9.88 GB
VG UUID ZPvC10-cN09-fI0S-Vc8l-vOuZ-wM6F-tlz0Mj

[root@server1 ~]#


2. Atualizar mdadm.conf e arquivos de montagem

Crie /etc/mdadm.conf com a varredura dos arrays:

mdadm --examine --scan > /etc/mdadm.conf

Verifique o conteúdo:

cat /etc/mdadm.conf

No arquivo você deverá ver linhas semelhantes a estas (identificadores UUID dos seus arrays):

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=0a96be0f:bf0f4631:a910285b:0f337164
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=f9e691e2:8d25d314:40f42444:7dbe1da1

Atualizar /etc/fstab

Edite /etc/fstab e substitua LABEL=/boot (ou /dev/sda1) por /dev/md0. O arquivo deve ficar semelhante a:

vi /etc/fstab

Conteúdo de exemplo:

/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
/dev/md0             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0

Atualizar /etc/mtab

Substitua /dev/sda1 por /dev/md0 em /etc/mtab para refletir o /boot montado no RAID:

vi /etc/mtab

Exemplo:

/dev/mapper/VolGroup00-LogVol00 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/md0 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0

3. Ajustar o GRUB para fallback e adicionar entrada usando sdb

Abra /boot/grub/menu.lst e adicione fallback=1 logo após default=0:

vi /boot/grub/menu.lst

Exemplo:

[...]
default=0
fallback=1
[...]

Isso faz com que, se a primeira entrada de kernel falhar, o GRUB tente a entrada definida como fallback (contagem começa em 0).

No mesmo arquivo, copie a primeira stanza do kernel e cole-a antes da existente, alterando root (hd0,0) para root (hd1,0) — assim o GRUB tentará também inicializar a partir do disco /dev/sdb que já faz parte dos arrays RAID:

[...]
title CentOS (2.6.18-128.el5)
        root (hd1,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-128.el5.img
title CentOS (2.6.18-128.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-128.el5.img
[...]

Observação: root (hd1,0) refere-se ao disco que hoje é /dev/sdb. Após reiniciar, o sistema tentará inicializar a partir do RAID; se falhar, usará o fallback (o disco original /dev/sda).

Atualizar o ramdisk (initrd)

Mova o initrd atual e regenere-o para garantir que os drivers necessários para RAID e LVM sejam incluídos:

mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`

4. Movendo nossos dados para os arrays RAID

Com todos os arquivos de configuração atualizados, copie o conteúdo de /dev/sda para /dev/sdb (incluindo as mudanças feitas). Para mover o conteúdo do PV /dev/sda2 para o PV /dev/md1 use pvmove:

pvmove /dev/sda2 /dev/md1

Esse processo pode levar tempo dependendo do I/O e do tamanho dos volumes; seja paciente.

Após a conclusão, remova /dev/sda2 do grupo VolGroup00:

vgreduce VolGroup00 /dev/sda2

E instrua o sistema a não usar mais /dev/sda2 como physical volume:

pvremove /dev/sda2

Verifique com pvdisplay:

[root@server1 ~]# pvdisplay
— Physical volume —
PV Name /dev/md1
VG Name VolGroup00
PV Size 9.90 GB / not usable 22.69 MB
Allocatable yes (but full)
PE Size (KByte) 32768
Total PE 316
Free PE 0
Allocated PE 316
PV UUID u6IZfM-5Zj8-kFaG-YN8K-kjAd-3Kfv-0oYk7J

[root@server1 ~]#

Alterar partição de /dev/sda2 para RAID autodetect e adicioná-la ao array

Use fdisk para alterar o tipo de partição de /dev/sda2 para “fd” (Linux raid autodetect):

fdisk /dev/sda

Exemplo de sessão (insira as opções indicadas entre <–):

[root@server1 ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:

  1. software that runs at boot time (e.g., old versions of LILO)
  2. booting and partitioning software from other OSs
    (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): <– t
Partition number (1-4): <– 2
Hex code (type L to list codes): <– fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): <– w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@server1 ~]#

Em seguida, adicione /dev/sda2 ao array md1:

mdadm --add /dev/md1 /dev/sda2

Acompanhe a sincronização:

cat /proc/mdstat

Exemplo de saída durante a recuperação (síncrona):

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[2] sdb2[1]
10377920 blocks [2/1] [_U]
[====>…………….] recovery = 23.4% (2436544/10377920) finish=2.0min speed=64332K/sec

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices:
[root@server1 ~]#

Você pode usar:

watch cat /proc/mdstat

para obter uma saída atualizada automaticamente. Para sair de watch, pressione CTRL+C.

Aguarde até que a sincronização termine. Saída final esperada:

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[0] sdb2[1]
10377920 blocks [2/2] [UU]

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices:
[root@server1 ~]#


5. Montar /dev/md0 e copiar /boot

Crie o diretório de montagem e monte /dev/md0:

mkdir /mnt/md0
mount /dev/md0 /mnt/md0

Verifique a montagem com:

mount

Exemplo de saída mostrando /boot no RAID e também montado em /mnt/md0:

[root@server1 ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/md0 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/md0 on /mnt/md0 type ext3 (rw)
[root@server1 ~]#

Agora copie o conteúdo de /boot para o novo array montado em /mnt/md0 (preservando atributos e links):

cd /boot
cp -dpRx . /mnt/md0

As opções cp usadas significam: -d preserva links simbólicos, -p preserva timestamps e permissões, -R recursivo, -x não atravessa sistemas de arquivos montados.


Checklists rápidos (pré-requisitos e pós-operação)

Checklist antes de começar:

  • Backup completo e verificado do sistema e /boot.
  • Acesso de console remoto ou físico (caso a rede caia).
  • Ferramentas instaladas: mdadm, lvm2.
  • Tempo reservado para migração (pvmove e sincronização podem demorar).

Checklist após cada etapa crítica:

  • Depois de mdadm –create: cat /proc/mdstat mostra arrays criados.
  • Após pvcreate/vgextend: pvdisplay e vgdisplay mostram dispositivos esperados.
  • Após editar fstab/mtab: confirme que /boot está definido como /dev/md0.
  • Após atualizar GRUB: verifique menu.lst e regenere initrd.
  • Depois de pvmove: pvdisplay não deve mais listar /dev/sda2.
  • Após mdadm –add e sincronização: cat /proc/mdstat deve mostrar [UU] para arrays completos.

Playbook resumido (passos executáveis)

  1. Criar md0 e md1 com disco secundário sdb (usar missing para par ausente).
  2. mkfs.ext3 /dev/md0
  3. pvcreate /dev/md1
  4. vgextend VolGroup00 /dev/md1
  5. mdadm –examine –scan > /etc/mdadm.conf
  6. Editar /etc/fstab e /etc/mtab para usar /dev/md0 em /boot
  7. Atualizar /boot/grub/menu.lst (fallback=1, adicionar entry com root (hd1,0))
  8. mv + mkinitrd para atualizar initrd
  9. pvmove /dev/sda2 /dev/md1
  10. vgreduce VolGroup00 /dev/sda2 && pvremove /dev/sda2
  11. Mudar parttype de /dev/sda2 para fd via fdisk e mdadm –add /dev/md1 /dev/sda2
  12. Acompanhar cat /proc/mdstat até sincronização terminar
  13. mkdir /mnt/md0; mount /dev/md0 /mnt/md0; cp -dpRx /boot . /mnt/md0
  14. Reiniciar e testar boot a partir do RAID (tenha console disponível)

Fluxograma de decisão (Mermaid)

flowchart TD
  A[Iniciar migração RAID] --> B{Backup válido?}
  B -- Não --> Z[Fazer backup e validar]
  B -- Sim --> C[Criar arrays md0 e md1]
  C --> D{md0 criado com sucesso?}
  D -- Não --> Y[Corrigir erros de mdadm; verificar discos]
  D -- Sim --> E[Preparar md1 para LVM]
  E --> F[vgextend VolGroup00]
  F --> G[Atualizar mdadm.conf, fstab, mtab e GRUB]
  G --> H[Regenerar initrd]
  H --> I[pvmove /dev/sda2 /dev/md1]
  I --> J{pvmove concluído?}
  J -- Não --> X[Aguardar ou investigar I/O]
  J -- Sim --> K[fdisk alterar parttype /dev/sda2 -> fd]
  K --> L[mdadm --add /dev/md1 /dev/sda2]
  L --> M{sincronização completa?}
  M -- Não --> X
  M -- Sim --> N[montar /dev/md0 e copiar /boot]
  N --> O[Testar boot; reiniciar]
  O --> P[Fim]

Matriz de riscos e mitigação

  • Perda de boot ao gravar GRUB: Mitigação — manter o disco original com fallback=1 e ter console de recuperação.
  • Dados incompletos após pvmove interrompido: Mitigação — não remover PV original até confirmar pvdisplay final; ter backup.
  • Sincronização RAID lenta: Mitigação — verificar carga do I/O, priorizar janela de manutenção, usar ionice se necessário.
  • Erro ao reescrever tabela de partição (ioctl error 16): Mitigação — reiniciar em janela de manutenção se necessário; o kernel usará nova tabela no próximo boot.

Critérios de aceitação (verificações finais)

  • Todos os arrays RAID reportam [UU] em /proc/mdstat.
  • /boot está montado a partir de /dev/md0 e contém os kernels e initrds corretos.
  • vgdisplay mostra apenas /dev/md1 como PV associado (ou o PV esperado).
  • Sistema reinicia com sucesso a partir do array RAID (teste de reboot).
  • Backups anteriores permanecem íntegros e verificáveis.

Perguntas frequentes rápidas e solução de problemas

Q: Se o sistema não inicializar após a mudança do GRUB?
A: Use o fallback do GRUB para inicializar a partir do disco original; entre em modo single-user e revise /boot, menu.lst e initrd.

Q: E se pvmove falhar por falta de espaço?
A: Verifique espaço livre no PV destino (Free PE). Expanda o VG ou reduza volumes antes de mover. Nunca prossiga sem espaço suficiente.

Q: Como monitorar a sincronização RAID em tempo real?
A: watch cat /proc/mdstat exibe progresso; verificar também /var/log/messages para erros de disco.


Boas práticas e recomendações finais

  • Teste este procedimento em uma VM ou ambiente de laboratório antes de executar em produção.
  • Planeje uma janela de manutenção com comunicação às partes interessadas.
  • Mantenha documentação das alterações e dos comandos executados.
  • Considere automatizar verificações pós-migração com scripts que validem /proc/mdstat, pvdisplay e a capacidade de reboot.

Resumo

  • Criamos dois arrays RAID1, preparamos um deles para LVM e movemos volumes usando pvmove.
  • Atualizamos mdadm.conf, /etc/fstab, /etc/mtab, GRUB e regeneramos initrd.
  • Sincronizamos os discos, montamos /dev/md0 e copiamos /boot.
  • Siga as checklists e valide todos os critérios de aceitação antes de remover os discos originais.

Importante: sempre tenha backups e acesso de recuperação antes de executar operações em discos e boot loaders.

Autor
Edição

Materiais semelhantes

Backup do Registro do Windows — Guia prático
Windows

Backup do Registro do Windows — Guia prático

Como ver publicações curtidas no Instagram
Redes Sociais

Como ver publicações curtidas no Instagram

Digitação por voz no WhatsApp — Gboard e SwiftKey
Tutoriais

Digitação por voz no WhatsApp — Gboard e SwiftKey

Como usar a pesquisa comum do IMDb
Guias

Como usar a pesquisa comum do IMDb

Mostrar citação na área de trabalho com Rainmeter
Tutoriais

Mostrar citação na área de trabalho com Rainmeter

NFS no AlmaLinux 9: guia completo de instalação
Administração Linux

NFS no AlmaLinux 9: guia completo de instalação