Como redimensionar partições RAID1 de software com LVM (reduzir e aumentar)
Versão 1.0
Autor: Falko Timme
Introdução
Este artigo descreve como reduzir (shrink) e aumentar (grow) partições RAID1 de software existentes quando há LVM sobre elas. Se você não usa LVM, leia outro guia específico para RAID sem LVM. Os exemplos foram testados com volumes lógicos formatados com ext3. Vou explicar o procedimento tanto para um array RAID íntegro quanto para um array degradado.
Importante: Não há garantia de que esse procedimento funcionará em todas as configurações. Faça backup completo antes de qualquer operação de redimensionamento.
Definições rápidas
- LVM: gerenciador de volumes lógicos (Logical Volume Manager).
- RAID1: espelhamento; duas cópias dos dados em discos diferentes.
- PV: Physical Volume — disco ou dispositivo físico para LVM.
- VG: Volume Group — conjunto de PVs.
- LV: Logical Volume — volume lógico que contém um sistema de arquivos.
Quando usar este guia (casos de uso)
- Substituir um disco com setores defeituosos por outro novo e evitar os setores ruins apagando-os ao reduzir o array.
- Reduzir temporariamente o tamanho do array para contornar um disco moribundo.
- Ajustar tamanhos de PV/VG/LV por migração ou manutenção.
Nota: para partições que contêm a raiz do sistema, você precisará de um sistema de resgate (ex.: Live-CD ou modo rescue) para desmontar volumes e operar com segurança.
Requisitos e precauções
- Backup completo e testado.
- Live-CD ou sistema de resgate se a partição raiz estiver no LVM que será redimensionado.
- Tenha mdadm, lvm2, e utilitários de sistema de arquivos instalados (resize2fs, e2fsck).
- Verifique a integridade do sistema de arquivos antes e depois (e2fsck).
- Tenha espaço livre suficiente para reduzir LVs (garanta que o uso atual caiba no novo tamanho).
Compatibilidade e notas de formato
- Exemplo usa ext3; para ext4 ou XFS, os comandos de redimensionamento podem ser diferentes (XFS só cresce online).
- Unidades e tamanhos são apresentados em GB conforme o autor original. Mantenha atenção a GiB vs GB ao converter.
Exemplo inicial — situação encontrada
Um servidor apresentou um array RAID1 degradado (/dev/md1) composto por /dev/sda5 e /dev/sdb5; /dev/sda5 falhou e /dev/sdb5 ainda estava ativo. Saída do /proc/mdstat do sistema:
server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb5[1]
4988032 blocks [2/1] [_U]
md0 : active raid1 sda1[0] sdb1[1]
248896 blocks [2/2] [UU]
unused devices:
server1:~#
Nos logs do kernel havia erros indicando setores defeituosos no final da partição /dev/sdb5:
Nov 22 18:51:06 server1 kernel: sdb: Current: sense key: Aborted Command
Nov 22 18:51:06 server1 kernel: end_request: I/O error, dev sdb, sector 1465142856
Objetivo do procedimento: reduzir /dev/md1 para excluir os setores defeituosos do final de /dev/sdb5, adicionar um novo /dev/sda5 (após trocar o disco), sincronizar, remover /dev/sdb5 com problemas, substituir /dev/sdb e então aumentar /dev/md1 de volta ao tamanho original.
Os exemplos abaixo usam dois discos pequenos (5 GB) para acelerar o teste. Em produção, discos serão maiores e operações levarão mais tempo.
Exemplo de estado atual (intacto) — saídas do sistema
Os comandos a seguir mostram o cenário em que o array está íntegro (antes de qualquer alteração). Preserve estas saídas para comparação posterior.
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda5[0] sdb5[1]
4988032 blocks [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
248896 blocks [2/2] [UU]
unused devices:
server1:~#
df -h
server1:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/server1-root
4.5G 741M 3.5G 18% /
tmpfs 126M 0 126M 0% /lib/init/rw
udev 10M 68K 10M 1% /dev
tmpfs 126M 0 126M 0% /dev/shm
/dev/md0 236M 18M 206M 8% /boot
server1:~#
pvdisplay
server1:~# pvdisplay
--- Physical volume ---
PV Name /dev/md1
VG Name server1
PV Size 4.75 GB / not usable 0
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 1217
Free PE 0
Allocated PE 1217
PV UUID Ntrsmz-m0o1-WAPD-xhsb-YpH7-0okm-qfdBQG
server1:~#
vgdisplay
server1:~# vgdisplay
--- Volume group ---
VG Name server1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 9
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 4.75 GB
PE Size 4.00 MB
Total PE 1217
Alloc PE / Size 1217 / 4.75 GB
Free PE / Size 0 / 0
VG UUID X3ZYTy-39yq-20k7-GCGk-vKVU-Xe0i-REdEu0
server1:~#
lvdisplay
server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/server1/root
VG Name server1
LV UUID 3ZgGnd-Sq1s-Rchu-92b9-DpAX-mk24-0aOMm2
LV Write Access read/write
LV Status available
# open 1
LV Size 4.50 GB
Current LE 1151
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0
--- Logical volume ---
LV Name /dev/server1/swap_1
VG Name server1
LV UUID KM6Yq8-jQaQ-rkP8-6f4t-zrXA-Jk13-yFrWi2
LV Write Access read/write
LV Status available
# open 2
LV Size 264.00 MB
Current LE 66
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:1
server1:~#
1) Reduzindo um array intacto (passo a passo)
Siga estes passos com calma. Refaça as saídas e verifique a integridade antes de prosseguir.
- Inicie um sistema de resgate (Live-CD) se necessário.
- Ative módulos necessários:
modprobe md
modprobe linear
modprobe multipath
modprobe raid0
modprobe raid1
modprobe raid5
modprobe raid6
modprobe raid10
- Atualize a configuração do mdadm e ative arrays:
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
mdadm -A --scan
- Inicie LVM:
/etc/init.d/lvm start
- Verifique o sistema de arquivos do LV que será reduzido:
e2fsck -f /dev/server1/root
- Planeje os novos tamanhos: no exemplo, /dev/md1 era 5 GB e será reduzido para 4 GB. Deve-se garantir que o sistema de arquivos seja menor que o LV e o LV menor que o PV, e o PV menor que o /dev/md1.
Explicação do fluxo lógico (do mais alto para o mais baixo):
- Sistema de arquivos <= LV
- Soma dos LVs <= PV
- PV <= dispositivo md (RAID)
- Reduza o sistema de arquivos no LV. Escolha um tamanho seguro (no exemplo: 2G para o FS):
resize2fs /dev/server1/root 2G
- Reduza o LV para um valor maior que o filesystem reduzido (ex.: 2.5G):
lvreduce -L2.5G /dev/server1/root
- Se houver um LV de swap ou outro LV no final do PV que impeça a redução, remova-o temporariamente. No exemplo, swap estava no final e foi removido:
lvremove /dev/server1/swap_1
Se o seu swap não estiver no final, ajuste a ordem ou reduza o LV final para liberar espaço.
- Reduza o PV para caber no novo tamanho do md (no exemplo, reduzir PV para 3G):
pvresize --setphysicalvolumesize 3G /dev/md1
- Reduza o array md para o tamanho desejado. O mdadm –grow –size recebe valor em KiB; 4 GiB = 4 × 1024 × 1024 = 4194304. Certifique-se de que o valor seja divisível por 64:
mdadm --grow /dev/md1 --size=4194304
- Atualize o PV para usar todo o espaço disponível no md:
pvresize /dev/md1
- Verifique o VG e recrie qualquer LV removido (por exemplo o swap):
lvcreate --name swap_1 -l 66 server1
mkswap /dev/server1/swap_1
- Estenda o LV root com as unidades livres (no exemplo, usou-se +317 PE):
lvextend -l +317 /dev/server1/root
- Redimensione o sistema de arquivos para ocupar o LV inteiro:
resize2fs /dev/server1/root
- Execute novamente a verificação do sistema de arquivos:
e2fsck -f /dev/server1/root
- Reinicie no sistema normal e verifique o novo tamanho do md e dos volumes:
cat /proc/mdstat
df -h
pvdisplay
vgdisplay
lvdisplay
As saídas no fim do exemplo mostram que /dev/md1 foi reduzido para ~4.00 GB e os LVs foram ajustados para caber.
2) Reduzindo um array degradado — princípios e passos
Cenário: um dos membros do RAID está com setores defeituosos e você precisa excluir os setores ruins do array antes de adicionar um disco novo.
Princípios básicos:
- Trabalhar com um array degradado aumenta o risco. Faça backup.
- Se o membro bom tiver erros apenas nos setores finais, reduzir o array para excluir esses setores pode permitir reconstruir com o novo disco.
- Se um disco já tiver falhas internas, substitua-o assim que possível.
Passos gerais (resumo):
- Identifique o membro com setores defeituosos usando dmesg / kernel logs e /proc/mdstat.
- Se possível, marque como failed e remova o membro ruim:
mdadm --manage /dev/md1 --fail /dev/sdb5
mdadm --manage /dev/md1 --remove /dev/sdb5
- Se o array ficar com um único disco (degradado), você pode tentar reduzir o array md para excluir setores defeituosos remanescentes no disco bom. Siga o mesmo fluxo LVM → reduzir FS → reduzir LV → pvresize –setphysicalvolumesize → mdadm –grow –size (valor menor) → pvresize.
Exemplo seguro (etapas detalhadas):
- Inicialize em modo resgate.
- Ative módulos e mdadm como no caso intacto.
- Verifique o sistema de arquivos e desmonte os LVs.
- Faça resize2fs para um tamanho menor e lvreduce para o LV que contém o FS (sempre com margem).
- Use pvresize –setphysicalvolumesize para reduzir o PV e garantir que o PV caiba no novo md.
- Faça mdadm –grow /dev/md1 –size=
para reduzir o dispositivo md. - Depois do md reduzido, pvresize (sem argumento) para usar o máximo do md atual.
Depois disso, adicione o novo disco (partição) e crie partição equivalente, adicione ao array e deixe o resync terminar:
mdadm --manage /dev/md1 --add /dev/sda5
Se antes você removeu o membro defeituoso, adicione o novo membro e aguarde a sincronização. Quando a sincronização terminar, você pode (se desejado) remover o membro antigo e recriá-lo substituindo o disco, para depois crescer o array md de volta ao tamanho original com mdadm –grow.
Aviso: quando trabalhar em arrays degradados com apenas um membro saudável, qualquer operação que afete dados em disco único é perigosa. Tenha backup.
3) Como aumentar o array de volta (grow) depois da troca
- Depois que ambos os membros estiverem saudáveis e sincronizados, você pode aumentar o array md:
mdadm --grow /dev/md1 --size=
- Aumente o PV para usar o novo tamanho do md:
pvresize /dev/md1
- Estenda LVs conforme necessário (lvextend) e então expanda os sistemas de arquivos (resize2fs para ext3/ext4).
lvextend -L + /dev/server1/root
resize2fs /dev/server1/root
- Verifique tudo com e2fsck e confirme em vgdisplay/pvdisplay/lvdisplay.
4) Verificação e recuperação (checks e rollback)
- Antes de qualquer alteração: copie saídas de /proc/mdstat, pvdisplay, vgdisplay, lvdisplay e df -h.
- Se algo falhar durante um lvreduce indevido, não tente reparar escrevendo no dispositivo; restaure do backup.
- Se reduzir PV falhar por falta de espaço, você poderá recriar LVs e restaurar dados a partir dos backups.
Rollback mínimo (conceito): se tiver snapshot ou backup LVM, restaure o LV a partir do snapshot. Caso contrário, restaure os dados a partir do backup completo.
5) Questões frequentes e solução de problemas
- Erro: “unable to find free PE” ao tentar estender LV — verifique vgdisplay para confirmar espaço livre.
- Erro: mdadm não aceita tamanho porque não é divisível por 64 — converta para KiB e ajuste.
- Redimensionamento do sistema de arquivos falha — execute e2fsck e garanta que você reduziu o FS para um valor menor que o LV antes de reduzir o LV.
6) Lista de verificação (playbook) para administrador
Antes (planejamento):
- Backup completo e testado.
- Tempo de janela de manutenção definido.
- Live-CD ou modo resgate disponível.
- Notificar usuários/serviços dependentes.
Durante (execução):
- Registrar saídas atuais (/proc/mdstat, pvdisplay, vgdisplay, lvdisplay, df -h).
- e2fsck no FS alvo.
- Reduzir FS com resize2fs.
- Reduzir LV com lvreduce (ou excluir LV no final).
- pvresize –setphysicalvolumesize.
- mdadm –grow –size.
- pvresize (para ocupar novo md).
- Recriar LVs removidos.
- Ajustar LVs e FS com lvextend e resize2fs.
- e2fsck final.
Depois (verificação):
- Validar serviços e montar pontos.
- Verificar logs de kernel e mdadm.
- Atualizar documentação e diagramas de partição.
7) Checklists por função
Administrador Sênior:
- Validar plano e backups.
- Aprovar janela de manutenção.
- Monitorar sincronização do RAID.
Administrador Operacional:
- Executar comandos do playbook.
- Registrar saídas e horários.
- Reverter se impacto inesperado ocorrer.
Equipe de Aplicação:
- Manter versões de serviços prontas para reinício.
- Validar integridade de dados da aplicação após a manutenção.
8) Matriz de riscos e mitigação
- Risco: perda de dados durante lvreduce. Mitigação: backup completo, snapshots.
- Risco: falha de sincronização após adicionar novo membro. Mitigação: monitorar /proc/mdstat e logs; testar resync em baixa carga.
- Risco: setores defeituosos adicionais. Mitigação: substituir disco com problemas o quanto antes.
9) Glossário (1 linha cada)
- RAID1: espelhamento de discos para redundância.
- LVM: camada de abstração de volumes para gerenciar discos logicamente.
- PV / VG / LV: componentes físicos, agrupamento e volumes lógicos do LVM.
10) Comandos de diagnóstico úteis
cat /proc/mdstat
mdadm --detail /dev/md1
pvdisplay
vgdisplay
lvdisplay
fdisk -l /dev/sda
dmesg | tail
journalctl -k | tail
11) Quando esse procedimento falha (contraexemplos)
- Se o disco saudável tiver setores defeituosos fora do final do dispositivo, reduzir o array pode não eliminar todos os erros.
- Se o LV que contém dados essenciais não puder ser reduzido porque os dados ocupam quase todo o espaço, você precisará migrar dados para outro disco antes de reduzir.
- Se o sistema de arquivos for XFS, reduzir on-disk não é suportado — apenas crescer é possível; será preciso migrar ou recriar o FS.
12) Alternativas e modelos mentais
Alternativas:
- Migrar LVs para outro VG/PV usando pvmove e então substituir discos, evitando reduzir o array.
- Reconfigurar RAID em discos novos, copiar dados e atualizar fstab/UUIDs.
Modelo mental: pense no conjunto como camadas — qualquer redução deve respeitar a ordem: filesystem <= LV <= PV <= md. Sempre ajuste de cima para baixo ao reduzir, e de baixo para cima ao crescer.
13) Resumo final
Reduzir e aumentar arrays RAID1 com LVM é possível e segue uma ordem lógica: sempre trabalhe do sistema de arquivos para baixo ao reduzir, e do dispositivo para cima ao aumentar. Em arrays degradados, proceda com mais cautela e priorize a substituição do disco com problemas. Faça backup, verifique com e2fsck e monitore mdadm durante sincronização.
Importante: reverta para backups se qualquer etapa crítica falhar. Documente cada etapa e retenha as saídas dos comandos para auditoria.
Notas: este guia foca em procedimentos práticos e comandos padrão. Adapte tamanhos (GB/KiB/PE) ao seu ambiente e verifique sempre a documentação do seu sistema de arquivos e das versões do mdadm e lvm2.
Materiais semelhantes
Instalar Ubuntu 8.04 com RAID1 por software
Migrar para RAID1: guia prático e seguro

Beeftext: inserir snippets no Windows

Desbloquear iPhone ao esquecer a senha
Redimensionar RAID1 com LVM: reduzir e aumentar
