Aumentando sua instância Ubuntu no Lightsail
Tags: lightsail, ubuntu, resize2fs, fdisk
Published: 2022-03-22 02:06:37

Hoje precisei fazer um upgrade de um dos sites que tenho hospedado no LightSail. O processo inicial é documentado pela Amazon, mas na prática, a parte que eu mais precisava não estava na documentação. Então depois de pesquisar um pouco, resolvi compartilhar com a comunidade para facilitar.

Segundo a documentação [nesse link](https://lightsail.aws.amazon.com/ls/docs/en_us/articles/how-to-create-larger-instance-from-snapshot-using-console) o que precisamos fazer é criar um snapshot, e depois subir uma outra instância nova a partir desse snapshot.

Então a partir da página inicial do console do LightSail vamos escolher a instância que queremos aumentar e vamos acessar a opção `Gerenciar` do menu:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/78a1fm19edt56haseiuq.png)

Na página da instância, vamos na aba `snapshots` e vamos usar a opção `Criar snapshot`. Vamos deixar o nome que ele mesmo sugeriu, e depois cliar em `Criar`:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/al7lc6qfj80lpqh2yfzo.png)

Depois que o snapshot for criado, vamos no menu do snapshot e vamos acessar a opção `Criar nova instância`:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hyo6genrycfbdxlh453r.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q2epylm08dejfup891k8.png)

Depois disso vamos apenas dar um nome qualquer e escolher o novo plano que desejamos para essa instância.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ivm6au3j1xqimp19qyjv.png)

Será preciso esperar após a criação. Ela vai aparecer no console como pendente. Após ela constar como em execução, vamos para a parte que não está na documentação.

#Redirecionando o ip público

Se seu servidor está sendo usando em produção, então você tem um endereço de ip público associado a essa máquina. Então precisamos apontar esse endereço para a nova instância que criamos.

Para isso, acesse a aba `Redes` ( na tela inicial do console, não dentro da instâcia ) e no endereço de IP stático em questão, vá na opção `Gerenciar` do menu:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eqbwapmhkq28drhty54s.png)
 
Escolha a opção `Desanexar`:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/abkmmbq6s4mgymfstc65.png)
 
Agora anexe a nova instância a esse endereço estático:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d7qtccmvw830u8iujrsr.png)

Agora vamos para o próximo ajuste que não está na documentação:

#Replicar as regras de firewall para a nova instância

Provavelmente você também tem regras de firewall no seu servidor. Só que quando você cria uma nova instância a partir do snapshot **as regras de firewall não são replicadas!**

Então acesse a instância antiga, e na aba `Redes` anote todas as regras que estão listadas para replicar depois. Para facilitar vomos abrir duas abas do navegador e com isso podemos só recriar uma por uma manualmente:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/whawg2ajkxa42my9ac3e.png)

Agora vamos para a última parte

#Aumentando o espaço de disco no Ubuntu

Com exceção de sistemas que precisam de ajustes específicos como o PostgreSQL, a memória e o processador já serão utilizados automaticamente pela nova instância. Mas isso não acontece com o espaço em disco. Embora o disco físico seja maior, o sistema operacional não entende que esse espaço está disponível para ser usado.

Então precisamos acessar essa instância e ajustar o tamanho da partição. Para isso vamos usar os utilitários `fdisk` e o `resize2fs`:

Primeiro vamos usar o fdisk para apagar a partição atual e criar uma nova com o mesmo setor de inicio.

Então primeiro vamos acessar o fdisk e depois vamos usar o comando `p` para listar as partições:

```shell
sudo fdisk /dev/xvda

Welcome to fdisk (util-linux 2.25.2).                                                                                                                                                           
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p
Disk /dev/xvda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd7f2e0e8

Device     Boot Start      End  Sectors Size Id Type
/dev/xvda1 *     4096 16773119 16769024   8G 83 Linux
```
Repare no campo `Start` que está em 4096. Vamos criar a nova partição iniciando nesse mesmo ponto.

Ainda no modo interativo do fdisk, use a opção `d` para excluir a partição:

```shell
Command (m for help): d
Selected partition 1
Partition 1 has been deleted.
```

Agora vamos criar a nova partição usando o comando `n`. Vamos preencher o primeiro setor com o valor que anotamos:

```shell
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 4096
Last sector, +sectors or +size{K,M,G,T,P} (4096-41943039, default 41943039): 

Created a new partition 1 of type 'Linux' and of size 20 GiB.
```

Depois disso vamos marcar ela como inicializável com o comando `a`:

```shell
Command (m for help): a
Selected partition 1
The bootable flag on partition 1 is enabled now.
```

Agora vamos usar o comando `p` para verificar se está tudo ok:

```shell
Command (m for help): p
Disk /dev/xvda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd7f2e0e8

Device     Boot Start      End  Sectors Size Id Type
/dev/xvda1 *     4096 41943039 41938944  20G 83 Linux
```

Agora que o campo `Size` já aparece com o tamanho novo, iremos gravar as alterações com o comando `w`:

```shell
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: 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).
```

Opa! Aqui temos um problema. O sistema não vai conseguir fazer a gravação porque essa unidade está montada. O que vamos precisar fazer é dizer para o sistema que queremos que ele aplique essas alterações na próxima vez que o sistema reiniciar. Isso é bem simples, basta criarmos um arquivo com o nome `forcefsck` na raiz do nosso disco para que o sistema faça exatamente o que precisamos:

```shell
sudo touch /forcefsck
```

Agora vamos reiniciar o servidor e verificar o que aconteceu:

```shell
sudo reboot
```

Ao reiniciar você provavalmente perceberá que o comando `df -h` continua mostrando o tamanho antigo. Isso acontece porque aumentamos a partição mas não aumentamos o tamanho registrado no sistema de arquivos.

Para corrigirmos isso, vamos utilizar o comando `resize2fs` que faz exatamente isso:

```shell
sudo resize2fs /dev/xvda1
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/xvda1 is now 10485504 (4k) blocks long.
```
Agora ao executar o comando `df-h` temos o novo tamanho disponível para uso:

```shell
df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            488M     0  488M   0% /dev
tmpfs           100M  3.1M   97M   4% /run
/dev/xvda1       39G   16G   24G  40% /
tmpfs           496M     0  496M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           496M     0  496M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /run/user/1000
```

#Conclusão.
Como vimos hoje, não basta apenas migrar seu servidor para uma instância maior. É preciso concluir mais algumas etapas para completar essa migração e ter o servidor realmente funcionando em uma instância com mais recursos. Vimos como fazer isso em uma instância com sistema operacional Ubuntu hospedada no serviço LightSail da plataforma AWS da Amazon.

Nos vemos na próxima!

😉