Criando arrays RAID e migrando dados para RAID
Resumo rápido
- Criamos dois arrays RAID1 com mdadm, usando placeholders para componentes que ainda estão em uso.
- Formatamos /dev/md0 para /boot e adicionamos /dev/md1 ao LVM.
- Atualizamos mdadm.conf, /etc/fstab, /etc/mtab e a configuração do GRUB para garantir boot resiliente.
- Movemos os dados LVM com pvmove, reduzimos e removemos o PV antigo, e sincronizamos o RAID.
O que este guia cobre
- Criar arrays RAID1 com mdadm.
- Preparar RAID para uso com LVM (pvcreate, vgextend).
- Atualizar arquivos de configuração do sistema para refletir o novo layout (/etc/mdadm/mdadm.conf, /etc/fstab, /etc/mtab, GRUB).
- Migrar dados de /dev/sda para /dev/sdb e para os dispositivos RAID.
Importante: este guia assume que você está trabalhando num sistema Debian/Ubuntu com LVM e GRUB2 instalados. Execute cada comando com privilégios de root. Faça backup antes de operar em discos de produção.
4 Criando nossos arrays RAID
Agora vamos criar os arrays RAID /dev/md0 e /dev/md1. A ideia neste passo é colocar /dev/sdb1 em /dev/md0 e /dev/sdb5 em /dev/md1. Os dispositivos /dev/sda1 e /dev/sda5 não podem ser adicionados naquele momento porque o sistema está rodando a partir deles; por isso usamos o placeholder missing nas duas criações abaixo.
mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb5
Ao executar cada comando, você pode ver uma mensagem como a abaixo solicitando confirmação — pressione y para continuar:
root@server1:~# mdadm –create /dev/md1 –level=1 –raid-disks=2 missing /dev/sdb5
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store ‘/boot’ on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
–metadata=0.90
Continue creating array? <– y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@server1:~#
A mensagem informa que a metadata 1.2 fica no início do dispositivo e pode não ser adequada para initramfs/boot em certos carregadores. Em nosso procedimento usamos outras medidas (GRUB configurado para RAID) para garantir o boot.
Para verificar o estado dos arrays, rode:
cat /proc/mdstat
Você deve ver dois arrays RAID degradados. Notações: [U] ou [U] significa que um disco está ausente; [UU] significa que o array está OK.
root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb5[1]
4989940 blocks super 1.2 [2/1] [_U]
md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]
unused devices:
root@server1:~#
Formatar /dev/md0
Crie um filesystem ext2 em /dev/md0 (usado aqui para /boot):
mkfs.ext2 /dev/md0
Preparar /dev/md1 para LVM
Para usar /dev/md1 como um Physical Volume do LVM, execute:
pvcreate /dev/md1
Em seguida, adicione /dev/md1 ao volume group existente (ex.: server1):
vgextend server1 /dev/md1
Verifique o resultado com:
pvdisplay
A saída deve mostrar /dev/md1 como um PV do VG server1 com espaço livre para alocar:
root@server1:~# pvdisplay
— Physical volume —
PV Name /dev/sda5
VG Name server1
PV Size 4.76 GiB / not usable 2.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 1218
Free PE 0
Allocated PE 1218
PV UUID 8p9j8i-cc9a-bAJq-LFP9-CBMF-JrPl-SDbx4X
— Physical volume —
PV Name /dev/md1
VG Name server1
PV Size 4.76 GiB / not usable 1012.00 KiB
Allocatable yes
PE Size 4.00 MiB
Total PE 1218
Free PE 1218
Allocated PE 0
PV UUID W4I07I-RT3P-DK1k-1HBz-oJvp-6in0-uQ53KS
root@server1:~#
E a exibição do VG:
vgdisplay
root@server1:~# vgdisplay
— Volume group —
VG Name server1
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.52 GiB
PE Size 4.00 MiB
Total PE 2436
Alloc PE / Size 1218 / 4.76 GiB
Free PE / Size 1218 / 4.76 GiB
VG UUID m99fJX-gMl9-g2XZ-CazH-32s8-sy1Q-8JjCUW
root@server1:~#
Atualizando /etc/mdadm/mdadm.conf
O arquivo /etc/mdadm/mdadm.conf ainda não reflete os arrays recém-criados. Faça um backup e atualize com a saída de –examine –scan:
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Verifique o conteúdo:
cat /etc/mdadm/mdadm.conf
Dentro do arquivo você verá entradas parecidas com estas (o conteúdo abaixo foi gerado automaticamente):
# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#
# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions
# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes
# automatically tag new arrays as belonging to the local system
HOMEHOST
# instruct the monitoring daemon where to send mail alerts
MAILADDR root
# definitions of existing MD arrays
# This file was auto-generated on Tue, 24 May 2011 21:11:37 +0200
# by mkconf 3.1.4-1+8efb9d1
ARRAY /dev/md/0 metadata=1.2 UUID=6cde4bf4:7ee67d24:b31e2713:18865f31 name=server1.example.com:0
ARRAY /dev/md/1 metadata=1.2 UUID=3ce9f2f2:ac89f75a:530c5ee9:0d4c67da name=server1.example.com:1
Observação: mantenha esse arquivo atualizado sempre que criar ou alterar arrays. O mdadm usa-o para reassemblar arrays no boot.
Atualizando /etc/fstab e /etc/mtab
Com o novo /dev/md0 (destinado a /boot), comente a entrada antiga de /boot que aponta para /dev/sda1 e adicione:
/dev/md0 /boot ext2 defaults 0 2
Exemplo do arquivo /etc/fstab após a modificação:
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#
proc /proc proc defaults 0 0
/dev/mapper/server1-root / ext3 errors=remount-ro 0 1
# /boot was on /dev/sda1 during installation
#UUID=9b817b3e-2cea-4505-b1be-5ca9fd67f2ff /boot ext2 defaults 0 2
/dev/md0 /boot ext2 defaults 0 2
/dev/mapper/server1-swap_1 none swap sw 0 0
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0
No arquivo /etc/mtab, substitua qualquer referência a /dev/sda1 por /dev/md0 (só para refletir o estado atual do sistema montado). Exemplo:
/dev/md0 /boot ext2 rw 0 0
Configurar GRUB2 para boot a partir do RAID
Crie um script customizado para o GRUB que assegure que o /boot no RAID seja usado. Copie /etc/grub.d/40_custom para /etc/grub.d/09_swraid1_setup e edite-o:
cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
vi /etc/grub.d/09_swraid1_setup
O conteúdo do arquivo deverá ser semelhante a:
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os {
insmod raid
insmod mdraid
insmod part_msdos
insmod ext2
set root='(md/0)'
echo 'Loading Linux 2.6.32-5-amd64 ...'
linux /vmlinuz-2.6.32-5-amd64 root=/dev/mapper/server1-root ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd.img-2.6.32-5-amd64
}
- Certifique-se de usar a versão correta do kernel nas linhas linux e initrd (verifique com uname -r ou conferindo /boot/grub/grub.cfg).
- Ajuste root=/dev/mapper/server1-root se o seu VG tiver outro nome.
A linha crucial é:
set root='(md/0)'
Ela instrui o GRUB a buscar /boot dentro do array RAID (md0) em vez de um disco físico, permitindo que o sistema dê boot mesmo que um dos discos falhe.
Desabilitar UUIDs no GRUB
Como não estamos usando UUIDs nos blocos para o boot neste fluxo, edite /etc/default/grub e descomente a linha:
GRUB_DISABLE_LINUX_UUID=true
Salve e, antes de rodar update-grub, verifique /boot/grub/device.map e adicione o segundo disco (/dev/sdb) para evitar erros de probe:
(hd0) /dev/sda
(hd1) /dev/sdb
Depois execute:
update-grub
E atualize o initramfs:
update-initramfs -u
5 Movendo nossos dados para os arrays RAID
Agora que os arquivos de configuração foram ajustados, copie o conteúdo do disco /dev/sda para /dev/sdb e sincronize o LVM para /dev/md1.
Mover dados LVM: pvmove
Para mover os blocos do PV em /dev/sda5 para o PV em /dev/md1 use pvmove (o exemplo abaixo usa -i 2 para informar maior verbosidade/intervalo — mantenha a opção conforme necessário):
pvmove -i 2 /dev/sda5 /dev/md1
Esse processo pode demorar dependendo do tamanho dos volumes e da velocidade dos discos. Você pode acompanhar I/O e progresso com ferramentas como iostat, pvdisplay, ou monitorando /proc/mdstat.
Após o pvmove concluir, remova /dev/sda5 do VG:
vgreduce server1 /dev/sda5
E marque o PV antigo como removido do sistema LVM:
pvremove /dev/sda5
Verifique com pvdisplay para confirmar que /dev/md1 é o PV ativo:
root@server1:~# pvdisplay
— Physical volume —
PV Name /dev/md1
VG Name server1
PV Size 4.76 GiB / not usable 1012.00 KiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 1218
Free PE 0
Allocated PE 1218
PV UUID W4I07I-RT3P-DK1k-1HBz-oJvp-6in0-uQ53KS
root@server1:~#
Converter /dev/sda5 para Linux raid autodetect e adicioná-lo ao array
Mude o tipo de partição de /dev/sda5 para fd (Linux raid autodetect) com fdisk e grave a tabela:
fdisk /dev/sda
Exemplo de interação:
root@server1:~# fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It’s strongly recommended to
switch off the mode (command ‘c’) and change display units to
sectors (command ‘u’).
Command (m for help): <– t
Partition number (1-5): <– 5
Hex code (type L to list codes): <– fd
Changed system type of partition 5 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 or after you run partprobe(8) or kpartx(8)
Syncing disks.
root@server1:~#
Em seguida adicione a partição ao array:
mdadm --add /dev/md1 /dev/sda5
Verifique o progresso da sincronização:
cat /proc/mdstat
Você verá uma saída indicando que md1 está em recuperação e mostrando progresso e velocidade:
root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/1] [_U]
[====>…………….] recovery = 22.5% (1127872/4989940) finish=0.3min speed=161124K/sec
md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]
unused devices:
root@server1:~#
Você pode executar:
watch cat /proc/mdstat
para monitorar continuamente o progresso (CTRL+C para sair do watch). Quando a sincronização terminar, você verá [UU] indicando que ambos os membros estão ok:
root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]
unused devices:
root@server1:~#
Montar /dev/md0 e copiar /boot
Crie um ponto de montagem temporário e monte /dev/md0:
mkdir /mnt/md0
mount /dev/md0 /mnt/md0
Confirme que o sistema vê os mounts:
mount
Você deverá ver linhas como:
root@server1:~# mount
/dev/mapper/server1-root on / type ext3 (rw,errors=remount-ro)
…
/dev/md0 on /boot type ext2 (rw)
/dev/md0 on /mnt/md0 type ext2 (rw)
root@server1:~#
Agora copie o conteúdo atual de /boot para o novo /dev/md0 montado em /mnt/md0. Use opções que preservem atributos e links:
cd /boot
cp -dpRx . /mnt/md0
Isso copia kernels, initramfs, grub e demais arquivos de boot para o RAID.
Checagens e verificação pós-migração
- Verifique /proc/mdstat para garantir que ambos os arrays estão com [UU].
- Rode update-grub novamente se alterou arquivos dentro de /boot.
- Rode update-initramfs -u para garantir que o initramfs inclua suporte a md/raid e LVM.
- Reinicie o sistema para testar se o GRUB consegue dar boot a partir do RAID (teste de failover: desligue fisicamente um disco e confirme boot).
Importante: execute o reboot apenas quando puder acessar a máquina via console físico ou KVM/IPMI caso algo saia errado.
Checklist de comandos essenciais (cole para referência rápida)
- Criar arrays com placeholder:
- mdadm –create /dev/md0 –level=1 –raid-disks=2 missing /dev/sdb1
- mdadm –create /dev/md1 –level=1 –raid-disks=2 missing /dev/sdb5
- Formatar /dev/md0:
- mkfs.ext2 /dev/md0
- Preparar LVM:
- pvcreate /dev/md1
- vgextend server1 /dev/md1
- Atualizar mdadm.conf:
- mdadm –examine –scan >> /etc/mdadm/mdadm.conf
- Atualizar GRUB:
- editar /etc/grub.d/09_swraid1_setup com set root=’(md/0)’
- editar /etc/default/grub, ativar GRUB_DISABLE_LINUX_UUID=true
- editar /boot/grub/device.map adicionando /dev/sdb
- update-grub
- update-initramfs -u
- Mover LVM:
- pvmove -i 2 /dev/sda5 /dev/md1
- vgreduce server1 /dev/sda5
- pvremove /dev/sda5
- Alterar partição e adicionar ao array:
- fdisk /dev/sda (mudar tipo para fd)
- mdadm –add /dev/md1 /dev/sda5
- Sincronizar e verificar:
- watch cat /proc/mdstat
- Copiar /boot:
- mkdir /mnt/md0
- mount /dev/md0 /mnt/md0
- cd /boot && cp -dpRx . /mnt/md0
Perguntas frequentes rápidas
Posso usar metadata 0.90 para /boot?
Sim, metadata 0.90 coloca metadata no final do dispositivo e é tradicionalmente mais compatível com boot-loaders antigos. metadata 1.2 é padrão moderno e coloca a metadata no início. Use –metadata=0.90 se seu carregador não suportar metadata no início.O que significa missing ao criar o array?
Usamos missing para criar temporariamente o array sem um dos discos; isso permite criar o array e depois adicionar o disco que está em uso no momento.Posso usar UUIDs em fstab ao migrar para RAID?
Sim. Usar UUIDs é comum para estabilidade, mas no contexto do boot via RAID, o GRUB pode precisar de configurações específicas. Neste guia optamos por apontar /boot para /dev/md0 diretamente.
Quando esse procedimento falha: causas comuns e soluções
- mdadm não encontra devices na inicialização: verifique /etc/mdadm/mdadm.conf e se o initramfs contém os módulos md. Rode update-initramfs -u após alterar mdadm.conf.
- update-grub falha com erro de device.map: adicione as entradas apropriadas para cada disco em /boot/grub/device.map.
- Partição não re-lida após fdisk: execute partprobe /dev/sda ou reinicie se for seguro.
- pvmove falha por espaço insuficiente: verifique se /dev/md1 tem espaço livre suficiente (vgdisplay/pvdisplay).
Alternativas e quando preferi-las
- RAID por hardware: use controladoras RAID quando performance consistente e suporte vendor-specific for necessário.
- Software RAID com metadata 0.90: prefira se precisar garantir compatibilidade máxima com boot-loders antigos.
- Não migrar /boot para RAID: mantém complexidade menor, mas sacrifica resiliência de boot a falhas de disco.
Mental model e heurística rápida
- Mental model: pense em RAID1 como espelhamento. Crie o espelho com um membro temporário (missing), migre os dados e depois adicione o segundo membro.
- Heurística: sempre reduzir a superfície de alterações a passos testáveis — crie arrays, adicione ao LVM, verifique, mova dados, verifique, atualize boot, reinicie em janela controlada.
Role-based checklist (admin de sistema)
- Preparação (Sysadmin): snapshot/backup, janela de manutenção, console remoto pronto.
- Execução (Operador): criar arrays, pvcreate, vgextend, pvmove, vgreduce, pvremove.
- Validação (QA/Operador): checar /proc/mdstat, pvdisplay, vgdisplay, montar /dev/md0, listar /boot.
- Recuperação (On-call): ter mídia de instalação e acesso físico para recuperar GRUB se necessário.
Testes e critérios de aceitação
- Critérios de aceitação:
- /dev/md0 e /dev/md1 existem e mostram [UU] em /proc/mdstat.
- /dev/md0 aparece montado em /boot e contém kernels e initrd.
- pvmove completou com sucesso e pvdisplay mostra /dev/md1 como PV ativo.
- update-grub e update-initramfs executam sem erros.
- Sistema dá boot com um dos discos removidos (teste de failover).
Procedimento de rollback básico
- Se o sistema não bootar a partir do RAID:
- Use console local ou mídia de recuperação.
- Monte o volume LVM do disco original (se disponível).
- Restaure /etc/fstab e /etc/mdadm/mdadm.conf do backup.
- Reinstale/registre entradas do GRUB apontando para o disco que estava funcionando.
Cheatsheet de mdadm e LVM úteis
- mdadm –create /dev/mdX –level=1 –raid-disks=2 missing /dev/sdY
- mdadm –examine –scan
- mdadm –add /dev/mdX /dev/sdZ
- mdadm –detail /dev/mdX
- pvcreate /dev/mdX
- vgextend
/dev/mdX - pvmove /dev/sdY /dev/mdX
- vgreduce
/dev/sdY - pvremove /dev/sdY
Resumo final
Este procedimento transforma discos simples em arrays RAID1 resilientes, integra o RAID ao LVM, atualiza a stack de boot e move os dados sem perda, desde que executado com cuidado e backups. Teste o boot e a remoção de discos para validar a resiliência do sistema.
Notas finais: mantenha documentação atualizada (mdadm.conf, fstab, device.map). Sempre planeje uma janela de manutenção para reboots de validação e tenha acesso físico ao servidor caso seja necessário reparar o boot manualmente.
Materiais semelhantes

Câmera lenta em qualquer Android

Corrigir INET_E_RESOURCE_NOT_FOUND no Windows 10

Esvaziar Lixeira automaticamente no Windows 10
Ajustar tamanho dos Speed Dials no Vivaldi

Google Pay em Android com Root — Guia Magisk
