30 de abril de 2020 • 2 min de leitura
Diminuindo disco EBS em instância EC2
Talvez você esteja se perguntando, podemos diminuir o tamanho do volume do EBS? A resposta é não. É impossível diminuir o tamanho do volume do EBS. Quando você tem 100GB de EBS e decide modificá-lo para 30GB, você receberá um erro. Mas não precisa se preocupar, existe uma forma de contornarmos e aplicar reduções utilizando um disco menor.
A Amazon não permite a redução de disco, por motivos obvies ligado ao mapeamento dos dado dentro da estrutura de armazenamento. Porém existe uma forma de clonarmos e substituir o disco por um de menor capacidade, existem duas formas de fazermos isso, é um procedimento um pouco complexo.
Nesse primeiro artigo iremos abordar uma das formas de substituição, posteriormente irei falar mais sobre uma outra forma para ambientes um pouco mais complexos, vamos lá:
- Realizar um Snapshot do volume original.
- Criar um novo e menor volume EBS.
- Conectar o novo volume.
- Formatar o novo volume.
- Montar o novo volume.
- Copiar os dados do volume antigo para o novo.
- Preparar o novo volume.
- Substituir o novo volume na instância.
Antes de iniciar
Supomos que o ambiente que sofrerá a intervenção esteja disposta da seguinte forma
- Uma instância chamada
resize-machine
na zonaus-east-1a.
- Um volume EBS de 100GB chamado de
old-volume.
- Será feito a redução para 30GB utilizando o
novo-volume.
``
Tire um snapshot do volume
Na página de Volumes selecione o disco que deseja e tire um snapshot por precaução
Crie o novo volume EBS com 30GB
- Acesse a opção Elastic Block Store Volumes em EC2.
- Clique em Create Volume.
- Selecione o mesmo tipo de volume utilizado no volume antigo.
- Determine o tamanho do novo volume, no nosso caso 30.
- Escolha a mesma availability zone para armazenar o
novo-volume
us-east-1a
. - Adicione a Tag: Name com valor : novo-volume
Conecte o novo volume no EC2
- Botão direito no volume
- Clique em "Attach Volume"
- Selecione a instância
resize-machine
- Clique em "Attach"
Assim que acessarmos a máquina liste os discos para ver o novo volume disponível com o comando lsblk
, no nosso caso o disco disponível é o /dev/xvdf
.
Formatar o novo volume
- Cheque se o volume de fato não possui nenhum arquivo utilizando o comando
file -s /dev/xvdf
. - Se o retorno for
/dev/xvdf: data
, significa que o volume esta vazio e pronto para formatação. - Formate o disco utilizando o comando
mkfs -t ext4 /dev/xvdf
.
Montar o novo volume
- Crie um diretório para poder montarmos o volume
mkdir /mnt/resize
. - Monte o novo volume no diretório que criamos
mount /dev/resize
. - Cheque com o comando
df -h
se o disco foi montado sem problemas.
Copiar os dados do volume antigo para o novo.
- Nesse passo utilizaremos o
rsync
para copiar todo o disco antigo para o novo volume, para evitar problemas com timeout, indicamos a execução do comando dentro de uma screen. - Para criar uma nova screen basta acessar o servidor e digitar o comando
screen
. - Na nova screen basta executar o seguinte comando
rsync -axv --progress / /mnt/resize
.
Você pode sair da screen e voltar depois caso seja muito dado, para isso segue alguns comandos básicos para screen:
Preparar o novo volume
- será necessário instalar o
grub
no novo disco, para isso execute o comandogrub2-install --root-directory=/mnt/resize/ --force /dev/xvdf.
- Desmonte o
novo-volume
com o comandoumount /mnt/new-volume
. - Verifique as UUID dos discos para que possamos cloná-las
blkid
. - Com as UUID copiadas, vamos substitui-las com o comando
tune2fs -U UUID /dev/xvdf
. - Feito isso podemos sair e desligar a máquina e trocar os discos.
Substituir o novo volume na instância
- Pare a instância
resize-machine
. - Remova o disco
old-volume
enew-volume
. - Conecte o
new-volume
no ponto de montagem que estava o antigo no nosso caso será o/dev/sda1
. - Inicie a instância
resize-machine
.
Pronto, feito a troca do disco, basta iniciar a máquina novamente e validar todas as partições e serviços que operam no servidor. No próximo post vou abordar uma segunda forma para realizarmos esse procedimento, indicado para ambientes mais complexos e particionados.