Guia de tecnologias

RAID com mdadm e LVM: criar arrays e migrar dados

5 min read Administração de sistemas Atualizado 28 Sep 2025
RAID com mdadm e LVM: criar e migrar
RAID com mdadm e LVM: criar e migrar

4 Criando nossos arrays RAID

Agora vamos criar os arrays RAID /dev/md0 e /dev/md1. A partição /dev/sdb1 será adicionada a /dev/md0 e /dev/sdb2 a /dev/md1. As partições /dev/sda1 e /dev/sda2 não podem ser adicionadas agora porque o sistema está em execução nelas. Por isso usamos o placeholder missing nos dois comandos abaixo:

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 abaixo mostra o estado dos arrays:

cat /proc/mdstat

Você deverá ver dois arrays RAID degradados ([U] ou [U] indica array degradado; [UU] indica OK):

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

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

unused devices: 
[root@server1 ~]#

Importante: um array degradado é esperado nesta fase — ele ainda funciona, mas falta um dos discos.

Criar filesystem em /dev/md0

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

mkfs.ext3 /dev/md0

Preparar /dev/md1 para LVM

Inicialize /dev/md1 como volume físico LVM:

pvcreate /dev/md1

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

vgextend VolGroup00 /dev/md1

Verifique com pvdisplay — o novo PV (/dev/md1) deve aparecer no VG e inicialmente mostrar todo o espaço como livre:

pvdisplay

Exemplo esperado (mantido do sistema):

