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

RAID1 em LVM: Preparar GRUB e /dev/sda
Sistemas

RAID1 em LVM: Preparar GRUB e /dev/sda

Desativar notificações do macOS High Sierra
macOS

Desativar notificações do macOS High Sierra

Como criar um pôster impactante em 6 passos
Design

Como criar um pôster impactante em 6 passos

Ver contagem de 'Não gostei' no YouTube
Tutoriais

Ver contagem de 'Não gostei' no YouTube

Converter Spotify para MP3 com TuneFab
Tutoriais

Converter Spotify para MP3 com TuneFab

RAID com mdadm e LVM: criar e migrar
Administração de sistemas

RAID com mdadm e LVM: criar e migrar