Expandindo Volume no EC2

Seu disco no EC2 está cheio. O app está jogando erros, os logs pararam de rotacionar, e o pipeline de CI/CD está falhando silenciosamente. Você já redimensionou o volume no Console da AWS, mas o sistema operacional não tem a menor ideia. Este post mostra os passos exatos para fazer o SO usar esse espaço novo de verdade.

TL;DR: Redimensione um volume EBS no EC2 e expanda o filesystem para que o espaço novo fique disponível ao SO.
Stack: AWS EC2, EBS, Linux (bash), parted, resize2fs, growpart
Nível: Intermediário
Tempo de leitura: ~5 min

Já fiz isso mais vezes do que gostaria de admitir. O disco enche em produção às 2 da manhã, e você fica olhando para um volume que a AWS diz ser 500GB mas o SO insiste que ainda é 100GB. Dois comandos resolvem. Este post existe para você encontrar esses dois comandos antes de precisar do jeito difícil.

Modificar o volume

Comece no Console da AWS. Vá em EC2, encontre seu volume em Elastic Block Store e clique em Modify. Defina o novo tamanho e confirme. A AWS aplica a mudança no nível do block device, o SO ainda está feliz e sem saber de nada.

Verificando o espaço na instância

Acesse a instância via SSH e rode lsblk para ver o que o kernel acha sobre o layout do disco. Você vai notar que o block device físico já tem o novo tamanho, a partição é que ainda não foi avisada.

lsblk

Atualizando o disco

Três passos: verificar o uso atual com df, inspecionar o layout de partições com fdisk, expandir a partição com parted e depois redimensionar o filesystem. Não pule o passo do df, ele diz exatamente qual dispositivo e partição você precisa alterar.

Primeiro, verifique o uso do disco para identificar qual partição expandir (provavelmente nvme0n1p1):

sudo df -h

Depois, veja o layout de partições:

sudo fdisk -l

Use o parted para redimensionar a partição principal. Isso expande o limite da partição para preencher o espaço disponível no block device:

sudo parted /dev/nvme0n1

Dentro do parted, rode estes comandos:

print        # Ver a lista de partições
resizepart 1 # Redimensionar a partição 1 (ajuste se necessário)

Quando pedir o “End”, informe o tamanho alvo (ajuste para o seu volume):

537GB

Saia do parted:

quit

Agora redimensione o filesystem ext4 na partição. Este é o passo que realmente torna o espaço visível ao SO, sem isso você tem uma partição maior que ninguém pode usar:

sudo resize2fs /dev/nvme0n1p1

Verifique se o SO agora reporta o tamanho correto:

df -h

O que você fez

Você redimensionou um volume EBS pelo Console da AWS, confirmou o novo tamanho no nível do block device, expandiu a partição com parted e redimensionou o filesystem ext4 com resize2fs. O SO agora enxerga e pode usar todo o espaço alocado. Os seus logs podem respirar de novo.

Próximos passos

  • Configure alertas de uso de disco: Use o CloudWatch para disparar um alarme quando o uso do disco ultrapassar 80%. Descobrir que o disco está cheio por um alerta às 2 da manhã é um rito de passagem, mas uma vez já basta.
  • Automatize com AWS Systems Manager: Para frotas de instâncias, o SSM Run Command permite rodar esses passos de redimensionamento em várias máquinas sem precisar de SSH em cada uma.
  • Considere EFS para armazenamento compartilhado: Se várias instâncias precisam do mesmo storage e você continua batendo nesse problema, o Amazon EFS escala automaticamente e elimina toda essa cerimônia de redimensionamento.

Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.

Deixe um comentário