RAID com mdadm e LVM: criar arrays e migrar dados
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)
- Planejar: confirmar backups e janelas de manutenção.
- Preparar: criar arrays degradados e configurar mdadm/LVM.
- Migrar: mover dados LVM com pvmove e sincronizar RAID.
- Verificar: validar /proc/mdstat, montagem e boot entries.
- 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.
Materiais semelhantes
RAID1 em LVM: Preparar GRUB e /dev/sda

Desativar notificações do macOS High Sierra

Como criar um pôster impactante em 6 passos

Ver contagem de 'Não gostei' no YouTube