[root@server1 ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup00
  PV Size               4.80 GB / not usable 22.34 MB
  Allocatable           yes
  PE Size (KByte)       32768
  Total PE              153
  Free PE               1
  Allocated PE          152
  PV UUID               op2n3N-rck1-Pywc-9wTY-EUxQ-KUcr-2YeRJ0

  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               VolGroup00
  PV Size               4.80 GB / not usable 22.25 MB
  Allocatable           yes
  PE Size (KByte)       32768
  Total PE              153
  Free PE               153
  Allocated PE          0
  PV UUID               pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg

[root@server1 ~]#

Verifique também o grupo de volumes:

vgdisplay

Exemplo de saída esperada:

[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               9.56 GB
  PE Size               32.00 MB
  Total PE              306
  Alloc PE / Size       152 / 4.75 GB
  Free  PE / Size       154 / 4.81 GB
  VG UUID               jJj1DQ-SvKY-6hdr-3MMS-8NOd-pb3l-lS7TA1

[root@server1 ~]#

Gerar /etc/mdadm.conf

Crie mdadm.conf com os arrays detectados:

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

Verifique o conteúdo:

cat /etc/mdadm.conf

Dentro do arquivo você deverá ver linhas ARRAY com os UUIDs dos arrays (exemplo):

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=7d2bf9c3:7cd9df21:f782dab8:9212d7cb
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=d93a2387:6355b5c5:25ed3e50:2a0e4f96

Atualizar /etc/fstab e /etc/mtab

Edite /etc/fstab e substitua LABEL=/boot por /dev/md0:

vi /etc/fstab

Exemplo de /etc/fstab esperado:

/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

Edite também /etc/mtab e substitua /dev/sda1 por /dev/md0:

vi /etc/mtab

Exemplo de /etc/mtab:

/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

Ajustes do GRUB

Abra /boot/grub/menu.lst e adicione fallback=1 logo após default=0 para que exista uma entrada fallback se o primeiro kernel falhar:

vi /boot/grub/menu.lst

A parte relevante deve ficar assim:

default=0
fallback=1

Em seguida, copie a entrada do kernel existente e cole uma cópia acima, alterando root (hd0,0) para root (hd1,0). Exemplo:

[...]
title Fedora (2.6.23.1-42.fc8)
        root (hd1,0)
        kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.23.1-42.fc8.img
title Fedora (2.6.23.1-42.fc8)
        root (hd0,0)
        kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.23.1-42.fc8.img

A primeira entrada (root (hd1,0)) aponta para /dev/sdb, que já faz parte dos arrays. Se o boot do RAID falhar, o GRUB usará a entrada fallback (hd0).

Regenerar ramdisk

Renomeie o initrd atual e gere um novo para o kernel em uso:

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

5 Movendo nossos dados para os arrays RAID

Agora que os arquivos de configuração foram alterados, copie o conteúdo de /dev/sda para /dev/sdb (incluindo as mudanças). Para mover o conteúdo LVM (/dev/sda2) para o array LVM /dev/md1 use pvmove:

pvmove /dev/sda2 /dev/md1

Isto pode levar tempo. Seja paciente.

Após finalizar, remova /dev/sda2 do volume group VolGroup00:

vgreduce VolGroup00 /dev/sda2

E instrua o sistema a não mais tratar /dev/sda2 como PV:

pvremove /dev/sda2

Verifique pvdisplay — agora /dev/md1 deve ser o PV ativo:

pvdisplay

Exemplo de saída esperada:

[root@server1 ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               VolGroup00
  PV Size               4.80 GB / not usable 22.25 MB
  Allocatable           yes
  PE Size (KByte)       32768
  Total PE              153
  Free PE               1
  Allocated PE          152
  PV UUID               pS3xiy-AEnZ-p3Wf-qY2D-cGus-eyGl-03mWyg

[root@server1 ~]#

Alterar tipo de partição e adicionar /dev/sda2 ao array

Altere o tipo da partição /dev/sda2 para Linux raid autodetect (hex fd) e grave a tabela:

fdisk /dev/sda

Exemplo interativo (respostas entre <- e ->):

[root@server1 ~]# fdisk /dev/sda

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 ~]#

Adicione /dev/sda2 ao array /dev/md1:

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

Verifique o progresso de sincronização com:

cat /proc/mdstat

Exemplo de sincronização em andamento:

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[2] sdb2[1]
      5036288 blocks [2/1] [_U]
      [=====>...............]  recovery = 28.8% (1454272/5036288) finish=2.8min speed=21132K/sec

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

unused devices: 
[root@server1 ~]#

Dica: rode watch cat /proc/mdstat para monitorar continuamente. Para sair do watch pressione CTRL+C.

Espere a sincronização terminar — a saída deverá mostrar [UU] quando o array estiver íntegro:

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

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

unused devices: 
[root@server1 ~]#

Montar e copiar /boot para /dev/md0

Crie um ponto de montagem e monte o array /dev/md0:

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

Verifique com mount — agora /dev/md0 deve aparecer montado em /boot e /mnt/md0:

mount

Exemplo:

[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 ~]#

Copie os arquivos de /boot montado em / para o novo /dev/md0 (preserve atributos):

cd /boot
cp -dpRx . /mnt/md0

Importante: confirme que os arquivos de kernel e initrd foram copiados corretamente antes de reiniciar.

Critérios de aceitação

  • /proc/mdstat mostra [UU] para arrays que foram sincronizados.
  • /dev/md0 montado em /boot e contém todos os kernels e initrds.
  • pvdisplay e vgdisplay mostram /dev/md1 como PV ativo e espaço livre conforme esperado.
  • GRUB configurado com fallback=1 e pontos root (hd1,0) e (hd0,0) presentes.

Checklist (Administrador)

  • Gerar /etc/mdadm.conf
  • Atualizar /etc/fstab e /etc/mtab
  • Ajustar /boot/grub/menu.lst (fallback e entrada hd1)
  • Criar filesystem em /dev/md0
  • pvcreate /dev/md1 e vgextend VolGroup00
  • pvmove /dev/sda2 -> /dev/md1
  • vgreduce /dev/sda2 e pvremove /dev/sda2
  • fdisk /dev/sda para marcar partição fd e mdadm –add /dev/md1 /dev/sda2
  • Verificar sincronização em /proc/mdstat
  • Montar /dev/md0 e copiar /boot

Mini-metodologia (passo a passo mental)

  1. Planejar: confirmar backups e janelas de manutenção.
  2. Preparar: criar arrays degradados e configurar mdadm/LVM.
  3. Migrar: mover dados LVM com pvmove e sincronizar RAID.
  4. Verificar: validar /proc/mdstat, montagem e boot entries.
  5. Finalizar: ajustar partições e remover referências antigas.

Quando isso pode falhar (casos e mitigação)

  • Problema: kernel não encontra /boot no RAID no primeiro reboot.
    Mitigação: fallback=1 garante boot pelo disco original; mantenha initrd atualizado.

  • Problema: pvmove interrompido por falta de espaço.
    Mitigação: verificar vgdisplay e liberar espaço ou reduzir dados antes.

  • Problema: re-leitura de partição falha (ioctl error 16).
    Mitigação: reiniciar fora da janela crítica; a nova tabela entra em vigor após reboot.

Caixa de fatos (valores-chave)

  • Tamanho típico de PE no exemplo: 32 MB.
  • PVs no VG após extensão: 2 (sda2 antigo e /dev/md1).
  • VG Size no exemplo: ~9.56 GB.

Comandos essenciais — resumo rápido

  • Ver arrays: cat /proc/mdstat
  • Criar array: mdadm –create …
  • Gerar mdadm.conf: mdadm –examine –scan > /etc/mdadm.conf
  • Criar FS: mkfs.ext3 /dev/md0
  • LVM: pvcreate, vgextend, pvmove, vgreduce, pvremove
  • Adicionar partição ao RAID: mdadm –add /dev/md1 /dev/sda2

Resumo

Este guia mostrou como criar arrays RAID degradados, preparar um array LVM (/dev/md1), estender o VG, migrar dados LVM com pvmove, marcar partições como Linux raid autodetect e sincronizar os mirrors adicionando as partições originais. Teste sempre cada etapa e mantenha um fallback no GRUB para garantir recuperação do boot.

Notas finais: faça backup antes de qualquer operação em discos e execute os passos em uma janela de manutenção. Verifique periodicamente /proc/mdstat durante sincronizações longas.

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